Automatic Instrumentation for Resource Adjustment (AIRA)

In recent years, diminishing returns in single-core processor performance due to the end of the “free lunch” has pushed hardware design towards increasing levels of parallelism and heterogeneity. Whether it be out-of-order latency-oriented multicore CPUs or massively parallel throughput-oriented GPGPUs, modern hardware is becoming increasingly diverse in order to continue performance scaling for a wide range of applications. It is clear that platforms will become increasingly heterogeneous, meaning that developers must embrace this new hardware diversity to achieve higher performance.

Programming frameworks such as OpenMP and OpenCL have emerged as industry standards for programming parallel and heterogeneous platforms. These frameworks are functionally portable in that they allow developers to parallelize applications to target different types of processors. In particular, they specify a write-once, run-anywhere interface that allows developers to write a single compute kernel (a computationally-intense portion of an application) that is runnable on many different architectures. However, the developer is responsible for orchestrating application execution on processors in the platform, a cumbersome and error-prone process. The developer must select an architecture by extensively profiling the compute kernel on all available processors (assuming exclusive access to the system), manually direct data transfers between disjoint memory spaces and initiate compute kernel execution on the pre-selected processors. More importantly, these programming frameworks provide no mechanisms for flexible execution of compute kernels in platforms with dynamic and variable workloads because they require developers to hard-code processor selections at compile-time. Static decisions limit compute kernel execution efficiency and platform utilization in the face of diverse platform workloads. Dynamically selecting a set of processing resources on which to execute computation will become increasingly important as heterogeneous systems become ubiquitous in platforms with varying workloads.

 

AIRA (Application Instrumentation for Resource Adjustment) is a compiler and run-time system for automatically instrumenting and analyzing applications for flexible execution in heterogeneous platforms. AIRA is composed of several software components which automate selecting and sharing architectures at runtime, including a compute kernel analysis tool, a source-to-source compiler and a pluggable daemon for dynamic mapping of computation onto processor resources. AIRA targets co-executing OpenMP applications in dynamic workload settings.

 

For more information, read Rob's thesis and our TPDS paper.  Download the sources from the Github.