 introduces the concept of "orphan" directives, which allow more complex code and the use of parallelized libraries within an application. OpenMP also includes directives that allow you to divide work up among threads.
What about non-shared memory machines like the CRAY T3E or networks of workstations?
As much as it would be nice to think that a single programming model (OpenMP or MPI or HPF or whatever) might run well on all architectures, this is not the case today.
OpenMP was designed to exploit certain characteristics of shared-memory architectures. The ability to directly access memory throughout the system (with minimum latency and no explicit address mapping) combined with very fast shared memory locks, makes shared-memory architectures best suited for supporting OpenMP.
Systems that don't fit the classic shared-memory architecture may provide hardware or software layers that present the appearance of a shared-memory system, but often at the cost of higher latencies or special limitations. For example, OpenMP could be implemented for a distributed memory system on top of MPI, so OpenMP's latencies would be greater than that of MPI (whereas typically the reverse is the case on a shared-memory system).
The extent to which these latencies or limitations reduce application portability or performance will help dictate whether vendors choose to develop OpenMP implementations for distributed memory systems. SGI currently has no plans to implement OpenMP for the CRAY T3E or for running applications across systems in a cluster.
Why will OpenMP succeed when PCF and X3H5 failed?
There are a variety of reasons OpenMP will succeed at being accepted as a standard, where earlier efforts failed.
What about support from debugging and performance tools?
On SGI systems, OpenMP is supported by the standard development tools:
Other system vendors and third-party developers offer tools that support OpenMP; the OpenMP web site includes information on these.
Can I intermix <programming model> with OpenMP?
The ability to intermix OpenMP with other parallel programming models is not dictated by the OpenMP specification, but instead will be defined by the specific implementations. We expect that most implementations will permit mixing of certain models with OpenMP, and this will be driven by a combination of technical feasibility and customer needs.
SGI currently supports the following combinations:
The company plans to support mixing of OpenMP and pthreads in the future. Of course, when using a threaded model like OpenMP with other libraries or threads packages, the user is ultimately responsible for ensuring thread safety.
With so many models available, the number of potential combinations is daunting. In practice, few applications really need to intermix different models. Since OpenMP supports the full range of fine- through coarse-grain parallelism, in many cases developers will find it meets all their needs.
What kind of application code would you recommend use OpenMP?
Any parallel application being developed to run on modern multiprocessor systems, where good performance is important.
Many applications today that run on SMP systems use vendor-specific directives, and without a standard, have multiple sequences of similar directives scattered throughout the application (one for SGI, one for Cray, one for HP, etc.) OpenMP finally offers the opportunity to replace these sets of vendor-specific directives by a single, portable directive.
How will OpenMP be managed as a standard, over the long-term? Who owns it?
Planning is underway to establish an OpenMP Architecture Review Board (ARB) to manage the OpenMP specifications and deal with issues about validation and conformance of OpenMP implementations. SGI will be a key member of this organization.
The OpenMP web site explains how organizations may join the OpenMP ARB.
What does it cost me/who do I get it from/when do I get OpenMP?
For SGI IRIX and UNICOS systems, OpenMP is supported through standard compiler and programming environment releases; there is no special licensing required to us