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_scatterfor 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 );