
Tuesday May 13, 2008
OpenMP 3.0 APIs released
The final specifications for the new version of OpenMP (version 3.0)
have now been published and uploaded to the official OpenMP site (here)
The draft was open to review from October through January; the
completed version is now official.
What is OpenMP?
The OpenMP Application Program Interface (API) supports multi-platform
shared-memory parallel programming in C/C++ and Fortran. OpenMP is a
portable, scalable model with a simple and flexible interface for
developing parallel applications on platforms from the desktop to the
supercomputer. The core elements of OpenMP are the constructs for
thread creation,
work load distribution (work sharing), data environment management,
thread synchronization, user level runtime routines and environment
variables. These are expressed as directives in Fortran and as #pragmas
in C and C++
This is a multivendor, multiple platform vendor-driven industry
standard. Members include Sun, AMD, Intel, Cray, Fujitsu, HP, IBM, NEC,
PGI and SGI as vendors (permanent members) and auxilliary members such
as ASC/LLNL, cOMPunity, EPCC, NASA, RWTH Aachen
University.
You can get more info on OpenMP
at this official site (here). You can also read a more detailed
description at this
Wikipedia site.
The first standard came out in October 1997; an update (v2.0) in 2000
(for Fortran) and 2002(for C, C++) and a combined languages
revision (v2.5) in 2005.
There is also a SPEC standard benchmark, called SPEC OMP, that represents
typical industry application/usage of OpenMP. Sun has dominated SPEC
submissions on the lower end of the scale (less 8,16 nodes).
Whats New in OpenMP3.0?
There are several new features in OMP 3.0. A short enumeration of these:
- the concept of tasks has been added to the execution model
- the memory model now covers the notion of atomicity of memory
accesses.
- the definition of an active parallel region has changed
- changes in internal control variable (ICV)
- new routines added to the OMP runtime library, including:
omp_get_level, omp_get_ancestor_thread_num, omp_get_team_size,
omp_get_active_level
Uses of OpenMP3.0
The OpenMP model (shared memory programming) is often debated vs
the MPI (message passing interface) model (a distributed, cluster
programming model), which is also a
vendor-driven industry standard.
Both are aspects of the parallel programming model, which aim at
extracting parallelism from an existing application. OpenMP is an
incremental model that works at the high-level language level, whereas
MPI is a low-level and difficult to use.
This
section in the Wikipedia has an interesting set of Pros and Cons
contrasted between OMP and MPI. The MPI model grew in popularity in the
past decade because clusters became easier to buy and assemble and the
increasing power of the x86 single-node servers ensured that such
clusters could be built cheaply and still deliver good performance.
However, now with the multi-core revolution upon us, there is fresh
interest in making each of these "nodes" parallelizable as well and so
there is fresh interest in OpenMP.
Of course, time will tell, which paradigm, or any derivative of these
will ultimately see large-scale adoption. In the meantime vendors are
busy working to ensure that they have good, high performing OpenMP
implementations that can be used to exploit the increasing number of
cores in a single node.
Sun, of course, has been in this game from Day 1. We've had compilers
that have supported every OMP standard, immediately after it came out
(and no later than any other vendor).
The same will be true with OMP3.0; we are working on getting an
implementation of this out very soon now.
Posted by tatkar
( May 13 2008, 09:58:20 AM PDT )
Permalink
Trackback URL: http://blogs.sun.com/tatkar/entry/openmp_3_0_apis_released