often reflected in the programming model. As a result, in order to realize and sustain the
potential performance of such systems, it is necessary in practice to deal with architectural
details and explicitly manage the resources to an increasing extent. In particular,
programmers are required to develop code that exposes a high degree of parallelism,
exhibits high locality, dynamically adapts to the available resources, and hides …