Publication Data
Runtime adaptation: a case for reactive code alignment
Abstract: Static alignment techniques are well studied and have been
incorporated into compilers in order to optimize code locality for the instruction
fetch unit in modern processors. However, current static alignment techniques have
several limitations that cannot be overcome. In the exascale era, it becomes even more
important to break from static techniques and develop adaptive algorithms in order to
maximize the utilization of every processor cycle. In this paper, we explore those
limitations and show that reactive realignment, a method where we dynamically monitor
running applications, react to symptoms of poor alignment, and adapt alignment to the
current execution environment and program input, is more scalable than static
alignment. We present fetches-per-instruction as a runtime indicator of poor alignment.
Additionally, we discuss three main opportunities that static alignment techniques
cannot leverage, but which are increasingly important in large scale computing systems:
microarchitectural differences of cores, dynamic program inputs that exercise different
and sometimes alternating code paths, and dynamic branch behavior, including indirect
branch behavior and phase changes. Finally, we will present several instances where our
trigger for reactive realignment may be incorporated in practice, and discuss the
limitations of dynamic alignment.
