CUDA编程笔记002. Hello CUDA
使用CMake开发第一个CUDA工程hello-cuda。
源代码目录如下:
$ tree hello-cuda/ . ├── CMakeLists.txt └── hello_cuda.cu
|
1、编写CMakeList.txt
cmake_minimum_required(VERSION 3.14)
project(hello-cuda CXX CUDA)
add_executable(hello_cuda hello_cuda.cu)
|
2、编写hello_cuda.cu
#include <stdio.h>
__global__ void helloFromGPU(void) { printf("Hello World from GPU!\n"); }
int main(void) { printf("Hello World from CPU!\n");
helloFromGPU <<<1, 5>>>(); cudaDeviceReset(); return 0; }
|
3、编译cuda程序
cmake -S . -B build/ cd build make
|
提示:
如果cmake报错:No CMAKE_CUDA_COMPILER could be found
,可配置环境变量
CUDACXX=/usr/local/cuda-12.2/bin/nvcc
,再执行cmake即可。
4、执行cuda程序
$ ./hello_cuda Hello World from CPU! Hello World from GPU! Hello World from GPU! Hello World from GPU! Hello World from GPU! Hello World from GPU!
|
输出CPU打印1个,GPU打印5个。
5、编译细节
通过make clean; make VERBOSE=1
可以看到具体的编译器命令参数:
[ 50%] Building CUDA object CMakeFiles/hello_cuda.dir/hello_cuda.cu.o /usr/local/cuda-12.2/bin/nvcc -forward-unknown-to-host-compiler -MD -MT CMakeFiles/hello_cuda.dir/hello_cuda.cu.o -MF CMakeFiles/hello_cuda.dir/hello_cuda.cu.o.d -x cu -c /home/zgd/code/CppKit/src/cuda/hello_cuda.cu -o CMakeFiles/hello_cuda.dir/hello_cuda.cu.o [100%] Linking CUDA executable hello_cuda /usr/bin/cmake -E cmake_link_script CMakeFiles/hello_cuda.dir/link.txt --verbose=1 /usr/bin/g++ CMakeFiles/hello_cuda.dir/hello_cuda.cu.o -o hello_cuda -lcudadevrt -lcudart_static -lrt -lpthread -ldl -L"/usr/local/cuda-12.2/targets/x86_64-linux/lib/stubs" -L"/usr/local/cuda-12.2/targets/x86_64-linux/lib"
|
可以看到,CMake cuda程序的编译流程:
- 首先,使用nvcc将hello_cuda.cu编译成hello_cuda.cu.o;
- 然后,使用g++将hello_cuda.cu.o和cuda库cudart_static、cudadevrt链接成可执行文件hello_cuda。
以上便是cuda的第一个入门实例。