Intel® Xeon Phi™ Coprocessor D
EVELOPER
’
S
Q
UICK
S
TART
G
UIDE
21
size_t size = 1*1e6;
int n_bytes = size*sizeof(float);
data =
(_Cilk_shared float *)_Offload_shared_malloc (n_bytes);
for (int i=0; i<size; ++i)
{
data[i] = i%10;
}
_Cilk_offload MIC_OMPReduction(size);
_Offload_shared_free(data);
return 0;
}
Code Example 4: Using the “_Cilk_shared” and “_Cilk_offload” Keywords with Dynamic Allocation in
C/C++
Note: For more examples on using the implicit memory copy model, see:
C:
/opt/intel/composerxe/Samples/en_US/C++/mic_samples/shrd_sampleC
and
…/LEO_tutorial
C++:
/opt/intel/composerxe/Samples/en_US/C++/mic_samples/shrd_sampleCPP
For more information, users are encouraged to read the Intel C++ Compiler User and Reference Guides and/or
the Intel Fortran Compiler User and Reference Guides.
The section “Restrictions on Offload Using Shared Virtual Memory” in the document “Intel C++ Compiler User
and Reference Guide” shows some restrictions of using this programming model.
Native Compilation
Applications can also be run natively on the Intel® Xeon Phi™ Coprocessor, in which case the coprocessor will
be treated as a standalone multicore computer. Once the binary is built on the host system, copy the binary
and other related binaries or data to the Intel® Xeon Phi™ Coprocessor’s filesystem (or make them visible over
there via NFS).
Example:
1.
Copy
openmp_sample.c
from
/opt/intel/composerxe/Samples/en_US/C++/openmp_samples/
to your home directory
2.
Build the application with the
–mmic
flag:
icc –mmic –vec-report3 –openmp openmp_sample.c
3.
Upload the binary to the coprocessor:
scp a.out mic0:/tmp/a.out
4.
Copy over any shared libraries required by your application, in this case the OpenMP* runtime library: