Application-guided dynamic binary optimization already turned out to be a powerful approach to increase the single-thread performance of High Performance Computing (HPC) applications. Selected binary code can be optimized and specialized at runtime to incorporate information known at runtime. Previous work performed binary code optimizations using partial evaluation as well as reusing the LLVM compiler infrastructure. While using LLVM improved the performance of the rewritten binary code, rewriting times increased, too. However, as the rewriting is performed at runtime, the rewriting time has a significant impact on the overall performance of the application. Binary code modifications at runtime require a more powerful, yet efficient, Intermediate Representations (IRs) than pure machine code.
To create an optimized machine-level IRs for efficient optimization of binary code at runtime, existing IRs in binary rewriters are analyzed. Different analyses and optimizations are implemented using this optimized IR in a prototype binary rewriting system called Drob. While Drob has an initial focus on x86-64, it was designed to be retargetable. Benchmark results show that Drob outperforms the simple partial evaluation approach when it comes to the runtime of rewritten binary code, however, is not able yet to optimize binary code as much as the LLVM-based approach in most cases. Although rewriting times increased compared to the simple partial evaluation approach, they are still a factor of magnitude faster compared to the LLVM-based approach.
«
Application-guided dynamic binary optimization already turned out to be a powerful approach to increase the single-thread performance of High Performance Computing (HPC) applications. Selected binary code can be optimized and specialized at runtime to incorporate information known at runtime. Previous work performed binary code optimizations using partial evaluation as well as reusing the LLVM compiler infrastructure. While using LLVM improved the performance of the rewritten binary code, rewrit...
»