| 
 ARMCI - Programming InterfacesARMCI programming
interfaces are
explained below. This is an up-to-date document that containing all the
supporting ARMCI APIs. There is also a
document
describing the ARMCI design (API corresponding to release 1.0 only) is available in the 
PDF 
format.
 Header file
 The
interfaces are prototyped in the "armci.h" header file.
 
 1 Initialization and Terminationint ARMCI_Init() PURPOSE:     Initializes the ARMCI. This function must be called before any ARMCI functions.RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 int ARMCI_Finalize()
 PURPOSE:     Finalizes the ARMCI. This function must be called after using ARMCI functions.RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 void ARMCI_Cleanup()
 PURPOSE: Releases any system resources (like System V shmem ids) thatARMCI can be holding. It is intended to be used before terminating a program
 (e.g., by calling MPI_Abort) in case of an error.
 Purpose:
Combines the functionality of ARMCI_Cleanup and MPI_Abort, and
it prints (to the stdout and stderr) a user specified message followed
by an integer code.void ARMCI_Error(char *message, int code)
 ARGUMENTS:   message           - Message to print out
 code              - Error code
 
 
 2 Copy operations using
the generalized I/O vector formatint ARMCI_PutV(armci_giov_t *dsrc_arr, int arr_len, int proc)PURPOSE:
Generalized  I/O vector operation that transfers data
from
the local memory of calling process (source) to the memory of a remote
process (destination). DATA TYPE:typedef struct {
 void **src_ptr_ar;  - Source starting addresses of each data segment.
 void **dst_ptr_ar;  - Destination starting addresses of each data segment.
 int bytes;         - The length of each segment in bytes.
 int ptr_ar_len;    - Number of data segment.
 }armci_giov_t;
 ARGUMENTS:dsrc_arr - Array of data (type of armci_giov_t) to be put to remote process.
 arr_len  - Number of elements in the dsrc_arr.
 proc     - Remote process ID (destination).
 RETURN VALUE:zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Generalized Non-Blocking I/O vector operation that transfers
data
from the local memory of the calling process (source) to the memory of
a
remote
process (destination).int ARMCI_NbPutV(armci_giov_t *dsrc_arr,int arr_len,int proc,armci_hdl_t* handle)
 DATA TYPE:typedef struct {
 void **src_ptr_ar;  - Source starting addresses of each data segment.
 void **dst_ptr_ar;  - Destination starting addresses of each data segment.
 int bytes;         - The length of each segment in bytes.
 int ptr_ar_len;    - Number of data segment.
 }armci_giov_t;
 ARGUMENTS:dsrc_arr - Array of data (type of armci_giov_t) to be put to remote process.
 arr_len  - Number of elements in the dsrc_arr.
 proc     - Remote process ID (destination).
 handle   - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Generalized  I/O vector blocking operation that
transfers
data from the remote process memory (source) to the calling process
local
memory (destination).int ARMCI_GetV(armci_giov_t *dsrc_arr,int arr_len,int proc)
 DATA TYPE:typedef struct {
 void **src_ptr_ar;  - Source starting addresses of each data segment.
 void **dst_ptr_ar;  - Destination starting addresses of each data segment.
 int bytes;         - The length of each segment in bytes.
 int ptr_ar_len;    - Number of data segment.
 }armci_giov_t;
 ARGUMENTS:dsrc_arr - Array of data (type of armci_giov_t) to get from remote process.
 arr_len  - Number of elements in the dsrc_arr.
 proc     - Remote process ID (source).
 RETURN VALUE:zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Generalized Non-blocking I/O vector operation that transfers
data from the remote process memory (source) to the callingprocess
local memory (destination).int ARMCI_NbGetV(armci_giov_t *dsrc_arr,int arr_len,int proc,armci_hdl_t* handle)
 DATA TYPE:_____________________________________________________________________________typedef struct {
 void **src_ptr_ar;  - Source starting addresses of each data segment.
 void **dst_ptr_ar;  - Destination starting addresses of each data segment.
 int bytes;         - The length of each segment in bytes.
 int ptr_ar_len;    - Number of data segment.
 }armci_giov_t;
 ARGUMENTS:
 
 dsrc_arr - Array of data (type of armci_giov_t) to get from remote process.
 arr_len  - Number of elements in the dsrc_arr.
 proc     - Remote process ID (source).
 handle   - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 
 3 Copy operations using the
