Abstract:
A low-cap power budget is challenging for exascale computing. Dynamic Voltage and Frequency Scaling (DVFS) and Uncore Frequency Scaling (UFS) are the two widely used techniques for limiting HPC application's energy footprint. However, existing approaches fail to provide a unified solution that can work with different types of parallel programming models and applications. This paper proposes Cuttlefish, a programming model oblivious C/C++ library for achieving energy efficiency in multicore parallel programs running over Intel processors. We propose two variations for the Cuttlefish library, Cuttlefish-offline and Cuttlefish-online. Cuttlefish-offline dynamically changes optimal core and uncore frequency using offline learning based on prior information about running application's memory access pattern. On the other hand, Cuttlefish online uses an online pro_ler that periodically pro_les model-specific registers to discover a running application's memory access pattern. Using a combination of DVFS and UFS, Cuttlefish online then dynamically adapts the processor's core and uncore frequencies, thereby improving its energy efficiency. The evaluation on a 20-core Intel Xeon processor using a set of widely used OpenMP benchmarks, consisting of several irregular-tasking and work-sharing pragmas, achieves geometric mean energy savings of 22.3% with a 4.2% slowdown for for Cuttlefish-offline and energy savings of 19.6% with 3.6% slowdown for Cuttlefish-online.