The main issue of the Global Array [35] (GA) programming model
is to support a portable interface that allows each process
independent, asynchronous, and efficient access to blocks of
physically distributed arrays without explicit cooperation with other
processes. In this respect, it has some characteristics of
shared-memory programming. However, GA encourages data locality
since it takes more work by the programmer to access
remote data than local data. Thus, GA has some characteristic of
message-passing as well.
The GA Toolkit supports some primitive operations that are invoked
collectively by all processes: create an array controlling
alignment and distribution, destroy an array, and synchronize all
processes.
In addition, the GA Toolkit provides other primitive operations that
are invoked in MIMD style: fetch, store, atomic accumulate into
rectangular patches of a two-dimensional array; gather and scatter;
atomic read and increment array element; inquire the location
and distribution of data; directly access local elements of array
to provide and improve performance of application-specific data
parallel operations.