strided
formatPURPOSE:
Blocking strided  operation that transfers data from the
local memory of calling process (source) to the memory of a remote
process (destination).int ARMCI_PutS(void* src_ptr, int src_stride_ar[], void* dst_ptr, int dst_stride_ar[],
 int count[], int stride_levels, int proc)
 
 
 ARGUMENTS:src_ptr        - Source starting address of the data block to put.
 src_stride_arr - Source array of stride distances in bytes.
 dst_ptr        - Destination starting address to put data.
 dst_stride_ar  - Destination array of stride distances in bytes.
 count          - Block size in each dimension. count[0] should be the
 number of bytes of contiguous data in leading dimension.
 stride_levels  - The level of strides.
 proc           - Remote process ID (destination).
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Non-blocking strided  operation that transfer data
from
the local memory of calling process (source) to the memory of a remote
process (destination).int ARMCI_NbPutS(void* src_ptr, int src_stride_ar[], void* dst_ptr, int dst_stride_ar[],
 int count[], int stride_levels, int proc,armci_hdl_t* handle)
 ARGUMENTS:src_ptr        - Source starting address of the data block to put.
 src_stride_arr - Source array of stride distances in bytes.
 dst_ptr        - Destination starting address to put data.
 dst_stride_ar  - Destination array of stride distances in bytes.
 count          - Block size in each dimension. count[0] should be the
 number of bytes of contiguous data in leading dimension.
 stride_levels  - The level of strides.
 proc           - Remote process ID (destination).
 handle         - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Blocking strided operation that transfers data
from
the remote process memory (source) to the calling process  local
memory
(destination).int ARMCI_GetS(void *src_ptr c_ptr, int src_stride_ar[], void* dst_ptr,
 int dst_stride_ar[], int count[], int stride_levels, int proc)
 
 ARGUMENTS:src_ptr        - Source starting address of the data block to get.
 src_stride_arr - Source array of stride distances in bytes.
 dst_ptr        - Destination starting address to get data.
 dst_stride_arr - Destination array of stride distances in bytes.
 count          - Block size in each dimension. count[0] should be the
 number of bytes of contiguous data in leading dimension.
 stride_levels  - The level of strides.
 proc           - Remote process ID (source).
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Non-blocking strided operation that transfers data
from
the remote process memory (source) to the calling process  local
memory
(destination).int ARMCI_NbGetS(void *src_ptr c_ptr, int src_stride_ar[], void* dst_ptr, int dst_stride_ar[],
 int count[], int stride_levels, int proc, armci_hdl_t* handle)
 
      ARGUMENTS:_____________________________________________________________________________src_ptr        - Source starting address of the data block to get.
 src_stride_arr - Source array of stride distances in bytes.
 dst_ptr        - Destination starting address to get data.
 dst_stride_arr - Destination array of stride distances in bytes.
 count          - Block size in each dimension. count[0] should be the
 number of bytes of contiguous data in leading dimension.
 stride_levels  - The level of strides.
 proc           - Remote process ID (source).
 handle         - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 
 4 Copy operations for contiguous
dataint ARMCI_Put(void* src, void* dst, int bytes, int proc)PURPOSE: Blocking transfer of contiguous data from
the local process 
memory (source) to remote process memory (destination). ARGUMENTS:src     - Source starting address of the data block to put.
 dst     - Destination starting address to put data.
 bytes   - amount of data to transfer in bytes.
 proc    - Remote process ID (destination).
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Non-blocking transfer of contiguous data
from
the local
process 
memory (source) to remote process memory (destination).int ARMCI_NbPut(void* src, void* dst, int bytes, int proc, armci_hdl_t* handle)
 ARGUMENTS:src     - Source starting address of the data block to put.
 dst     - Destination starting address to put data.
 bytes   - amount of data to transfer in bytes.
 proc    - Remote process ID (destination).
 handle  - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Blocking transfer of contiguous data from the remote process 
