upc_all_scatter
function#include <upc.h> #include <upc_collective.h> void upc_all_scatter(shared void * restrict dst, shared const void * restrict src, size_t nbytes, upc_flag_t flags);
The upc_all_scatter
function
copies the ith block of an area of shared
memory with affinity to a single thread to a block of shared memory with
affinity to the ith thread. The number of bytes in each block is nbytes
.
nbytes
must be strictly greater than 0.
The upc_all_scatter
function treats the src
pointer as if it pointed to a
shared memory area with the type:
shared [] char[nbytes * THREADS]
and it treats the dst
pointer as if it pointed to a shared memory area with
the type:
shared [nbytes] char[nbytes * THREADS]
The target of the dst
pointer must have affinity to thread 0.
The dst
pointer is treated as if it has phase 0.
For each thread i, the effect is equivalent to copying the ith block of nbytes
bytes pointed to by src
to the block of nbytes
bytes pointed to by
dst
that
has affinity to thread i.
upc_all_scatter
for the dynamic THREADS translation environment.
#include <upc.h> #include <upc_collective.h> #define NUMELEMS 10 #define SRC_THREAD 1 shared int *A; shared [] int *myA, *srcA; shared [NUMELEMS] int B[NUMELEMS*THREADS]; // allocate and initialize an array distributed across all threads A = upc_all_alloc(THREADS, THREADS*NUMELEMS*sizeof(int)); myA = (shared [] int *) &A[MYTHREAD]; for (i=0; i- EXAMPLE 2:
upc_all_scatter
for the static THREADS translation environment.#include <upc.h> #include <upc_collective.h> #define NELEMS 10 shared [] int A[NELEMS*THREADS]; shared [NELEMS] int B[NELEMS*THREADS]; // Initialize A. upc_all_scatter( B, A, sizeof(int)*NELEMS, UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC );