126
A. Tabuchi et al.
Fig. 3 Concept of OpenACC extension
1.3 Execution Model
The execution model of XACC is a combination of those of XMP and OpenACC.
While the execution model of a host CPU programming is based on that of XMP,
that of an accelerator programming is based on that of OpenACC. Unless otherwise
specified, each node behaves exactly as specified in the XMP specification[2] or the
OpenACC specification[3].
An XACC program execution is based on the SPMD model, where each
node starts execution from the same main routine and keeps executing the same
code independently (i.e. asynchronously), which is referred to as the replicated
execution until it encounters an XMP construct or an XMP-extension construct.
In particular, the XMP-extension construct may allocate, deallocate, or transfer data
on accelerators. An OpenACC construct or an OpenACC-extension construct may
define parallel regions, such as work-sharing loops, and offloads it to accelerators
under control of the host.
When a node encounters a loop construct targeted by a combination of XMP
loop and OpenACC loop directives, it executes the loop construct in parallel
with other accelerators, so that each iteration of the loop construct is independently
executed by the accelerator where a specified data element resides.
When a node encounters a XACC synchronization or a XACC communication
directive, synchronization or communication occurs between it and other accelerators. That is, such global constructs are performed collectively by the current
executing nodes. Note that neither synchronizations nor communications occur
without these constructs specified.
1.4 Data Model
There are two classes of data in XACC: global data and local data as with XMP.
Data declared in an XACC program are local by default. Both global data and local
Précédent

- 133/265

Suivant