Побољшање перформанси програма употребом делимично контекстно осетљивих профила
Improving program performance with partially context-sensitive profiles
Докторанд
Vukasović, MajaМентор
Bojić, DraganЧланови комисије
Tomašević, MiloCvetanović, Miloš
Vujošević Janičić, Milena
Vuletić, Pavle
Метаподаци
Приказ свих података о дисертацијиСажетак
Велика предност компајлера који раде превођење у току извршавања програма
(JIT преводиоци) јесте доступност профила, који садрже информације о извршавању
програма, током превођења. Профили усмеравају поредак превођења и оптимизације,
које утичу на убрзавање извршавања програма. Превођење пре времена извршавања
(AOT превођење) такође може да користи профиле, али добијене засебним извршава-
њима програма, намењеним прикупљању профила. Профили садрже метричке податке
везане за програмски контекст. У зависности од дела програмског стека садржаног у
контекстима профила, они могу бити контекстно осетљиви или неосетљиви. Како би се
поједноставио процес прикупљања профила и смањила његова цена, уз очување преци-
зности, у многим системима се прикупљају делимично контекстно осетљиви профили,
који садрже само суфикс програмског стека. Иако је уложено доста истраживачких
напора у овој области, и даље постоји значајан потенцијал за унапређење перформанси
програма на основу делимично контекстно осе...тљивих профила.
У овој тези је описан нов алгоритам под називом PRINC за унапређење процеса
превођења и оптимизације инлајновања коришћењем делимично контекстно осетљивих
профила. На основу профила, алгоритам идентификује често извршаване секције кода
и преводи их са већим буџетом за оптимизације, притом не увећавајући значајно ве-
личину извршног кода. Ова техника је погодна за имплементацију у оквиру већине
AOT преводилаца, који могу да користе делимично контекстно осетљиве профиле. Ал-
горитам PRINC укључује компоненту за детекцију често извршаваног кода како би ре-
конструисао значајне целине кода, чијом агресивнијом оптимизацијом се постижу боље
перформансе целокупног програма. Распоред превођења и оптимизација инлајновања
су модификовани тако да користе информације о често извршаваном коду.
У тези је формално описан предложени алгоритам, укључујући његове компоненте
и хеуристике. Такође, алгоритам PRINC је имплементиран као саставни део савременог
AOT преводиоца GraalVM Native Image, а значајни делови имплементације су такође
приказани у раду. Исцрпном евалуацијом предложеног алгоритма над 16 бенчмарка из
скупова DaCapo, Scalabench и Renaissance показано је побољшање времена извршава-
ња програма између 22% и 40% за 4 бенчмарка и између 2.5% и 10% за 5 бенчмарка.
Увећање генерисаног кода варира између 0.8% и 9%, док је у случају 10 бенчмарка
оно испод 2.5%. На основу добијених резултата показан је значајан потенцијал за уна-
пређење перформанси, а у оквиру квалитативне евалуације показано је да алгоритам
може бити имплементиран и у другим оптимизационим компајлерима уз адекватно при-
лагођавање конкретном окружењу.
Availability of profiling information is a major advantage of just-in-time (JIT)
compilation. Profiles guide the compilation order and optimizations, thus substantially
improving program performance. Ahead-of-time (AOT) compilation can also utilize profiles,
obtained during separate profiling runs of the programs. Profiles can be context-sensitive, i.e.,
each profile entry is associated with a call-stack. To ease profile collection and reduce overheads,
many systems collect partially context-sensitive profiles, which record only a call-stack suffix.
Although there exists a significant portion of prior research work, there is still a lot of potential
for further program performance improvement using partially context-sensitive profiles.
This thesis describes a novel technique that exploits partially context-sensitive profiles
to determine which portions of code are hot, and compile them with additional compilation
budget. This technique is applicable to most AOT compilers that can acces...s partially context-
sensitive profiles, and its goal is to improve program performance without significantly
increasing code size. The technique relies on a new hot-code-detection algorithm to reconstruct
hot regions based on the partial profiles. The compilation ordering and the inlining of the
compiler are modified to exploit the information about the hot code. Proposed algorithm,
named PRINC, is formally described, after which follows the description of the production-
ready implementation inside GraalVM Native Image, a state-of-the-art AOT compiler for
Java. Evaluation of the proposed technique on 16 benchmarks from DaCapo, Scalabench and
Renaissance suites shows a performance improvement between 22% and 40% on 4 benchmarks,
and between 2.5% and 10% on 5 benchmarks. Code-size increase ranges from 0.8 − 9%, where
10 benchmarks exhibit an increase of less than 2.5%. Based on the evaluation results it is
proven that there exists a great potential for performance improvement and that the algorithm
can be implemented in other modern compilers with respective algorithm adjustment.