6.3. Supported Programming Models

The Cray X1 system supports the following parallel programming models:

6.3.1. Message Passing Interface (MPI)

MPI on Cray X1 systems conforms to current standards. MPI applications can span all available nodes within the system. Two versions of the MPI library are provided, for 32-bit and 64-bit applications.

The MPI libraries are provided as part of the Cray Message Passing Toolkit (MPT). For more information see the intro_mpi(1) man page.

6.3.2. Shared Memory (SHMEM)

The SHMEM libraries are provided as part of the Cray Message Passing Toolkit (MPT). The behavior of SHMEM on Cray X1 systems is very similar to that found on Cray T3E systems, with the exception of new atomic operation functions. SHMEM applications can span all available application nodes within the system. For more information see the intro_shmem(3) man page.

6.3.3. Co-array Fortran (CAF)

CAF codes on Cray X1 systems are identical to those used on Cray T3E systems. Applications calling shared-memory CAF routines can span all available application nodes within the system. For more information, see the Fortran Language Reference Manual, Volume 3.

6.3.4. Unified Parallel C (UPC)

UPC on Cray X1 systems conforms to current standards, with the exception of the issues described in the Cray C and C++ Reference Manual. UPC applications can span all available application nodes within the system.

6.3.5. Pthreads

The POSIX threading library for Cray X1 systems is based on the POSIX standard, with the exception of the issues described in Cray X1 User Environment Differences. Applications using pthreads function calls may span the MSPs within a node but may not cross node boundaries unless nested within a distributed memory job that uses an interface such as MPI or SHMEM.

6.3.6. OpenMP

(Deferred implementation) OpenMP on Cray X1 systems conforms to current standards and replaces the Autotasking, microtasking, and macrotasking features found on Cray T3E systems. Applications using OpenMP may span the MSPs within a node but may not cross node boundaries unless nested within a distributed memory model such as MPI.