|
Packit Service |
c5cf8c |
OpenPA v1.0.3
|
|
Packit Service |
c5cf8c |
-------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
The goal of this project is to provide an open source, highly-portable
|
|
Packit Service |
c5cf8c |
library that provides atomic primitives (and related constructs) for
|
|
Packit Service |
c5cf8c |
high performance, concurrent software. This project is a collaboration
|
|
Packit Service |
c5cf8c |
between the Mathematics and Computer Science (MCS) division at Argonne
|
|
Packit Service |
c5cf8c |
National Laboratory (ANL) and the HDF Group. The code was originally
|
|
Packit Service |
c5cf8c |
derived from work on the MPICH project.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Project documentation and bug tracking can be found at:
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
https://trac.mcs.anl.gov/projects/openpa/
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
If you would like to email questions or discuss topics related to OpenPA
|
|
Packit Service |
c5cf8c |
you can send mail to opa-discuss@lists.mcs.anl.gov.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Building
|
|
Packit Service |
c5cf8c |
--------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
If you checked out the project from source control then you will need to
|
|
Packit Service |
c5cf8c |
generate configure files and makefiles with autogen.sh:
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
% ./autogen.sh
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Otherwise, the build procedure is basically the same as any other
|
|
Packit Service |
c5cf8c |
autoconfiscated software:
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
% ./configure [configure_args]
|
|
Packit Service |
c5cf8c |
% make
|
|
Packit Service |
c5cf8c |
% make install
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
OpenPA does support Microsoft Windows but the build system
|
|
Packit Service |
c5cf8c |
infrastructure is unfortunately not yet in place for general use.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Supported Platforms
|
|
Packit Service |
c5cf8c |
-------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
The following header files in the src/primitives directory support the
|
|
Packit Service |
c5cf8c |
listed platforms:
|
|
Packit Service |
c5cf8c |
opa_gcc_ia64.h - GCC on Intel's IA64 (Itanium) architecture
|
|
Packit Service |
c5cf8c |
opa_gcc_intel_32_64.h - GCC (and some GCC-like compilers) on x86 and
|
|
Packit Service |
c5cf8c |
x86_64 architectures
|
|
Packit Service |
c5cf8c |
opa_gcc_intrinsics.h - GCC on many other platforms. These use compiler
|
|
Packit Service |
c5cf8c |
intrinsics which are not always implemented on
|
|
Packit Service |
c5cf8c |
every platform
|
|
Packit Service |
c5cf8c |
opa_gcc_ppc.h - GCC and IBM's XLC on PowerPC 4xx and 970 systems.
|
|
Packit Service |
c5cf8c |
Specifically, this supports the modified-PPC440
|
|
Packit Service |
c5cf8c |
processor in IBM's Blue Gene/P supercomputers and most
|
|
Packit Service |
c5cf8c |
64-bit PPC machines such as BG/P login nodes and G5
|
|
Packit Service |
c5cf8c |
Macs.
|
|
Packit Service |
c5cf8c |
opa_gcc_sicortex.h - GCC on SiCortex machines. This is a MIPS 5K based
|
|
Packit Service |
c5cf8c |
architecture, so it may work on similar platforms.
|
|
Packit Service |
c5cf8c |
opa_nt_intrinsics.h - Windows support. These use compiler intrinsics
|
|
Packit Service |
c5cf8c |
available in Microsoft's Visual Studio compiler.
|
|
Packit Service |
c5cf8c |
opa_sun_atomic_ops.h - Solaris support. This uses Solaris' built-in
|
|
Packit Service |
c5cf8c |
atomic operations library. Tested on a Niagara
|
|
Packit Service |
c5cf8c |
(T5240) machine with Solaris (s10s_u4wos_12b).
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
We also support two pseudo-platforms:
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
opa_by_lock.h - Used when you specify "--with-atomic-primitives=no" or when
|
|
Packit Service |
c5cf8c |
auto-detecting the primitive implementation and lock-based fall
|
|
Packit Service |
c5cf8c |
back is selected. This uses pthread mutexes to emulate the
|
|
Packit Service |
c5cf8c |
atomic behavior. This option typically has dramatically slower
|
|
Packit Service |
c5cf8c |
performance on most platforms where native primitives are
|
|
Packit Service |
c5cf8c |
available. You should usually only use it for testing or on
|
|
Packit Service |
c5cf8c |
platforms where pthreads are available but no native primitives
|
|
Packit Service |
c5cf8c |
are currently implemented. The library initialization function
|
|
Packit Service |
c5cf8c |
*must* be called when using this primitives implementation.
|
|
Packit Service |
c5cf8c |
opa_unsafe.h - Used when you specify "--with-atomic-primitives=unsafe". This
|
|
Packit Service |
c5cf8c |
can be used to improve performance in code that uses OPA already
|
|
Packit Service |
c5cf8c |
and is conditionally compiled to be single-threaded without
|
|
Packit Service |
c5cf8c |
having to modify said code. It is also potentially useful for
|
|
Packit Service |
c5cf8c |
meta-testing to ensure that any threading tests you might have
|
|
Packit Service |
c5cf8c |
will catch bugs when you have a broken atomics implementation.
|
|
Packit Service |
c5cf8c |
The OPA test suite itself fails spectacularly when compiled this
|
|
Packit Service |
c5cf8c |
way. This header can also be used by defining the preprocessor
|
|
Packit Service |
c5cf8c |
macro OPA_USE_UNSAFE_PRIMITIVES prior to including
|
|
Packit Service |
c5cf8c |
opa_primitives.h.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Known Issues
|
|
Packit Service |
c5cf8c |
------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
* One known issue is that the gcc atomic intrinsics aren't supported by
|
|
Packit Service |
c5cf8c |
compilers prior to GCC 4.1. In particular the default Mac OS X compiler is
|
|
Packit Service |
c5cf8c |
gcc 4.0.1 so these result in a linker error when using this set of
|
|
Packit Service |
c5cf8c |
primitives. The good news is that on OSX/Intel we use native inline
|
|
Packit Service |
c5cf8c |
assembly anyway, so this isn't a big problem.
|
|
Packit Service |
c5cf8c |
* The PGI compilers currently are not supported. There is at least one known
|
|
Packit Service |
c5cf8c |
bug in the PGI compiler's handling of of inline assembly for which we are
|
|
Packit Service |
c5cf8c |
awaiting a fix from PGI. Once a fixed version of the compiler is available
|
|
Packit Service |
c5cf8c |
this issue should be rectified in an upcoming release.
|
|
Packit Service |
c5cf8c |
* As mentioned earlier, Windows is supported but the build system is not
|
|
Packit Service |
c5cf8c |
yet present.
|
|
Packit Service |
c5cf8c |
* We've had reports of trouble with older IA64 machines running GCC 3.2.2.
|
|
Packit Service |
c5cf8c |
Unfortunately we don't have access to a machine with this configuration so we
|
|
Packit Service |
c5cf8c |
have been unable to debug and fix the problem. Patches and detailed bug
|
|
Packit Service |
c5cf8c |
reports on this issue are very welcome.
|
|
Packit Service |
c5cf8c |
|