CuPBoP/README.md

105 lines
3.1 KiB
Markdown
Raw Normal View History

2022-05-05 09:11:25 +08:00
# CuPBoP: Cuda for Parallelized and Broad-range Processors
## Introduction
2022-05-05 09:11:25 +08:00
CuPBoP is a framework which support executing unmodified CUDA source code
on non-NVIDIA devices.
Currently, CuPBoP support serveral CPU backends, including x86, AArch64, and RISC-V.
Supporting the RISC-V GPU [Vortex](https://vortex.cc.gatech.edu/) is working in progress.
## Install
### Prerequisites
- Linux system
2022-09-08 07:21:14 +08:00
- [LLVM 14.0.1](https://github.com/llvm/llvm-project/releases/tag/llvmorg-14.0.1)
### Installation
1. Clone from github
2022-05-05 09:11:25 +08:00
```bash
2022-09-08 07:42:59 +08:00
git clone --recursive https://github.com/drcut/CuPBoP
2022-05-05 09:11:25 +08:00
cd CuPBoP
export CuPBoP_PATH=`pwd`
export LD_LIBRARY_PATH=$CuPBoP_PATH/build/runtime:$CuPBoP_PATH/build/runtime/threadPool:$LD_LIBRARY_PATH
```
2022-05-05 09:11:25 +08:00
2. As CuPBoP relies on CUDA structures, we need to download the CUDA header file
2022-05-05 09:11:25 +08:00
```bash
wget https://www.dropbox.com/s/r18io0zu3idke5p/cuda-header.tar.gz?dl=1
tar -xzf 'cuda-header.tar.gz?dl=1'
cp -r include/* runtime/threadPool/include/
```
2022-05-05 09:11:25 +08:00
3. Other CUDA files are also required for compiling CUDA source code to LLVM IR
2022-05-05 09:11:25 +08:00
```bash
wget https://www.dropbox.com/s/4pckqsjnl920gpn/cuda-10.1.tar.gz?dl=1
tar -xzf 'cuda-10.1.tar.gz?dl=1'
```
4. Build CuPBoP
2022-05-05 09:11:25 +08:00
```bash
mkdir build && cd build
cmake .. -DLLVM_CONFIG_PATH=`which llvm-config` # need path to llvm-config
make
```
## Run Vector Addition example
2022-05-05 09:11:25 +08:00
```bash
cd examples/vecadd
# Compile CUDA source code (both host and kernel) to bitcode files
clang++ -std=c++11 vecadd.cu \
-I../.. --cuda-path=$CuPBoP_PATH/cuda-10.1 \
--cuda-gpu-arch=sm_50 -L$CuPBoP_PATH/cuda-10.1/lib64 \
-lcudart_static -ldl -lrt -pthread -save-temps -v || true
# Apply compilation transformations on the kernel bitcode file
$CuPBoP_PATH/build/compilation/kernelTranslator \
vecadd-cuda-nvptx64-nvidia-cuda-sm_50.bc kernel.bc
# Apply compilation transformations on the host bitcode file
$CuPBoP_PATH/build/compilation/hostTranslator \
vecadd-host-x86_64-unknown-linux-gnu.bc host.bc
# Generate object files
2022-05-05 09:11:25 +08:00
llc --relocation-model=pic --filetype=obj kernel.bc
llc --relocation-model=pic --filetype=obj host.bc
# Link with runtime libraries and generate the executable file
g++ -o vecadd -fPIC -no-pie \
-I$CuPBoP_PATH/runtime/threadPool/include \
-L$CuPBoP_PATH/build/runtime \
-L$CuPBoP_PATH/build/runtime/threadPool \
host.o kernel.o \
-I../.. -lpthread -lc -lx86Runtime -lthreadPool
# Execute
./vecadd
2022-05-05 09:11:25 +08:00
```
2022-05-07 04:08:28 +08:00
## How to contribute?
2022-05-07 04:15:17 +08:00
Any kinds of contributions are welcome.
Please refer to [Contribution.md](./CONTRIBUTING.md) for more detail.
2022-09-08 07:21:14 +08:00
## Related publications
- COX: Exposing CUDA Warp-Level Functions to CPUs
2022-09-08 07:21:14 +08:00
ACM Transactions on Architecture and Code Optimization
[link](https://dl.acm.org/doi/abs/10.1145/3554736)
- CuPBoP: CUDA for Parallelized and Broad-range Processors
2022-09-08 07:21:14 +08:00
arxiv preprint
[link](https://arxiv.org/abs/2206.07896)
## Contributors
- [Ruobing Han](https://drcut.github.io/)
- Jun Chen
- Bhanu Garg
- Xule Zhou
- John Lu
- [Chihyo Ahn](https://upcp.ece.gatech.edu/2021/09/01/chihyo-ahn/)
- Haotian Sheng
- Blaise Tine
- [Hyesoon Kim](https://faculty.cc.gatech.edu/~hyesoon/)