Dynamic profiling and static prediction of the program execution profiles in the context of compiler optimizations
Abstract
Profile-guided optimizations significantly contribute to generating efficient programs. Their implementation requires the presence of program execution profiles. This paper analyzes two ways of obtaining program execution profiles: dynamic profiling and static profile prediction. Basic techniques for dynamic profiling include instrumentation profiling and sample-based profiling. The paper discusses the advantages and disadvantages of these two types of profiling and possible compromises. The paper analyzes in detail techniques for static profile prediction as a considerably cheaper alternative to profiling. Static approaches include static heuristics and advanced machine-learning techniques. The paper highlights the difference between classification and regression models, as well as the challenges that researchers face when defining sets of features that characterize code segments. By reviewing relevant literature, this paper answers the question of when it is appropriate to use which approach for generating program execution profiles. The paper discusses opportunities for further improvement of the static profile prediction techniques.