Blame src/openpa/README

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