Using Chapel on Intel Xeon Phi¶
The following information is assembled to help Chapel users get up and running on Intel Xeon Phi, Knights Corner (KNC).
The initial implementation runs in self-hosted mode only. That is, the entire Chapel program runs on the KNC co-processor. For multilocale, GASNet must use the MPI conduit (segment everything) as all communication must bounce through the host processor.
Current Limitations¶
There are currently a number of limitations for KNC builds:
Only the Intel compiler supports compilation for KNC:
CHPL_TARGET_COMPILER=intel or CHPL_TARGET_COMPILER=cray-prgenv-intel
Only non-native comm substrates can be used with KNC:
CHPL_COMM_SUBSTRATE=mpi or CHPL_COMM_SUBSTRATE=udp
Additionally the following configurations are not supported:
Configuration Reason CHPL_MEM=tcmalloc lfence not supported CHPL_REGEXP=re2 sfence not supported CHPL_HWLOC=hwloc undiagnosed build issues CHPL_GMP=system system version not built for KNC
Getting started¶
For vanilla Intel compiler:¶
Set CHPL_TARGET_COMPILER=intel and CHPL_TARGET_ARCH=knc.
Build Chapel as normal. Running printchplenv should look something like this:
CHPL_HOST_PLATFORM: linux64 CHPL_HOST_COMPILER: gnu CHPL_TARGET_PLATFORM: linux64 CHPL_TARGET_COMPILER: intel CHPL_TARGET_ARCH: knc CHPL_LOCALE_MODEL: flat CHPL_COMM: none CHPL_TASKS: fifo CHPL_LAUNCHER: none CHPL_TIMERS: generic CHPL_MEM: cstdlib CHPL_MAKE: gmake CHPL_ATOMICS: intrinsics CHPL_GMP: none CHPL_HWLOC: none CHPL_REGEXP: none CHPL_WIDE_POINTERS: struct CHPL_LLVM: none CHPL_AUX_FILESYS: none
Build your Chapel program as normal:
chpl hello.chpl
For Cray XC:¶
For Cray machines, only the aprun launcher is supported. In addition, CHPL_TASKS=muxed and CHPL_COMM=ugni are not supported.
Load the proper modules. The order in which you do these module commands matters.
First, swap in the Intel PE module. For example, if you have the Cray PE module loaded:
module swap PrgEnv-cray PrgEnv-intel
Unload libsci, atp (unsupported) and any craype processor type modules:
module unload cray-libsci atp craype-ivybridge
Load the KNC craype module:
module load craype-intel-knc
Unload any craype-hugepages module you have loaded, for example:
module unload craype-hugepages2M
Build Chapel as normal. Running printchplenv should look something like this:
CHPL_HOST_PLATFORM: cray-xc CHPL_HOST_COMPILER: gnu CHPL_TARGET_PLATFORM: cray-xc CHPL_TARGET_COMPILER: cray-prgenv-intel CHPL_TARGET_ARCH: knc CHPL_LOCALE_MODEL: flat CHPL_COMM: gasnet CHPL_COMM_SUBSTRATE: mpi CHPL_GASNET_SEGMENT: everything CHPL_TASKS: fifo CHPL_LAUNCHER: aprun CHPL_TIMERS: generic CHPL_MEM: cstdlib CHPL_MAKE: gmake CHPL_ATOMICS: intrinsics CHPL_NETWORK_ATOMICS: none CHPL_GMP: gmp CHPL_HWLOC: none CHPL_REGEXP: none CHPL_WIDE_POINTERS: struct CHPL_LLVM: none CHPL_AUX_FILESYS: none
Build your Chapel program as normal:
chpl hello.chpl
Request some nodes with KNCs. You can get the node numbers using cnselect:
cnselect -e name.eq.Xeon_Phi
or:
cnselect -e name.eq.MIC
Next, use qsub to request the nodes. For example, to request nodes 12-16 for interactive using PBSPro:
qsub -I -lmppwidth=5,mppnppn=1,mppnodes=\"12-16\"
Change to your working directory:
cd $PBS_O_WORKDIR
Run your program as you would normally.
./a.out -nl 5