Building Chapel-GPU¶
Prerequisites¶
Chapel: 1.32. Detailed instructions for installing Chapel can be found: here.
GPU Compilers & Runtimes:
GPUIterator
andGPUAPI
require either of the following GPU programing environments.NVIDIA CUDA: Tested with 10.2
AMD HIP: Tested with 4.1
Intel DPC++ (SYCL): Tested with 2021.3.0
OpenCL: Tested with 2.2 and 1.2
Build tools
cmake: 3.8.0 or above
Note
While GPUIterator
works with OpenCL (Chapel + GPUIterator + a full OpenCL program), GPUAPI
with OpenCL is under developement.
Tip
Even if you are only interested in using GPUIterator
, we’d recommend following the steps below because GPUIterator
internally uses GPUAPI
to automatically 1) query the number of GPUs per node and 2) set a specific device for GPU executions. However, if you want to build your Chapel programs with GPUIterator
and without GPUIAPI
, you can do so like this: chpl -M path/to/chapel-gpu/src -sdisableMultiGPUs=true test.chpl
, in which case you can only use a single GPU per node.
Instructions¶
Clone the repository
git clone https://github.com/ahayashi/chapel-gpu.git
or
git clone git@github.com:ahayashi/chapel-gpu.git
Build
libGPUAPI
library usingcmake
cd chapel-gpu
mkdir build
cd build
cmake ..
make
make install
This produces the following files:
File |
Type |
Destination |
Description |
---|---|---|---|
env.sh |
Shell Script |
|
Sets environment variables. |
libGPUAPIX.so |
Shared Library |
|
X is either CUDA, HIP, DPCPP, or OpenCL. |
libGPUAPIX_static.a |
Static Library |
|
A static version of libGPUAPI. Mainly used in this document. |
GPUAPI.h |
Header File |
|
A header file that includes the declaration of GPUAPI functions. |
lambda.h |
Header File |
|
A header file that facilitates writing device lambdas. |
GPUIterator.chpl |
Chapel Source File |
|
The |
GPUAPI.chpl |
Chapel Source File |
|
The |
BuildGPUCode.cmake |
CMake File |
|
A CMake file that compiles X.cu to either CUDA/HIP/DPC++ GPUs. |
gpuapiX-config[-nonconfig].cmake |
CMake File |
|
A CMake config file that allows an external CMake project to find the location of this installation (X is either CUDA, HIP, or DPCPP) |
By default, the libraries are installed into chapel-gpu/install
. If you wish to install it into your preferred directly, please type:
cmake -DCMAKE_INSTALL_PREFIX=path/to/your_preferred_directory ..
Note
For CUDA Users: If CUDA is not found, make sure nvcc
is in your path or tell cmake
the path to nvcc
. For example: cmake CMAKE_CUDA_COMPILER=path_to/nvcc ..
For AMD HIP Users: Chapel-GPU relies on hipify-perl
to convert CUDA programs to HIP programs internally. If you are pretty sure HIP is installed on your system, but cmake
complains hipify-perl
is not found, consider updating the following cmake command in CMakeLists.txt
: find_program(CHPL_GPU_HIPIFY_EXECUTABLE ...)
. For example, it would be a good idea to add other hint paths to PATHS
in addition to ${HIP_ROOT_DIR}
. For more details please see CMake Documentation.
For DPC++ Users: Chapel-GPU relies on dpct
to convert CUDA programs to DPC++ programs internally, which requires CUDA header files. If cmake
complains CUDA is not found, please set CUDA_HOME
approprietly.
source
env.sh
cd ..
source ./install/bin/env.sh
$CHPL_GPU_HOME
, and 2) environment variables related to CUDA/HIP/OpenCL/DPC++ installation directory, the latter of which can be referred when the user creates object files for thier GPU programs.Build and run a test program