edule and requirements.
How does OpenMP compare with...
What about nested parallelism?
Nested parallelism is permitted by the OpenMP specification. Supporting nested parallelism effectively can be difficult, and we expect most vendors (including SGI) will start out by executing nested parallel constructs on a single thread. At the same time, vendors will be experimenting with nested parallelism to better understand how to approach this topic. We then expect the OpenMP group to add this functionality to the specifications.
What about task parallelism?
Full support for task parallelism is not included in the OpenMP specification. This may be added in future extensions.
What if I just want loop-level parallelism?
OpenMP fully supports loop-level parallelism. Loop-level parallelism is useful for applications which have lots of coarse loop-level parallelism, especially those that will never be run on large numbers of processors or for which restructuring the source code is either impractical or disallowed. Typically, though, the amount of loop-level parallelism in an application is limited, and this in turn limits the scalability of the application.
OpenMP allows you to use loop-level parallelism as a way to start scaling your application for multiple processors, but then move into coarser grain parallelism, while maintaining the value of your earlier investment. This incremental development strategy avoids the all-or-none risks involved in moving to message-passing or other parallel programming models.
What does orphaning mean?
In early shared-memory models, parallel directives were only permitted within the lexical extent of parallel regions. What this means to non-compiler writers is that the directives had to be defined in such a way that all information needed to parallelize a loop or subroutine had to be specified within the source for that loop or subroutine. If another subroutine was called, parallel information specific to that subroutine had to be specified at the call site, or the called subroutine had to be (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