memory (source) to the calling process
memory (destination).int ARMCI_Get(src, dst, bytes, proc)
 ARGUMENTS:src     - Source starting address of the data block to put.
 dst     - Destination starting address to put data.
 bytes   - amount of data to transfer in bytes.
 proc    - Remote process ID (destination).
 
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Non-blocking transfer of contiguous
data
from the remote process  memory (source) to the calling process
memory
(destination).int ARMCI_NbGet(src, dst, bytes, proc, armci_hdl_t* handle)
 ARGUMENTS:__________________________________________________________________________src     - Source starting address of the data block to put.
 dst     - Destination starting address to put data.
 bytes   - amount of data to transfer in bytes.
 proc    - Remote process ID (destination).
 handle  - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 5 Accumulate operation using the
generalized I/O
vector formatAccumulate
operation performs atomic scaled reduction, i.e., 
remote += scale*local
 
 int ARMCI_AccV(int datatype, void *scale, armci_giov_t *dsrc_arr, int arr_len, int proc, armci_hdl_t* handle)
 
 PURPOSE: Blocking generalized I/O vector operation that atomically updates the memory of
 a remote process (destination).
 DATA TYPE:
 typedef struct {
 void **src_ptr_ar;  - Source starting addresses of each data segment.
 void **dst_ptr_ar;  - Destination starting addresses of each data segment.
 int bytes;         - The length of each segment in bytes.
 int ptr_ar_len;    - Number of data segment.
 }armci_giov_t;
 
 ARGUMENTS:
 datatype  - Supported data types are:
 ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
 ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
 ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
 scale     - Scale for the data (dest = dest + scale * src).
 dsrc_arr  - Array of data (type of armci_giov_t) to be accumulated to the remote process.
 arr_len   - Number of elements in the dsrc_arr.
 proc      - Remote process ID.
 handle    - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
Non-blocking generalized  I/O vector operation that
atomically 
updates the memory of a remote process (destination).int ARMCI_NbAccV(int datatype, void *scale, armci_giov_t *dsrc_arr, int arr_len, int proc,
 armci_hdl_t* handle)
 DATA TYPE:typedef struct {
 void **src_ptr_ar;  - Source starting addresses of each data segment.
 void **dst_ptr_ar;  - Destination starting addresses of each data segment.
 int bytes;         - The length of each segment in bytes.
 int ptr_ar_len;    - Number of data segment.
 }armci_giov_t;
 ARGUMENTS:
 datatype  - Supported data types are:
 ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
 ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
 ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
        scale     - Scale for the data (dest = dest + scale * src)._____________________________________________________________________________dsrc_arr  - Array of data (type of armci_giov_t) to be accumulated to the remote process.
 arr_len   - Number of elements in the dsrc_arr.
 proc      - Remote process ID.
 handle    - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 6 Accumulate operation using the
strided formatint ARMCI_AccS(int datatype, void *scale, void* src_ptr,int src_stride_ar[], void* dst_ptr, int dst_stride_ar[], int count[],  int stride_levels, int proc)
 PURPOSE: Blocking strided operation that atomicaly updates the memory of a remote process (destination).
 ARGUMENTS:
 datatype       - Supported data types are:
 ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
 ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
 ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
 scale          - Scale for the data (dest = dest + scale * src).
 src_ptr        - Source starting address of the data block to put.
 src_stride_arr - Source array of stride distances in bytes.
 dst_ptr        - Destination starting address to put data.
 dst_stride_arr - Destination array stride distances in bytes.
 count          - Block size in each dimension. count[0] should be the
 number of bytes of contiguous data in leading dimension.
 stride_levels  - The level of strides.
 proc           - Remote process ID (destination).
 RETURN VALUE:
 zero           - Successful.
 other value    - Error code (described in the release notes).
 PURPOSE: Non-blocking strided
