scieee AI-readable full text Open interactive document viewer

GraalMHC: ML-Based Method-Hotness Classification for Binary-Size Reduction in Optimizing Compilers - Supplementary Material

Čugurović, Milan; Prokopec, Aleksandar; Spasojevic, Boris; Jovanovic, Vojin; Vujošević Janičić, Milena

Abstract

Supplementary material for publication: Milan Čugurović, Aleksandar Prokopec, Boris Spasojević, Vojin Jovanović, and Milena Vujošević Janičić. 2026. GraalMHC: ML-Based Method-Hotness Classification for Binary-Size Reduction in Optimizing Compilers. In Proceedings of the 35th ACM SIGPLAN International Conference on Compiler Construction (CC ’26), January 31-February 01, 2026, Sydney, NSW, Australia. ACM, New York, NY, USA, 13 pages. https://doi.org/10.1145/3771775.3786276.

Full text

GraalMHC: ML-Based Method-Hotness Classification for Binary-Size Reduction in Optimizing Compilers: Supplementary Material This document provides supplementary material for publication: Milan ˇ Cugurovi´ c, Aleksandar Prokopec, Boris Spasojevi´ c, Vojin Jovanovi´ c, and Milena Vujoˇ sevi´ c Janiˇ ci´ c. 2026. GraalMHC: ML-Based Method-Hotness Classification for BinarySize Reduction in Optimizing Compilers. In Proceedings of the 35th ACM SIGPLAN International Conference on Compiler Construction (CC ’26), January 31-February 01, 2026, Sydney, NSW, Australia. ACM, New York, NY, USA, 13 pages. https://doi.org/10.1145/3771775.3786276. Section I offers a detailed description of how we adapted the Wu and Larus static profiler [1] for method hotness prediction. Section II and Section III outline our grid search procedures for both instance weights and model hyperparameters. Section IV presents a comprehensive summary of our evaluation results, including charts and aggregated tables that report the geometric mean, as well as the minimum and maximum (best and worst) results achieved for each suite. Section V details the evaluation performed on ARM machines. Section VI reports the results of our feature set ablation study, while Section VII discusses feature importance findings. Finally, Sections VIII and IX present a comprehensive evaluation of experiments examining the effects of varying regression thresholds and binary classification thresholds, respectively, in our method hotness prediction models. CONTENTS I Implementation of the Wu-Larus static profiler 2 II Grid Search for Instance Weights 3 III Grid Search for Model Hyperparameters 6 IV GraalMHC: Evaluation 9 V GraalMHC Evaluation on ARM Machines 11 VI Feature Set: Ablation Study 12 VII Feature Set: Feature Importance 14 VIII Regression Models for Predicting Normalized Call Counts 17 IX Regression Models for Predicting Normalized Call Counts (Tuned Labels) 22 References 27 I. IMPLEMENTATION OF THE WU-LARUS STATIC PROFILER The original Wu and Larus algorithm for call count prediction [1] can not be directly applied due to fundamental differences in programming languages used in their and our work. The AOT-compiled Java and Scala programs include a virtual machine and make extensive use of virtual calls, lambda expressions, and other high-level constructs that are absent in the C/C++ programs used in the original study. The inclusion of a virtual machine implies that the programs and their corresponding call graphs are several orders of magnitude larger than those considered in the original algorithm. Furthermore, the original Wu and Larus formulation did not account for virtual dispatch or lambda-based functional abstractions. Therefore, a direct implementation of the original algorithm produced substantially worse results compared to the default configuration: execution time increased by approximately a factor of three with 30% memory savings. We adopt the Wu and Larus approach to efficiently handle virtual calls and scale to much larger call graphs. In our adaptation, virtual calls are treated as regular calls, except that the call graph expands at those points to include all potential call targets. To traverse the enlarged graph efficiently, we leverage the fact that the Wu and Larus approach predicts absolute call counts, which are not directly used within optimization heuristics. Instead of computing exact call counts, we only determine whether a call count exceeds a threshold corresponding to GraalVM’s internal classification of methods as warm or cold, which drives its optimization heuristics. This binary classification enables our adapted algorithm to efficiently explore substantially larger call graphs. 2 II. GRID SEARCH FOR INSTANCE WEIGHTS Figure 1 presents the results for O2, while Figure 2 shows the corresponding results for O3. A summary of all results is given in Table I. O2 (default) balanced x12-120 x18-180 x24-240 x30-300 x36-360 x42-420 x48-480 x54-540 x60-600 runtime 1.1102 1.0888 1.0964 1.0645 1.0706 1.0697 1.0670 1.0811 1.0677 1.0531 binary-size 0.6917 0.7150 0.7293 0.7490 0.7566 0.7585 0.7640 0.7679 0.7696 0.7735 compile-time 0.9574 0.9766 0.9798 0.9911 0.9972 0.9904 1.0057 1.0058 0.9988 0.9984 x12-1200 x18-1800 x24-2400 x30-3000 x36-3600 x42-4200 x48-4800 x54-5400 x60-6000 runtime 1.0852 1.0857 1.0734 1.0072 1.0101 1.0233 1.0198 1.0507 1.0168 binary-size 0.7185 0.7430 0.7539 0.8098 0.8160 0.7925 0.8275 0.7983 0.8266 compile-time 0.9772 0.9857 0.9867 1.0089 1.0203 1.0062 1.0305 1.0061 1.0147 x12-600 x18-900 x24-1200 x30-1500 x36-1800 x42-2100 x48-2400 x54-2700 x60-3000 runtime 1.0814 1.0517 1.0608 1.0916 1.0795 1.0641 1.0564 1.0472 1.0415 binary-size 0.7162 0.7419 0.7499 0.7562 0.7618 0.7636 0.7698 0.7703 0.8070 compile-time 0.9780 0.9837 0.9878 1.0018 1.0042 0.9966 0.9998 1.0072 1.0184 O3 balanced x12-120 x18-180 x24-240 x30-300 x36-360 x42-420 x48-480 x54-540 x60-600 runtime 1.1621 1.1124 1.0980 1.1155 1.0908 1.0832 1.1059 1.1239 1.1053 1.0778 binary-size 0.5312 0.5654 0.5798 0.5972 0.6132 0.6170 0.6270 0.6312 0.6327 0.6415 compile-time 0.7849 0.8096 0.8182 0.8346 0.8483 0.8492 0.8623 0.8687 0.8483 0.8593 x12-1200 x18-1800 x24-2400 x30-3000 x36-3600 x42-4200 x48-4800 x54-5400 x60-6000 runtime 1.1120 1.1121 1.1056 1.0198 1.0443 1.0434 1.0544 1.0793 1.0533 binary-size 0.5686 0.5866 0.6060 0.7171 0.7230 0.6773 0.7402 0.6872 0.7363 compile-time 0.8076 0.8280 0.8396 0.8908 0.9050 0.8768 0.9153 0.8867 0.9139 x12-600 x18-900 x24-1200 x30-1500 x36-1800 x42-2100 x48-2400 x54-2700 x60-3000 runtime 1.1052 1.1074 1.0940 1.0928 1.0922 1.0813 1.0913 1.0743 1.0553 binary-size 0.5668 0.5841 0.5995 0.6172 0.6241 0.6293 0.6339 0.6363 0.7107 compile-time 0.8085 0.8177 0.8291 0.8371 0.8547 0.8554 0.8589 0.8557 0.8987 TABLE I: Grid search results for the optimal instance weights of regular and hot methods. Columns show different instance weighting strategies, where xR×H indicates the weights assigned to regular and hot instances, respectively. The cold class always has a weight of 1. All reported values are normalized relative to the default O2 and O3 compilation configurations. 3 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 balanced x12-120 x18-180 x24-240 x30-300 x36-360 x42-420 x48-480 x54-540 x60-600 runtime binary-size compile-time Instance Weights Grid 1 @ O2 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 x12-1200 x18-1800 x24-2400 x30-3000 x36-3600 x42-4200 x48-4800 x54-5400 x60-6000 runtime binary-size compile-time Instance Weights Grid 2 @ O2 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 x12-600 x18-900 x24-1200 x30-1500 x36-1800 x42-2100 x48-2400 x54-2700 x60-3000 runtime binary-size compile-time Instance Weights Grid 3 @ O2 Fig. 1: Effect of different XGBoost models for method-hotness classification on program runtime, binary size, and compile time under the O2 compiler configuration, under different instance-weighting strategies. Models are denoted by the instanceweighting parameters applied to regular (R) and hot (H) methods, written in the form xR-H. 4 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 balanced x12-120 x18-180 x24-240 x30-300 x36-360 x42-420 x48-480 x54-540 x60-600 runtime binary-size compile-time Instance Weights Grid 1 @ O3 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 x12-1200 x18-1800 x24-2400 x30-3000 x36-3600 x42-4200 x48-4800 x54-5400 x60-6000 runtime binary-size compile-time Instance Weights Grid 2 @ O3 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 x12-600 x18-900 x24-1200 x30-1500 x36-1800 x42-2100 x48-2400 x54-2700 x60-3000 runtime binary-size compile-time Instance Weights Grid 3 @ O3 Fig. 2: Effect of different XGBoost models for method-hotness classification on program runtime, binary size, and compile time under the O3 compiler configuration, under different instance-weighting strategies. Models are denoted by the instanceweighting parameters applied to regular (R) and hot (H) methods, written in the form xR-H. 5 III. GRID SEARCH FOR MODEL HYPERPARAMETERS Figures 3 and 4 show the results under the O2 and O3 compiler configurations, respectively. Table III summarizes the validation metrics for all models. default (O2) 500x4 500x5 500x6 500x7 500x8 500x9 500x10 500x11 500x12 runtime 1.0275 1.0068 1.0294 1.0360 1.0129 1.0383 1.0307 1.0363 1.0558 binary-size 0.9208 0.8853 0.8634 0.8371 0.8064 0.7916 0.8056 0.7746 0.7657 compile-time 1.0224 1.0115 1.0039 0.9873 0.9800 0.9692 0.9918 0.9698 0.9622 1000x4 1000x5 1000x6 1000x7 1000x8 1000x9 1000x10 1000x11 1000x12 runtime 1.0383 1.0246 1.0108 1.0355 1.0004 1.0375 1.0270 1.0424 1.0792 binary-size 0.8937 0.8591 0.8324 0.8053 0.7917 0.7751 0.8068 0.7759 0.7542 compile-time 1.0238 1.0120 0.9970 0.9869 0.9870 0.9797 0.9916 0.9879 0.9894 1500x4 1500x5 1500x6 1500x7 1500x8 1500x9 1500x10 1500x11 1500x12 runtime 1.0236 1.0316 1.0261 1.0325 1.0139 1.0396 1.0200 1.0343 1.0820 binary-size 0.8755 0.8506 0.8180 0.7913 0.7947 0.7680 0.8098 0.7847 0.7504 compile-time 1.0249 1.0188 1.0038 0.9907 0.9999 0.9871 1.0100 0.9996 1.0203 O3 500x4 500x5 500x6 500x7 500x8 500x9 500x10 500x11 500x12 runtime 1.0327 1.0333 1.0336 1.0392 1.0590 1.0678 1.0370 1.0729 1.0769 binary-size 0.8969 0.8492 0.8013 0.7576 0.7072 0.6815 0.7108 0.6475 0.6280 compile-time 0.9877 0.9575 0.9343 0.9011 0.8784 0.8641 0.8657 0.8413 0.8310 1000x4 1000x5 1000x6 1000x7 1000x8 1000x9 1000x10 1000x11 1000x12 runtime 1.0228 1.0230 1.0333 1.0502 1.0576 1.0765 1.0484 1.1189 1.1053 binary-size 0.8554 0.7933 0.7438 0.7040 0.6759 0.6463 0.7130 0.6522 0.6094 compile-time 0.9745 0.9307 0.8998 0.8740 0.8688 0.8553 0.8852 0.8540 0.8310 1500x4 1500x5 1500x6 1500x7 1500x8 1500x9 1500x10 1500x11 1500x12 runtime 1.0445 1.0326 1.0190 1.0696 1.0644 1.0519 1.0208 1.0869 1.1158 binary-size 0.8249 0.7813 0.7175 0.6760 0.6800 0.6316 0.7172 0.6646 0.6023 compile-time 0.9699 0.9261 0.8926 0.8778 0.8762 0.8489 0.8768 0.8724 0.8583 TABLE II: Grid search for the best model hyperparameters. Each column corresponds to a different tree configuration in the ensemble, where DxT indicates the number of trees and the maximum depth of each tree (e.g., 500x4 means 500 trees with a maximum depth of 4). All reported values are normalized relative to the default O2 and O3 compilation configurations. 6 Model (TxD) 0.00 0.25 0.50 0.75 1.00 1.25 500x4 500x5 500x6 500x7 500x8 500x9 500x10 500x11 500x12 runtime binary-size compile-time Hyperparameter Search Grid 1 @ O2.pdf Model (TxD) 0.00 0.25 0.50 0.75 1.00 1.25 1000x4 1000x5 1000x6 1000x7 1000x8 1000x9 1000x10 1000x11 1000x12 runtime binary-size compile-time Hyperparameter Search Grid 2 @ O2.pdf Model (TxD) 0.00 0.25 0.50 0.75 1.00 1.25 1500x4 1500x5 1500x6 1500x7 1500x8 1500x9 1500x10 1500x11 1500x12 runtime binary-size compile-time Hyperparameter Search Grid 3 @ O2.pdf Fig. 3: Effect of different XGBoost models for method-hotness classification on program runtime, binary size, and compile time under the O2 compiler configuration, using various model hyperparameters. Models are denoted as TxD, where T is the number of decision trees in the ensemble and D is the maximum depth of each tree. 7 Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 500x4 500x5 500x6 500x7 500x8 500x9 500x10 500x11 500x12 runtime binary-size compile-time Hyperparameter Search Grid 1 @ O3.pdf Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 1000x4 1000x5 1000x6 1000x7 1000x8 1000x9 1000x10 1000x11 1000x12 runtime binary-size compile-time Hyperparameter Search Grid 2 @ O3.pdf Model (xR-H) 0.00 0.25 0.50 0.75 1.00 1.25 1500x4 1500x5 1500x6 1500x7 1500x8 1500x9 1500x10 1500x11 1500x12 runtime binary-size compile-time Hyperparameter Search Grid 3 @ O3.pdf Fig. 4: Effect of different XGBoost models for method-hotness classification on program runtime, binary size, and compile time under the O3 compiler configuration, using various model hyperparameters. Models are denoted as TxD, where T is the number of decision trees in the ensemble and D is the maximum depth of each tree. 8 IV. GRAALMHC: EVALUATION Figures 5 and 6 present the evaluation results for the Renaissance suite under the O2 and O3 compiler configurations, respectively. Table III shows the minimum and maximum aggregated values, along with the geometric mean of the results. Similarly, Figures 7 and 8, as well as Table IV, provide the corresponding results for the Barista suite. 0.00 1.00 2.00 3.00 4.00 S1 S2 S3 DCC profiler WL profiler time binary-size compile-time O2 @ Renaissance Fig. 5: GraalMHC Performance (Renaissance Suite, O2 Compiler Configuration). 0.00 1.00 2.00 3.00 S1 S2 S3 DCC profiler WL profiler time binary-size compile-time O3 @ Renaissance Fig. 6: GraalMHC Performance (Renaissance Suite, O3 Compiler Configuration). TABLE III: GraalMHC: Metric Aggregates for O2 and O3 Compiler Configurations (Renaissance Suite) O2 O3 S1 S2 S3 DCC prof. WL prof. S1 S2 S3 DCC prof. WL prof. time GEOMEAN 1.0167 1.0311 1.0584 1.0005 1.0258 1.0137 1.0490 1.0717 0.9991 1.0282 MIN 0.9825 0.9895 1.0027 0.9609 0.9000 0.9647 1.0012 0.9903 0.9799 0.9935 MAX 1.0543 1.0895 1.1489 1.0311 1.1583 1.0467 1.1046 1.2231 1.0297 1.1717 binary size GEOMEAN 0.9134 0.8575 0.8287 0.6930 0.9253 0.8889 0.7926 0.7405 0.5136 0.8913 MIN 0.8849 0.8250 0.7830 0.6424 0.8567 0.8557 0.7700 0.6964 0.4798 0.7541 MAX 0.9454 0.8983 0.8833 0.7719 0.9584 0.9580 0.8537 0.7913 0.6072 0.9383 compile time GEOMEAN 1.0276 1.0217 1.0076 0.8369 3.1492 0.9821 0.9320 0.9026 0.7029 2.6351 MIN 1.0062 0.9979 0.9816 0.8150 1.8064 0.9576 0.9110 0.8825 0.6718 1.6812 MAX 1.0669 1.0601 1.0290 0.8653 12.3081 1.0489 0.9802 0.9185 0.7441 8.3258 9 TABLE X: The 150 most important features of the S3 model, ranked by information gain. # Feature Gain # Feature Gain 1. SIG: 2 hierarchy depth 133662.81 76. IR: DynamicNewInstanceNode 511.50 2. DF: FormalReceiverTypeFlow 85931.38 77. IR: StackValueNode 494.35 3. SIG: 3 name length 77428.93 78. IR: CopyOfNode$CopyOfRange 493.86 4. estimatedCPUCycles 38602.72 79. IR: NewArrayNode 475.30 5. SIG: 0 number of parameters 19725.60 80. DF: BooleanNullCheckTypeFlow 471.23 6. incompleteTypeState 18460.46 81. IR: BitCountNode 468.36 7. SIG: 1 return void 11226.09 82. DF: ConstantTypeFlow 466.02 8. estimatedAssemblySize 8671.77 83. DF: ArrayCopyTypeFlow 464.79 9. IR: FixedValueAnchorNode 6200.75 84. IR: SnippetSubstitutionNode 450.13 10. DF: FormalParamTypeFlow 4362.67 85. IR: MaterializedObjectState 428.74 11. IR: NewPodInstanceNode 3677.16 86. IR: SubstrateMethodCallTargetNode 422.51 12. IR: LogicCompareAndSwapNode 3652.42 87. IR: MonitorExitNode 420.92 13. IR: CEntryPointLeaveNode 2854.20 88. IR: ReadReturnAddressNode 416.14 14. IR: CFunctionEpilogueNode 2853.56 89. IR: SubstrateIdentityHashCodeNode 412.94 15. IR: InvokeWithExceptionNode 2475.22 90. IR: OffsetAddressNode 411.43 16. typeFlowParams 0 number of parameters 2248.35 91. isProtected 408.61 17. IR: RawStoreNode 2181.38 92. IR: ArrayRegionEqualsNode 406.00 18. IR: CGlobalDataLoadAddressNode 1897.93 93. IR: AbsNode 401.25 19. IR: StaticFieldsSupport$StaticFieldResolvedBaseNode 1804.36 94. IR: XorNode 400.53 20. IR: CEntryPointUtilityNode 1774.52 95. IR: WriteCurrentVMThreadNode 399.42 21. DF: BooleanPrimitiveCheckTypeFlow 1751.31 96. IR: SignExtendNode 398.55 22. IR: CInterfaceReadNode 1707.72 97. IR: JavaWriteNode 398.45 23. estimatedCPUCheap 1696.10 98. IR: RightShiftNode 397.81 24. IR: UnsafeCompareAndExchangeNode 1633.82 99. IR: FloatConvertNode 395.18 25. IR: AtomicReadAndAddNode 1572.69 100. DF: StoreFieldTypeFlow$StoreInstanceFieldTypeFlow 388.28 26. IR: CopyOfNode$CopyOf 1392.53 101. DF: SourceTypeFlow 388.01 27. DF: OffsetStoreTypeFlow$UnsafeStoreTypeFlow 1371.44 102. DF: DefaultSpecialInvokeTypeFlow 387.64 28. IR: CInterfaceWriteNode 1321.72 103. IR: SubstrateIndirectCallTargetNode 380.36 29. IR: WriteStackPointerNode 1264.09 104. IR: BoxNode$PureBoxNode 378.14 30. IR: MembarNode 1230.74 105. isNative 376.58 31. IR: FrameState 1171.37 106. DF: ConstantPrimitiveSourceTypeFlow 375.77 32. IR: UnsafeCompareAndSwapNode 1158.23 107. IR: UnboxNode 372.94 33. IR: ArrayCopyWithConversionsNode 1117.81 108. IR: VirtualArrayNode 369.51 34. IR: FieldOffsetNode 1099.07 109. IR: ArrayLengthNode 368.47 35. IR: SubstrateObjectCloneWithExceptionNode 1053.27 110. IR: LoweredDeadEndNode 358.82 36. IR: RawLoadNode 1014.54 111. IR: OrNode 357.42 37. IR: StringCodepointIndexToByteIndexNode 988.95 112. DF: ActualReturnTypeFlow 355.49 38. IR: PauseNode 938.04 113. IR: ShortCircuitOrNode 354.62 39. isMainEntryPoint 934.28 114. IR: LoopEndNode 352.12 40. IR: ComputeObjectAddressNode 925.88 115. IR: UnsignedRightShiftNode 351.20 41. isEntryPoint 920.71 116. IR: StoreIndexedNode 350.32 42. DF: LoadFieldTypeFlow$LoadStaticFieldTypeFlow 909.66 117. IR: VectorWriteNode 347.58 43. IR: ReadCallerStackPointerNode 902.00 118. IR: NegateNode 344.91 44. IR: LoadFieldNode 901.55 119. isSynchronized 343.44 45. DF: DefaultStaticInvokeTypeFlow 846.74 120. IR: InstanceOfNode 339.68 46. IR: WordCastNode 829.24 121. IR: VectorizedHashCodeNode 337.63 47. IR: IntegerNormalizeCompareNode 782.30 122. IR: AddressOfVMThreadLocalNode 335.11 48. IR: RuntimeCPUFeatureRegionFeature$CPUFeatureRegionEnterNode 778.41 123. DF: LoadFieldTypeFlow$LoadInstanceFieldTypeFlow 330.16 49. IR: ConstantNode 770.91 124. DF: ConditionalFlow 324.33 50. IR: StateSplitProxyNode 765.42 125. IR: ZeroExtendNode 322.09 51. IR: CEntryPointEnterNode 754.91 126. IR: IntegerTestNode 321.80 52. IR: MinNode 745.47 127. IR: ConditionalNode 320.42 53. IR: NewInstanceNode 728.10 128. IR: DynamicPiNode 319.80 54. IR: IndexAddressNode 718.74 129. IR: FinalFieldBarrierNode 319.13 55. isPublic 691.14 130. DF: PrimitiveFilterTypeFlow$VariableFilter 317.70 56. IR: LoadVMThreadLocalNode 684.38 131. IR: CountLeadingZerosNode 316.40 57. IR: ValueCompareAndSwapNode 680.01 132. IR: NarrowNode 316.11 58. DF: BooleanInstanceOfCheckTypeFlow 676.87 133. IR: SubstrateReflectionGetCallerClassNode 309.75 59. IR: AddNode 657.70 134. DF: CloneTypeFlow 305.97 60. isFinal 656.71 135. IR: IntegerBelowNode 305.92 61. IR: LoadIndexedNode 654.67 136. IR: SubNode 299.69 62. DF: FormalReturnTypeFlow 649.31 137. IR: AllocatedObjectNode 295.22 63. IR: AndNode 624.85 138. IR: IsStaticFinalFieldInitializedNode 295.03 64. IR: MethodCallTargetNode 622.42 139. IR: BeginNode 285.76 65. isPrivate 593.97 140. DF: DynamicNewInstanceTypeFlow 280.77 66. IR: JavaReadNode 584.37 141. IR: IntegerAddExactSplitNode 277.54 67. isStatic 580.47 142. IR: IntegerLessThanNode 277.13 68. IR: CalcStringAttributesNode 574.90 143. IR: SignedFloatingIntegerDivNode 273.32 69. IR: FloatLessThanNode 540.71 144. IR: PiNode 272.81 70. IR: IntegerMulExactSplitNode 539.44 145. IR: StoreFieldNode 272.64 71. IR: ReadReservedRegisterFloatingNode 539.14 146. IR: EndNode 266.33 72. IR: UnwindNode 536.12 147. IR: ObjectEqualsNode 261.99 73. IR: ReachabilityFenceNode 532.62 148. IR: StoreVMThreadLocalNode 259.42 74. IR: ReinterpretNode 530.22 149. IR: ArrayEqualsNode 257.43 75. IR: ParameterNode 528.05 150. IR: GetClassNode 253.75 16 VIII. REGRESSION MODELS FOR PREDICTING NORMALIZED CALL COUNTS In this section we present detailed results about varying classification threshold on top of the regression XGBoost model for normalized call frequency prediction. Classification Threshold 0.0000 0.5000 1.0000 1.5000 2.0000 2.5000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Time (Renaissance, O2) (a) Time (Renaissance, O2) Classification Threshold 0.0000 0.2000 0.4000 0.6000 0.8000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Renaissance, O2) (b) Binary Size (Renaissance, O2) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Renaissance, O2) (c) Compile Time (Renaissance, O2) Fig. 15: Overview of normalized call counts for time, binary size, and compile time (Renaissance, O2). 17 Classification Threshold 0.0000 0.5000 1.0000 1.5000 2.0000 2.5000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Time (Renaissance, O3) (a) Time (Renaissance, O3) Classification Threshold 0.0000 0.1000 0.2000 0.3000 0.4000 0.5000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Renaissance, O3) (b) Binary Size (Renaissance, O3) Classification Threshold 0.0000 0.2000 0.4000 0.6000 0.8000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Renaissance, O3) (c) Compile Time (Renaissance, O3) Fig. 16: Overview of normalized call counts for time, binary size, and compile time (Renaissance, O3). 18 TABLE XI: Regression models for prediction of normalized call counts. RS1, RS2, and RS3 refer to used configurations. Time (Renaissance, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 2.0979 2.1242 2.1308 2.1211 2.1269 2.1347 2.1248 2.1384 2.1302 2.1451 2.1220 2.1501 Model RS2 2.0726 2.1078 2.1231 2.1230 2.1194 2.1374 2.1115 2.1174 2.1335 2.1612 2.1313 2.1351 Model RS3 2.0804 2.1130 2.1286 2.1346 2.1479 2.1543 2.1510 2.1396 2.1098 2.1392 2.1307 2.1450 Time (Renaissance, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 2.1657 2.2254 2.3086 2.3014 2.3042 2.3254 2.3044 2.3105 2.3052 2.3065 2.3133 2.3189 Model RS2 2.2744 2.2994 2.3356 2.3088 2.3152 2.2973 2.3146 2.3191 2.3097 2.3127 2.2745 2.3103 Model RS3 2.2574 2.3132 2.3171 2.3329 2.2939 2.3189 2.3120 2.3167 2.3102 2.3109 2.3115 2.3222 Binary Size (Renaissance, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.6776 0.6750 0.6743 0.6742 0.6741 0.6741 0.6742 0.6740 0.6740 0.6740 0.6740 0.6742 Model RS2 0.6756 0.6744 0.6742 0.6742 0.6741 0.6741 0.6741 0.6741 0.6740 0.6740 0.6740 0.6741 Model RS3 0.6755 0.6744 0.6743 0.6742 0.6741 0.6741 0.6741 0.6741 0.6740 0.6740 0.6740 0.6740 Binary Size (Renaissance, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.4907 0.4867 0.4855 0.4852 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 Model RS2 0.4868 0.4854 0.4850 0.4850 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 0.4768 0.4848 Model RS3 0.4868 0.4853 0.4850 0.4850 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 0.4848 Compile Time (Renaissance, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.8559 0.8449 0.8421 0.8408 0.8380 0.8393 0.8375 0.8324 0.8374 0.8391 0.8396 0.8370 Model RS2 0.8722 0.8707 0.8723 0.8723 0.8698 0.8705 0.8656 0.8717 0.8694 0.8731 0.8719 0.8663 Model RS3 0.8608 0.8562 0.8589 0.8628 0.8639 0.8545 0.8623 0.8576 0.8541 0.8569 0.8573 0.8552 Compile Time (Renaissance, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.6854 0.6786 0.6762 0.6780 0.6726 0.6776 0.6757 0.6717 0.6718 0.6701 0.6696 0.6661 Model RS2 0.7051 0.7069 0.7028 0.7004 0.6960 0.6995 0.6982 0.6966 0.7028 0.6978 0.6965 0.6981 Model RS3 0.6944 0.6905 0.6871 0.6919 0.6871 0.6938 0.6866 0.6875 0.6870 0.6862 0.6862 0.6837 Throughput (Barista, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.7345 0.7226 0.7251 0.7072 0.7260 0.7283 0.7141 0.7261 0.7211 0.7060 0.7252 0.7153 Model RS2 0.7306 0.7266 0.7201 0.7229 0.7178 0.7256 0.7287 0.7248 0.7265 0.7221 0.7122 0.7190 Model RS3 0.7434 0.7242 0.7239 0.7279 0.7286 0.7279 0.7230 0.7140 0.7255 0.7150 0.7223 0.7200 Throughput (Barista, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.6912 0.6772 0.6812 0.6782 0.6754 0.6751 0.6680 0.6795 0.6785 0.6794 0.6717 0.6776 Model RS2 0.6867 0.6764 0.6816 0.6721 0.6779 0.6806 0.6686 0.6798 0.6754 0.6795 0.6802 0.6737 Model RS3 0.6895 0.6780 0.6824 0.6758 0.6744 0.6753 0.6710 0.6756 0.6657 0.6732 0.6840 0.6679 Binary Size (Barista, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.6486 0.6457 0.6451 0.6350 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 Model RS2 0.6456 0.6450 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 Model RS3 0.6455 0.6450 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 0.6449 Binary Size (Barista, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.4295 0.4238 0.4229 0.4228 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 Model RS2 0.4237 0.4230 0.4228 0.4228 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 Model RS3 0.4236 0.4230 0.4228 0.4228 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 0.4227 Compile Time (Barista, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.8757 0.8639 0.8728 0.8952 0.8563 0.8593 0.8755 0.8734 0.8731 0.8687 0.8727 0.8749 Model RS2 0.9015 0.9024 0.9066 0.8937 0.9128 0.8957 0.8979 0.8995 0.9061 0.8982 0.8956 0.8996 Model RS3 0.8803 0.8769 0.8854 0.8823 0.8839 0.8815 0.8883 0.8788 0.8880 0.8714 0.8816 0.8808 Compile Time (Barista, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.6359 0.6271 0.6315 0.6266 0.6247 0.6274 0.6365 0.6252 0.6210 0.6345 0.6267 0.6258 Model RS2 0.6483 0.6422 0.6456 0.6496 0.6528 0.6488 0.6492 0.6484 0.6551 0.6414 0.6540 0.6527 Model RS3 0.6372 0.6398 0.6337 0.6373 0.6416 0.6372 0.6371 0.6313 0.6400 0.6353 0.6359 0.6367 19 Classification Threshold 0.0000 0.2000 0.4000 0.6000 0.8000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Throughput (Barista, O2) (a) Throughput (Barista, O2) Classification Threshold 0.0000 0.2000 0.4000 0.6000 0.8000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Barista, O2) (b) Binary Size (Barista, O2) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Barista, O2) (c) Compile Time (Barista, O2) Fig. 17: Overview of normalized call counts for time, binary size, and compile time (Barista, O2). 20 Classification Threshold 0.0000 0.2000 0.4000 0.6000 0.8000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Throughput (Barista, O3) (a) Throughput (Barista, O3) Classification Threshold 0.0000 0.1000 0.2000 0.3000 0.4000 0.5000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Barista, O3) (b) Binary Size (Barista, O3) Classification Threshold 0.0000 0.2000 0.4000 0.6000 0.8000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Barista, O3) (c) Compile Time (Barista, O3) Fig. 18: Overview of normalized call counts for time, binary size, and compile time (Barista, O3). 21 IX. REGRESSION MODELS FOR PREDICTING NORMALIZED CALL COUNTS (TUNED LABELS) In this section, we present detailed results on varying the classification threshold applied to the regression XGBoost model for normalized call-frequency prediction. In these experiments, we tuned the dataset labels by overriding the labels of the hot methods to 1. Classification Threshold 0.0000 0.5000 1.0000 1.5000 2.0000 2.5000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Time (Renaissance, O2) (a) Time (Renaissance, O2) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Renaissance, O2) (b) Binary Size (Renaissance, O2) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 1.2500 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Renaissance, O2) (c) Compile Time (Renaissance, O2) Fig. 19: Overview of normalized call counts for time, binary size, and compile time (Renaissance, O2). 22 TABLE XII: Regression models for prediction of normalized call counts. On top of the normalized call counts, we label HOT methods as 1. RS1, RS2, and RS3 refer to used configurations. Time (Renaissance, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 1.0237 1.0263 1.0226 1.0293 1.0474 1.0474 1.0968 1.1236 1.2262 1.2846 1.7375 2.0697 Model RS2 1.2382 1.3028 1.3491 1.3612 1.3948 1.4558 1.4945 1.5258 1.6051 1.7728 1.8096 1.9478 Model RS3 1.2178 1.2726 1.2877 1.3134 1.3482 1.3763 1.4783 1.4861 1.5566 1.6195 1.8158 1.9481 Time (Renaissance, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 1.0212 1.0274 1.0233 1.0322 1.0559 1.0820 1.1330 1.1466 1.1953 1.2558 1.7255 2.1755 Model RS2 1.1652 1.2495 1.2727 1.2750 1.3217 1.3927 1.4945 1.5293 1.6192 1.9409 1.9730 2.0736 Model RS3 1.1952 1.2495 1.2682 1.2309 1.3126 1.4619 1.5884 1.6148 1.6934 1.7721 1.9632 2.0889 Binary Size (Renaissance, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9578 0.9470 0.9390 0.9314 0.9161 0.8987 0.8789 0.8526 0.8281 0.7930 0.7220 0.6795 Model RS2 0.8277 0.8129 0.8020 0.7935 0.7788 0.7672 0.7481 0.7333 0.7242 0.7120 0.6855 0.6797 Model RS3 0.8402 0.8251 0.8144 0.8032 0.7885 0.7723 0.7564 0.7397 0.7287 0.7171 0.6851 0.6793 Binary Size (Renaissance, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9271 0.9098 0.8938 0.8713 0.8348 0.8016 0.7625 0.7204 0.6804 0.6166 0.5279 0.4932 Model RS2 0.6903 0.6608 0.6463 0.6211 0.5964 0.5825 0.5622 0.5407 0.5298 0.5167 0.5000 0.4926 Model RS3 0.7118 0.6860 0.6660 0.6506 0.6146 0.5913 0.5744 0.5542 0.5356 0.5193 0.4994 0.4917 Compile Time (Renaissance, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 1.0421 1.0416 1.0342 1.0199 1.0194 1.0186 0.9800 0.9615 0.9382 0.9104 0.8696 0.8502 Model RS2 0.9923 0.9906 0.9666 0.9569 0.9422 0.9358 0.9337 0.9281 0.9259 0.9122 0.9000 0.8957 Model RS3 0.9734 0.9623 0.9578 0.9582 0.9408 0.9260 0.9254 0.9177 0.9106 0.8956 0.8818 0.8713 Compile Time (Renaissance, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9935 0.9920 0.9783 0.9641 0.9500 0.9176 0.8885 0.8618 0.8253 0.7827 0.7274 0.6894 Model RS2 0.8785 0.8484 0.8377 0.8246 0.8039 0.7870 0.7880 0.7759 0.7600 0.7502 0.7370 0.7215 Model RS3 0.8743 0.8591 0.8470 0.8370 0.8070 0.7974 0.7772 0.7683 0.7548 0.7486 0.7214 0.7086 Throughput (Barista, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9814 0.9825 0.9774 0.9750 0.9674 0.9545 0.9270 0.9153 0.8733 0.8350 0.7651 0.7400 Model RS2 0.9138 0.8943 0.8755 0.8770 0.8555 0.8631 0.8634 0.8315 0.7968 0.7871 0.7850 0.7623 Model RS3 0.9113 0.8816 0.8853 0.8824 0.8746 0.8758 0.8641 0.8493 0.7900 0.8007 0.7825 0.7801 Throughput (Barista, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9635 0.9537 0.9652 0.9603 0.9302 0.9371 0.9173 0.8804 0.8511 0.7956 0.7322 0.7050 Model RS2 0.8674 0.8753 0.8686 0.8580 0.8221 0.8147 0.8008 0.8019 0.7450 0.7546 0.7380 0.7251 Model RS3 0.8776 0.8737 0.8638 0.8464 0.8476 0.8254 0.8125 0.7964 0.7398 0.7609 0.7335 0.7254 Binary Size (Barista, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9385 0.9261 0.9164 0.9041 0.8811 0.8452 0.8157 0.7903 0.7546 0.7128 0.6623 0.6495 Model RS2 0.7799 0.7551 0.7403 0.7234 0.7040 0.6895 0.6775 0.6708 0.6644 0.6583 0.6536 0.6499 Model RS3 0.7892 0.7672 0.7480 0.7362 0.7115 0.6951 0.6819 0.6740 0.6666 0.6590 0.6530 0.6494 Binary Size (Barista, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 0.9038 0.8832 0.8606 0.8344 0.7885 0.7395 0.6852 0.6363 0.5784 0.5160 0.4502 0.4320 Model RS2 0.6424 0.5979 0.5692 0.5461 0.5132 0.4904 0.4744 0.4634 0.4544 0.4460 0.4379 0.4330 Model RS3 0.6604 0.6138 0.5831 0.5595 0.5223 0.4984 0.4804 0.4680 0.4592 0.4472 0.4367 0.4326 Compile Time (Barista, O2) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 1.0619 1.0689 1.0648 1.0453 1.0388 1.0146 0.9992 0.9833 0.9539 0.9316 0.8902 0.8733 Model RS2 1.0109 0.9929 0.9890 0.9794 0.9556 0.9418 0.9446 0.9275 0.9247 0.9266 0.9233 0.9090 Model RS3 1.0151 0.9828 0.9750 0.9715 0.9597 0.9359 0.9255 0.9170 0.9212 0.9080 0.9013 0.8945 Compile Time (Barista, O3) Classification Threshold 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 Model RS1 1.0046 0.9917 0.9659 0.9511 0.9267 0.8865 0.8427 0.7875 0.7461 0.7051 0.6486 0.6395 Model RS2 0.8471 0.8047 0.7753 0.7623 0.7400 0.7117 0.7044 0.6921 0.6810 0.6774 0.6705 0.6648 Model RS3 0.8330 0.8064 0.7707 0.7611 0.7282 0.7096 0.6871 0.6908 0.6803 0.6745 0.6586 0.6515 23 Classification Threshold 0.0000 0.5000 1.0000 1.5000 2.0000 2.5000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Time (Renaissance, O3) (a) Time (Renaissance, O3) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Renaissance, O3) (b) Binary Size (Renaissance, O3) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Renaissance, O3) (c) Compile Time (Renaissance, O3) Fig. 20: Overview of normalized call counts for time, binary size, and compile time (Renaissance, O3). 24 Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Throughput (Barista, O2) (a) Throughput (Barista, O2) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Binary Size (Barista, O2) (b) Binary Size (Barista, O2) Classification Threshold 0.0000 0.2500 0.5000 0.7500 1.0000 1.2500 0.05 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 S1 S2 S3 Compile Time (Barista, O2) (c) Compile Time (Barista, O2) Fig. 21: Overview of normalized call counts for time, binary size, and compile time (Barista, O2). 25