blob: a34903c3f323765dfbdc80a06ddf502dc03c761d [file] [log] [blame]
<h2>The <code>upc_all_broadcast</code> function</h2>
<h4>Purpose</h4>
<p>Copies a block of memory
<h4>Synopsis</h4>
<pre>
#include &lt;upc.h&gt;
#include &lt;upc_collective.h&gt;
void upc_all_broadcast(shared void * restrict dst, shared const void * restrict src, size_t nbytes, upc_flag_t flags);
</pre>
<p>
<h4>Description</h4>
<p>
The <code>upc_all_broadcast </code> 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 <code>nbytes</code>.
<p><code>nbytes</code> must be strictly greater than 0.
<p><code>upc_all_broadcast </code> function treats the <code>src</code> pointer as if it pointed to a
shared memory area with the type:
<pre>
shared [] char[nbytes]
</pre>
<p>The effect is equivalent to copying the entire array pointed to by <code>src</code> to each
block of <code>nbytes</code> bytes of a shared array <code>dst</code> with the type:
<pre>
shared [nbytes] char[nbytes * THREADS]
</pre>
<p>The target of the <code>dst</code> pointer must have affinity to thread 0.
<p>The <code>dst</code> pointer is treated as if it has phase 0.
<ul>
<li>EXAMPLE 1 shows upc_all_broadcast
<pre>
#include &lt;upc.h&gt;
#include &lt;upc_collective.h&gt;
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;
</pre>
<li>EXAMPLE 2:
<pre>
#include &lt;upc.h&gt;
#include &lt;upc_collective.h&gt;
#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 );
</pre>
<li>EXAMPLE 3 shows <code>(A[3],A[4])</code> is broadcast to <code>(B[0],B[1]), (B[10],B[11]),
(B[20],B[21]), ..., (B[NELEMS*(THREADS-1)],B[NELEMS*(THREADS-1)+1]).</code>
<pre>
#include &lt;upc.h&gt;
#include &lt;upc_collective.h&gt;
#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;
</pre>
</ul>
<p>&nbsp
<p>&nbsp
<p><a href="terms.html">Terms, definitions, and symbols</a><br>
<p><a href="index.html">Back to index of all UPC functions</a>