operation
that atomicaly updates the memory of a remote process (destination).int ARMCI_NbAccS(int datatype, void *scale, void* src_ptr,int src_stride_ar[],
 void* dst_ptr, int dst_stride_ar[], int count[],  int stride_levels,
 int proc, armci_hdl_t* handle)
 ARGUMENTS:datatype       - Supported data types are:
 ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
 ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
 ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
 scale          - Scale for the data (dest = dest + scale * src).
 src_ptr        - Source starting address of the data block to put.
 src_stride_arr - Source array of stride distances in bytes.
 dst_ptr        - Destination starting address to put data.
 dst_stride_arr - Destination array stride distances in bytes.
 count          - Block size in each dimension. count[0] should be the
 number of bytes of contiguous data in leading dimension.
 stride_levels  - The level of strides.
 proc           - Remote process ID (destination).
 handle         - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero           - Successful.
 other value    - Error code (described in the release notes).
 
 
 7 Accumulate operation using
contiguous format
int ARMCI_Acc(int datatype, void *scale, void* src, void* dst, int bytes, int proc)PURPOSE: Blocking operation that atomicaly updates the memory of a remote process (destination).
 
 ARGUMENTS:
 datatype - Supported data types are:
 ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
 ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
 ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
 scale    - Scale for the data (dest = dest + scale * src).
 src      - Source starting address of the data to transfer.
 dst      - Destination starting address to add incoming data.
 bytes    - amount of data to transfer in bytes.
 proc     - Remote process ID (destination).
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 _____________________________________________________________________________int ARMCI_NbAcc(int datatype, void *scale, void* src, void* dst, int bytes, int proc,
 armci_hdl_t* handle)
 
 PURPOSE: Bon-blocking operation that atomicaly updates the memory of a remote process (destination).
 ARGUMENTS:
 datatype - Supported data types are:
 ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
 ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
 ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
 scale    - Scale for the data (dest = dest + scale * src).
 src      - Source starting address of the data to transfer.
 dst      - Destination starting address to add incoming data.
 bytes    - amount of data to transfer in bytes.
 proc     - Remote process ID (destination).
 handle   - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 
 8 Register Originated Data Transfer
Operationsint ARMCI_PutValueXXX(DATATYPE src, void* dst, int proc)PURPOSE: Transfer of a value stored in a
register  of a local
process
to remote process memory (destination).   XXX can be
"Long"/"Int"/"Double"/"Float" ARGUMENTS:DATA TYPE    - long, int, float, double according to XXX in the function name
 src   - Value in a register to put.
 dst   - Destination starting address to put data.
 proc  - Remote process ID (destination).
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Non-blocking transfer of a value stored in
a register of a
local
process to remote process memory (destination). 
XXX can be "Long"/"Int"/"Double"/"Float"int ARMCI_NbPutValueXXX(DATATYPE src, void* dst, int proc, armci_hdl_t* handle)
 ARGUMENTS:DATA TYPE:   - long, int, float, double according to XXX in the function name
 src    - Value in a register to put.
 dst    - Destination starting address to put data.
 proc   - Remote process ID (destination).
 handle - Pointer to a desciptor associated with a particular non-blocking transfer.
 Passing of a NULL value for this arg makes this function do an implicit
 handle non-blocking transfer.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Transfer of a value stored in a
register  of a process
(source).  
XXX can be "Long"/"Int"/"Double"/"Float"DATATYPE ARMCI_GetValueXXX(void *src, int proc)
 ARGUMENTS:_____________________________________________________________________________DATATYPE    - long, int, float, double according to XXX in the function name
 src   - Source starting address.
 proc  - Remote process ID (source).
 RETURN VALUE:
 the value (of type DATATYPE) is returned.
 9 Completion of Outstanding
Operationsint ARMCI_Fence(int proc)PURPOSE: Blocks the calling process until all
blocking put or
accumulate
operations issued to the specified remote process complete at the destination.
 ARGUMENTS:proc    - Remote process ID.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Blocks the calling process until all the
outstanding blocking
put or accumulateint ARMCI_AllFence()
 operations complete remotely regardless of the destination processor.
 ARGUMENTS: none 
 PURPOSE: A common function to be used  to wait
for non-blocking
ARMCI
operations with explicit handle.int ARMCI_Wait(armci_hdl_t* handle)
 
 ARGUMENTS:handle - Pointer to a desciptor associated with a particular non-blocking transfer.
 A value of NULL for the pointer is erroneous. A value other then NULL would
 make this routine act as a wait for an explicit non-blocking request with
 the handle pointed to by reqid.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE:
