XcalableACC: An Integration of XcalableMP and OpenACC
127
data can exist on host memory and accelerator memory. About the data models of
host memory and accelerator memory, refer to the OpenACC specification[3].
Global data are ones that are distributed onto the executing node set by the
align directive. Each fragment of a global data is allocated in host memory of
a node in the executing node set. OpenACC directives can transfer the fragment
from host memory to accelerator memory.
Local data are all of the ones that are not global. They are replicated in the local
memory of each of the executing nodes.
A node can access directly only local data and sections of global data that
are allocated in its local memory. To access data in remote memory, explicit
communication must be specified in such ways as the global communication
constructs and the coarray assignments.
Particularly in XcalableACC Fortran, for common blocks that include any global
variables, the ways how the storage sequence of them is defined and how the storage
association of them is resolved are implementation-dependent.
2 XcalableACC Language
XACC is roughly defined as a diagonal integration of XMP and OpenACC with
some additional XACC extensions, where XMP directives are for specifying
distributed-memory parallelism, OpenACC for offloading, and the extensions for
other XACC-specific features.
The syntax and semantics of XMP and OpenACC directives appearing in XACC
codes follow those in XMP and OpenACC, respectively, unless specified below.
2.1 Data Mapping
Global arrays distributed with XMP directives can be globally-indexed in OpenACC constructs. Global arrays may appear in the update, enter data, exit
data, host_data, cache, and declare directives; and the data clauses such
as deviceptr, present, copy, copyin, copyout, create, and delete.
When data transfer of a global array between host and accelerator memory is
specified by an OpenACC directive, it is performed locally for the local section
of the array within each node.
Example
In lines 2–6 of Fig. 4, the directives declare global arrays a and b. In line 8, the
enter data directive transfers a section of a from host memory to accelerator
127
data can exist on host memory and accelerator memory. About the data models of
host memory and accelerator memory, refer to the OpenACC specification[3].
Global data are ones that are distributed onto the executing node set by the
align directive. Each fragment of a global data is allocated in host memory of
a node in the executing node set. OpenACC directives can transfer the fragment
from host memory to accelerator memory.
Local data are all of the ones that are not global. They are replicated in the local
memory of each of the executing nodes.
A node can access directly only local data and sections of global data that
are allocated in its local memory. To access data in remote memory, explicit
communication must be specified in such ways as the global communication
constructs and the coarray assignments.
Particularly in XcalableACC Fortran, for common blocks that include any global
variables, the ways how the storage sequence of them is defined and how the storage
association of them is resolved are implementation-dependent.
2 XcalableACC Language
XACC is roughly defined as a diagonal integration of XMP and OpenACC with
some additional XACC extensions, where XMP directives are for specifying
distributed-memory parallelism, OpenACC for offloading, and the extensions for
other XACC-specific features.
The syntax and semantics of XMP and OpenACC directives appearing in XACC
codes follow those in XMP and OpenACC, respectively, unless specified below.
2.1 Data Mapping
Global arrays distributed with XMP directives can be globally-indexed in OpenACC constructs. Global arrays may appear in the update, enter data, exit
data, host_data, cache, and declare directives; and the data clauses such
as deviceptr, present, copy, copyin, copyout, create, and delete.
When data transfer of a global array between host and accelerator memory is
specified by an OpenACC directive, it is performed locally for the local section
of the array within each node.
Example
In lines 2–6 of Fig. 4, the directives declare global arrays a and b. In line 8, the
enter data directive transfers a section of a from host memory to accelerator
