Breaking SIMD shackles with an exposed flexible microarchitecture and the access execute PDG
Breaking SIMD shackles with an exposed flexible microarchitecture and the access execute PDG
复制标题
通过暴露的灵活微架构和执行 PDG 的访问来打破 SIMD 束缚
DOI:
10.1109/pact.2013.6618830
复制
发表时间:
2013
期刊:
影响因子:
--
通讯作者:
Karthikeyan Sankaralingam
中科院分区:
文献类型:
--
作者:
Venkatraman Govindaraju;Tony Nowatzki;Karthikeyan Sankaralingam
Modern microprocessors exploit data level parallelism through in-core data-parallel accelerators in the form of short vector ISA extentions such as SSE/AVX and NEON. Although these ISA extentions have existed for decades, compilers do not generate good quality, high-performance vectorized code without significant programmer intervention and manual optimization. The fundamental problem is that the architecture is too rigid, which overly complicates the compiler's role and simultaneously restricts the types of codes that the compiler can profitably map to these data-parallel accelerators. We take a fundamentally new approach that first makes the architecture more flexible and exposes this flexibility to the compiler. Counter-intuitively, increasing the complexity of the accelerator's interface to the compiler enables a more robust and efficient system that supports many types of codes. This system also enables the performance of auto-acceleration to be comparable to that of manually-optimized implementations. To address the challenges of compiling for flexible accelerators, we propose a variant of Program Dependence Graph called the Access Execute Program Dependence Graph to capture spatio-temporal aspects of memory accesses and computations. We implement a compiler that uses this representation and evaluate it by considering both a suite of kernels developed and tuned for SSE, and “challenge” data-parallel applications, the Parboil benchmarks. We show that our compiler, which targets the DySER accelerator, provides high-quality code for the kernels and full applications, commonly reaching within 30% of manually-optimized and out-performs compiler-produced SSE code by 1.8×.