A function to be used as check completion status of 
non-blocking
ARMCI operations with explicit handle.int ARMCI_Test(armci_hdl_t* handle)
 ARGUMENTS:handle - Pointer to a desciptor associated with a particular non-blocking transfer.
 A value of NULL for the pointer is erroneous. A value other then NULL would
 make this routine act as a wait for an explicit non-blocking request with
 the handle pointed to by reqid.
 RETURN VALUE:
 zero        - Completed
 1           - In progress
 other value - Error code (described in the release notes).
 PURPOSE: Wait for all outstanding non-blocking
operations with implicit
handles to a particular process to finish.int ARMCI_WaitProc(int proc)
 ARGUMENTS:proc - proc for which all the outstanding non-blocking operations have to be completed.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Wait for all outstanding non-blocking
operations with implicit
handles to finish.int ARMCI_WaitAll()
 ARGUMENTS: noneRETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 _____________________________________________________________________________int ARMCI_Barrier()
 
 PURPOSE: Synchronize processors and memory. This operation combines functionality of
 MPI_Barrier and ARMCI_AllFence.
 ARGUMENTS: none
 RETURN VALUE: none
 10 Aggregated Data Transfer
OperationsARMCI_SET_AGGREGATE_HANDLE
(armci_hdl_t*
handle)handle - Pointer to a desciptor associated with a particular non-blocking transfer.PURPOSE: Mark a handle as aggregate. This will allow
ARMCI to combine
nonblocking
operations that use that particular handle and process them as a single
operation. In the initial implementation only contiguous puts or gets
could
use aggregate handle. Specifying the same handle for a mix of put anmd
get calls is not allowed i.e., only multiple put or only multiple get
calls
can use the same handle. 
 
 ARMCI_UNSET_AGGREGATE_HANDLE
            (armci_hdl_t*
handle)  handle - Pointer to a desciptor associated with a particular non-blocking transfer.PURPOSE: Clears a handle that has been marked as
aggregate. 
 
 11
Atomic and
Synchronization
Operations
int ARMCI_Rmw(int op, void *ploc, void *prem, int value, proc)PURPOSE: Combines atomically the specified
integer  value with the
corresponding integer value (int or long) at the remote memory location
and returns the original value found at that location. ARGUMENTS: op    - Available operations are:
 ARMCI_FETCH_AND_ADD -> int
 ARMCI_FETCH_AND_ADD_LONG -> long
 ARMCI_SWAP -> int
 ARMCI_SWAP_LONG ->long
 ploc   - Pointer to the local memory.
 prem   - Pointer to the remote memory.
 value  - Value to be added to the remote memory.
 proc   - Remote process ID.
 
 int ARMCI_Create_mutexes(int count)PURPOSE: Collective operation to create sets of
mutexes on individual
processes. Each process specifies the number of mutexes associated with that
 process. The total number of mutexes allocate will be a sum of the
 values specified on each process.
 ARGUMENTS:count    - number of mutexes allocated on calling process
 count=0 means that no mutexes will be associated with that process.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Collective operation to destroy mutex sets
allocated by
ARMCI_Create_mutexes.int ARMCI_Destroy_mutexes(void)
 ARGUMENTS:  noneRETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 PURPOSE: Acquire the specified mutex on the
specified
process on behalf
of the calling process.void ARMCI_Lock(int mutex, int proc)
 
 ARGUMENTS:mutex    - Mutex number (0..count-1)
 proc    - Remote process ID
 PURPOSE: Releas the specified mutex on the specified
process on behalf
of the calling process. The mutex must have been acquired with
ARMCI_Lock.void ARMCI_Unlock(int mutex, int proc)
 ARGUMENTS:mutex    - Mutex number (0..count-1)
 proc     - Remote process ID
 
 
 12 Memory Management
int ARMCI_Malloc(void* ptr[], armci_size_t bytes)PURPOSE: Collective operation to allocate memory
that can be used in
the context of ARMCI copy operations.
 
 ARGUMENTS:ptr    - Pointer array. Each pointer points to the allocated memory of one process.
 bytes    - The size of allocated memory in bytes.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 
 
 void* ARMCI_Malloc_local(armci_size_t bytes)PURPOSE: Operation (noncollective) to allocate local
