## The `upc_all_broadcast` function

#### Purpose

Copies a block of memory

#### Synopsis

        #include <upc.h>
        #include <upc_collective.h>
        void upc_all_broadcast(shared void * restrict dst, shared const void * restrict src, size_t nbytes, upc_flag_t flags);

#### Description

The `upc_all_broadcast` function copies a block of memory with affinity to a single thread to a block of shared memory on each thread. The number of bytes in each block is `nbytes`.

`nbytes` must be strictly greater than 0.

`upc_all_broadcast` function treats the `src` pointer as if it pointed to a shared memory area with the type:

        shared [] char[nbytes]

The effect is equivalent to copying the entire array pointed to by `src` to each block of `nbytes` bytes of a shared array `dst` 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.

- EXAMPLE 1 shows upc_all_broadcast

      #include <upc.h>
      #include <upc_collective.h>
      shared int A[THREADS];
      shared int B[THREADS];
      // Initialize A.
      upc_barrier;
      upc_all_broadcast( B, &A[1], sizeof(int),
                         UPC_IN_NOSYNC | UPC_OUT_NOSYNC );
      upc_barrier;

- EXAMPLE 2:

      #include <upc.h>
      #include <upc_collective.h>
      #define NELEMS 10
      shared [] int A[NELEMS];
      shared [NELEMS] int B[NELEMS*THREADS];
      // Initialize A.
      upc_all_broadcast( B, A, sizeof(int)*NELEMS,
                         UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC );

- EXAMPLE 3 shows `(A[3],A[4])` is broadcast to `(B[0],B[1]), (B[10],B[11]), (B[20],B[21]), ..., (B[NELEMS*(THREADS-1)],B[NELEMS*(THREADS-1)+1]).`

      #include <upc.h>
      #include <upc_collective.h>
      #define NELEMS 10
      shared [NELEMS] int A[NELEMS*THREADS];
      shared [NELEMS] int B[NELEMS*THREADS];
      // Initialize A.
      upc_barrier;
      upc_all_broadcast( B, &A[3], sizeof(int)*2,
                         UPC_IN_NOSYNC | UPC_OUT_NOSYNC );
      upc_barrier;

Terms, definitions, and symbols

Back to index of all UPC functions