XMP applications are intended for execution on distributed memory systems. These are platforms consisting of computers with a single or multiple cores sharing memory interconnected through a network. Each node has a private memory space that can be directly accessed and updated by other nodes. To access/update the memory space of other nodes, one must use XMP directives or coarray syntax.
The XMP basic execution model is a Single Program Multiple Data (SPMD). Execution of the same program is simultaneously started on each node by the main program (the same as for MPI). The program on each node communicates and synchronizes using XMP directives or coarray syntax.
XMP provides global-view model and local-view model. In the global-view model, XMP enables parallelization of an original sequential code using minimal modification with simple directives such as OpenMP. In the local-view model, programmers can access and update the memory on other nodes by using a node number easily.
Global-view model programming
The global-view model supports typical parallelization and enables parallelization of existing code with a minimum of modification, using directives like HPF and OpenMP.
At first, programmer writes XMP directives to distribute the data that are to be shared among nodes. Next, the nodes to which the data are allocated are instructed to divide and execute the data. At this point, data communication is necessary, to ensure that the data required for the computation at each node are at that node, so the program uses the required directives accordingly. The global-view model is suitable for a programming style that aims to start with the image of a sequential program and, by decentralizing data to the nodes, parallelize the corresponding computation.
Local-view model programming
The local-view model is a function that performs communication for each node’s local data. The local-view model is suited to a programming style where the behavior of each node is described.
For the local-view model, the coarray function has been added as an extension to the base language. For example, to reference array element A(i) on node n, the XMP expression would be A(i)[n] in XMP/Fortran, and A[i]:[n] in XMP/C. In particular, XMP/Fortran is designed to be compatible with Coarray Fortran.