Abstract

Register pressure problem has been a known problem for compiler because of the mismatch between the infinite number of pseudo registers and the finite number of hard registers. Too heavy register pressure may results in register spilling and then leads to performance degradation. There are a lot of optimizations, especially loop optimizations suffer from register spilling in compiler. In order to fight register pressure and therefore improve the effectiveness of compiler, this research takes the register pressure into account to improve loop unrolling optimization during the transformation process. In addition, a register pressure aware transformation is able to reduce the performance overhead of some fine-grained randomization transformations which can be used to defend against ROP attacks. Experiments showed a peak improvement of about 3.6% and an average improvement of about 1% for SPEC CPU 2006 benchmarks and a peak improvement of about 3% and an average improvement of about 1% for the LINPACK benchmark.

Highlights

  • Register pressure is the number of hard registers needed to store values in the pseudo registers at given program point [1] during the compilation process

  • Register pressure problem has been a known problem for compilers because of the mismatch between the infinite number of pseudo registers and finite hard registers

  • A peak improvement of about 3.6% reported across all the benchmarks was found for 437.leslie3d and the average performance was increased by about 1% for the overall SPEC 2006 test-suits

Read more

Summary

Introduction

Register pressure is the number of hard registers needed to store values in the pseudo registers at given program point [1] during the compilation process. Some fine-grained randomizations[4,5], implemented during the compilation process, such as Atomic Instruction substitution, instruction reordering, register reassignment [6], random NOP insertion and so on, are adopted to defend ROP attacks They are very likely to increase register pressure because they use instruction movement and code redundancy technologies a lot. The goal of loop unrolling is to increase a program's speed by reducing or eliminating instructions that control the loop, such as pointer arithmetic and "end of loop" tests on each iteration, reducing branch penalties, as well as hiding latencies including the delay in reading data from memory [7]. This approach is possible to benefit even more optimizations mentioned above

Design of register pressure aware loop unrolling
Find out the number of loop invariable
Find out the number of loop induction variable
Find out the number of loop variable
Find out the number of available registers for loop variable
Calculate unroll factor
Experimental evaluation
Findings
Conclusion
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call