Charlie Zender - 2003-11-23

Hi All,

This message is to start a thread about shared-memory and NCO.
NCO has had an OpenMP (OMP) implementation for many years now.
It is activated by compiling with OMP=Y.
It is off by default because I sometimes got non-reproducible
answers with it on the SGI IRIX architecture.
For a long time SGI was the only architecture I could test
the OMP implementation so I did not pursue it further.

Now, however, the Intel C++ compiler is mature and freely available.
Anyone who wants may compile/run the OMP NCO operators on Linux.
Since OMP_NUM_THREADS may be set greater than one on uni-processor
machines, it is now relatively easy to develop OMP code.
Any volunteers interested in stress-testing the NCO OMP implementation?

The prototype implementation is in ncra.
When OMP=Y, ncra assigns the running average of each record variable
to a separate thread (just grep for openmp).
netCDF is single threaded, so NCO tries not to do input/output on more
than one variable (thread) at a time.
It would be great if someone could verify the OpenMP coding logic
in ncra is self-consistent.
OpenMP documentation is freely available at http://www.openmp.org
Does OMP in ncra work? If so, where besides ncra can OMP be used?
If not, can you find a reproducible bug?

Stable multi-threading is one of the features I am
promising in the NCO proposal I am writing.
The other new feature, which will sit on top of OMP,
is a message-passing (MPI) implementation for
reducing truly gargantuan datasets.

Thanks,
Charlie