## The `upc_all_scatter` function

#### Synopsis

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

#### Description

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.

- EXAMPLE 1: `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<NUMELEMS*THREADS; i++)
      myA[i] = i + NUMELEMS*THREADS*MYTHREAD; // (for example)
      // scatter the SRC_THREADÕs row of the array
      srcA = (shared [] int *) &A[SRC_THREAD];
      upc_barrier;
      upc_all_scatter( B, srcA, sizeof(int)*NUMELEMS,
      UPC_IN_NOSYNC | UPC_OUT_NOSYNC);
      upc_barrier;
      </pre>

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

Terms, definitions, and symbols

Back to index of all UPC functions