Benedict R. Gaster
In Proceedings of International Workshop on OpenMP (IWOMP’08). 2008.
To date OpenMP has been considered the work horse for data parallelism and more recently task level parallelism. The model has been one of shared memory working in parallel on arrays of a uniform nature, but many applications do not meet these often restrictive access patterns. With the development of accelerators on the one hand
and moving beyond the node to the cluster on the other, OpenMP’s shared memory approach does not easily capture the complex memory hierarchies found in these heterogeneous systems.
Streams provide a natural approach to coupling data with its corresponding access patterns. Data within a stream can be easily and efficiently distributed across complex memory hierarchies, while retaining a shared memory point of view for the application programmer.
In this paper we present a modest extension to OpenMP to support data partitioning and streaming. Rather than add numerous new directives our approach is to utilize exiting streaming technology and extend OpenMP simply to control streams in the context of threading. The integration of streams allows the programmer to easily connect distinct compute components together in an efficient manner, supporting both,
the conventional shared memory model of OpenMP and also the transparent integration of local non-shared memory.