e (manually) inlined. This simplified definition and implementation of the directives, and was sufficient for the moderate, loop-level parallelism that dominated the use of these models. But this approach made the source code more difficult to maintain, especially for highly scalable applications.
Orphaning allows parallel directives to be specified outside the lexical extent. So now a subroutine can be written for use from a number of parallel regions, and parallel directives needed by that subroutine embedded within its source, instead of having to be replicated everywhere that calls it. This is a much more natural place to provide this input to the compiler, and avoids programming errors that result when the earlier style is used for complex applications. Orphaning is crucial to implementing coarse grain parallel algorithms, and to the development of portable, parallel libraries.
What languages does OpenMP work with?
OpenMP specifications are now available for the Fortran, C, and C++ languages. The OpenMP specification does not include any constructs that require specific Fortran 90 or C++ features.
Which vendors are supporting OpenMP?
SGI led the effort to define the OpenMP API, along with various other vendors. For a current list of vendors, see the OpenMP web site.
What role did SGI play in the development of OpenMP?
SGI initiated and led the initial development of OpenMP. The effort began as an internal project in early 1997 when SGI and Cray engineers started looking for ways to converge the two companies' parallel directives, and then decided to include other companies in order to make the new interfaces an industry-wide standard. SGI has continued to maintain its leadership as the OpenMP effort has moved forward, and will remain heavily involved in the future.
What kind of performance can I expect?
OpenMP is an explicit programming model, in that you have full control over what gets parallelized and how data is referenced. So your performance will be determined by your algorithm, code structure, and the underlying system performance, and not by decisions made by the compiler.
For SGI IRIX and UNICOS systems, OpenMPdelivers performance comparable to that delivered by the MIPSpro and Autotasking directives currently available on those systems. Because of the similarities between OpenMP and the directives currently available on these systems, existing back-end compiler and library technologies were used to implement OpenMP, and this technology is what determines the ultimate performance of the model.
What about NUMA (Non-Uniform Memory Access) issues?
The current definition of OpenMP does not include any directives or features specifically tied to NUMA architectures. It is expected that for systems where this is important, vendors (including SGI) will supply extensions to OpenMP.
SGI Origin systems have a NUMA architecture, specifically referred to as S2MP. The current MIPSpro Power parallel compiler directives includes several directives that support data distribution on Origin systems. The implementation of OpenMP in MIPSpro compilers allows full interoperability with these data distribution directives. This capability allows an application developer to exploit the portability of OpenMP for expressing parallelism, while using these data distribution directives for NUMA-specific optimizations on the Origin.
Is OpenMP scalable?
OpenMP can deliver scalability for applications using shared-memory parallel programming. Significant effort was spent to ensure that OpenMP can be used for scalable applications.
In the past, many programmers using shared-memory directives were limited to loop-level parallelism, a form of fine grain parallelism. And OpenMP also provides good support for loop-level parallelism. But much of the parallelism inherent in an application may not be expressible simply as iterations of loops, and so loop-level parallelism is inherently non-scalable for most real applications.
OpenMP goes beyond earlier shared-memory directives in that it also supports more scalable, coarse grain parallelism. OpenMP