A pplication developers have long recognized that scalable hardware and software are necessary for parallel scalability in application performance. Both have existed for some time in their lowest common denominator form, and scalable hardware-as physically distributed memories connected through a scalable interconnection network (as a multistage interconnect, k-ary n-cube, or fat tree)-has been commercially available since the 1980s. When developers build such systems without any provision for cache coherence, the systems are essentially "zeroth order" scalable architectures. They provide only a scalable interconnection network, and the burden of scalability falls on the software. As a result, scalable software for such systems exists, at some level, only in a message-passing model. Message passing is the native model for these architectures, and developers can only build higher-level models on top of it. Unfortunately, many in the high-performance computing world implicitly assume that the only way to achieve scalability in parallel software is with a messagepassing programming model. This is not necessarily true. A class of multiprocessor architectures is now emerging that offers scalable hardware support for cache coherence. These are generally called scalable shared memory multiprocessor architectures. 1 For SSMP systems, the native programming model is shared memory, and message passing is built on top of the shared-memory model. On such systems, software scalability is straightforward to achieve with a shared-memory programming model. In a shared-memory system, every processor has direct access to the memory of every other processor, meaning it can directly load or store any shared address. The programmer also can declare certain pieces of memory as private to the processor, which provides a simple yet powerful model for expressing and managing parallelism in an application. Despite its simplicity and scalability, many parallel applications developers have resisted adopting a sharedmemory programming model for one reason: portability. Shared-memory system vendors have created their own proprietary extensions to Fortran or C for parallel-software development. However, the absence of portability has forced many developers to adopt a portable message-passing model such as the Message Passing Interface (MPI) or Parallel Virtual Machine (PVM). This article presents a portable alternative to message passing: OpenMP.
OpenMP REF ] is a widely used model for parallelizing sequential programs on shared-memory systems.
OpenMP : An Industry-Standard API for Shared-Memory Programming
IEEE Computational Science and Engineering
IEEE Computational Science and Engineering
Computer Science