memory. This
memory can only be accessed locally. However, using this memory in
ARMCI operations can improve performance on some systems. For example,
on Myrinet or Infiniband, the memory is registered and therefore
suitable for the native RDMA communication. 
 ARGUMENTS:bytes    - The size of allocated memory in bytes.
 RETURN VALUE:
 NULL pointer - Failure.
 other value  - address of newly allocated memory.
 
 
 int ARMCI_Free(void *address)PURPOSE: Collective operation to free memory which
was allocated by
ARMCI_Malloc. ARGUMENTS:address    - pointer to the allocated memory.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 
 PURPOSE: Non-collective operation to free memory
which was allocated by
ARMCI_Malloc_local.int ARMCI_Free_local(void *address)
 ARGUMENTS:address    - pointer to the allocated memory.
 RETURN VALUE:
 zero        - Successful.
 other value - Error code (described in the release notes).
 
 
 13 Collective OperationsThese
operations can be used as an alternative to the collective
operations in a message-passing library ARMCI is running with. The
programmer can use either.void armci_msg_brdcst(void* buffer, int len, int root)
 PURPOSE: broadcast data from process "root" to everybody else.ARGUMENTS:
 buffer - data to broadcast/receive
 len    - size of the data
 root   - rank of the sending process
 RETURN VALUE: none
 void armci_msg_gop2(void *x, int n, int type, char* op)
 PURPOSE: allreduce operation for int, long, float, double corresponding to XXX is "i"/"l","f","d" ARGUMENTS:
 x      - data
 n      - number of elements
 type   - data type, one of: ARMCI_INT/ARMCI_LONG/ARMCI_FLOAT/ARMCI_DOUBLE
 op     - operator, one of: "+","-","*","min","max","abs"
 RETURN VALUE: none
 void armci_msg_barrier(void)
 PURPOSE: synchronize all processors
 ARGUMENTS: none
 RETURN VALUE: none
 void armci_msg_reduce(void *x, int n, char* op, int type, int root)
 PURPOSE: reduce operation
 ARGUMENTS:
 x      - data
 len    - size of the data
 type   - data type, one of: ARMCI_INT/ARMCI_LONG/ARMCI_FLOAT/ARMCI_DOUBLE
 op     - operator, one of: "+","-","*","min","max","abs"
 RETURN VALUE: none
 
 
 
            These
operations can be used to determine configuration of the system the
application  is running on.14 System ConfigurationThe system configuration is described in terms of locality domains. For
example on clusters with SMP nodes, SMP node is one of two locality
domains for a process. The ARMCI header file predefines
ARMCI_DOMAIN_SMP for querying configuration information on clusters
composed of computer nodes with shared memory.
 
 int armci_domain_nprocs(armci_domain_t domain, int id)
 PURPOSE: return number of processes/tasks in locality domain represented by id. PURPOSE: Returns
global process/task id based on its id in a given locality domain nodeARGUMENTS:
 domain - domain name
 id     - identifier of a node within the locality domain, value < 0 means my node
 RETURN VALUE:
 < 0         - error
 other value - number of processes/tasks (0, ..., armci_domain_count(domain)-1)
 
 
 int armci_domain_count(armci_domain_t domain)
 PURPOSE: return number of nodes in specified locality domain. ARGUMENTS:
 domain - domain name
 RETURN VALUE:
 <  0        - error
 other value - number of nodes
 
 
 int armci_domain_id(armci_domain_t domain, int glob_proc_id)int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id)
 PURPOSE: return ID of locality domain of specified process
 ARGUMENTS:
 domain - domain name
 id     - process/task id
 RETURN VALUE
 < 0         - error
 other value - process/task id
 
 
 ARGUMENTS:
 domain - domain name
 id - identifier of a node within the locality
domain, value < 0 means my node
 RETURN VALUE:
 < 0 - error
 other value - process/task id
 int armci_domain_my_id(armci_domain_t domain)PURPOSE: Returns id node in specified domain the calling process/task belongs to ARGUMENTS:
 domain - domain name
 id     - identifier of a node within the locality domain, value < 0 means my node
 RETURN VALUE: id of domain
 
 |