今天开始做一个cuda教程。由于本人主要在windows下使用visual studio进行开发,因此这里讲一下windows下的cuda开发环境。
下载cuda_toolkit
从网站https://developer.nvidia.com/cuda-toolkit中下载,先选择Download Now,然后跳转到如下页面:
选择合适的平台和安装方式。我选择的是下载离线的安装包(exe文件),另外我安装的是12.9版本。
下载完成后,双击exe开始进行安装,按照它给出的默认设置就行,但是要记住安装路径(默认似乎是安装在C:\Program Files中)。
安装完成后重启电脑(使安装过程中自动添加的环境变量生效)。
配置开发环境
由于CMake是一种非常流行的项目构建方式,且非常好用,因此本文及此专栏中的所有文章都用CMake进行构建。
新建一个文件夹,里面新建四个文件:
- main.cpp
- kernal.cu
- kernal.h
- CMakeLists.txt
然后再建立一个build文件夹,如图所示:
图中.clang-format是用来控制代码格式的,.editorconfig是用来设置编码方式的。这两个文件现在都可以忽略。
main.cpp中代码如下:
cpp
#include "kernal.h"
int main() { test(); }
kernal.cu中代码如下:
cpp
#include <cuda_runtime.h>
#include <stdio.h>
#include <device_launch_parameters.h>
#include "kernal.h"
__global__ void checkIndex(void)
{
printf("threadIdx:(%d, %d, %d) blockIdx:(%d, %d, %d) blockDim:(%d, %d, %d) "
"gridDim:(%d, %d, %d)\n",
threadIdx.x, threadIdx.y, threadIdx.z, blockIdx.x, blockIdx.y, blockIdx.z, blockDim.x, blockDim.y, blockDim.z, gridDim.x, gridDim.y,
gridDim.z);
}
void test()
{
int nElem = 6;
dim3 block(3);
dim3 grid((nElem + block.x - 1) / block.x);
printf("grid.x %d grid.y %d grid.z %d\n", grid.x, grid.y, grid.z);
printf("block.x %d block.y %d block.z %d\n", block.x, block.y, block.z);
checkIndex<<<grid, block>>>();
cudaDeviceReset();
return ;
}
注意,上述代码中的checkIndex<<<grid, block>>>();在Visual Studio对其进行语法检查的时候会提示错误,如图:
这是Visual Studio的bug,不用管,不影响运行。
kernal.h中代码如下:
cpp
void test();
CMakeLists.txt中代码如下
CMake
##要求最低cmake程序版本
cmake_minimum_required(VERSION 3.20)
#本工程的名字
project(CUDAARTICLEPROJECT CUDA CXX)
# 设置 CUDA 架构
set(CMAKE_CUDA_ARCHITECTURES 89)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置 CUDA 标准
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
file(GLOB SRC_CPP ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB SRC_CUDA ${CMAKE_CURRENT_SOURCE_DIR}/*.cu)
file(GLOB SRC_H ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
# 添加可执行文件
add_executable(${PROJECT_NAME} ${SRC_CPP} ${SRC_CUDA} ${SRC_H})
# 添加 CUDA 头文件路径
target_include_directories(${PROJECT_NAME} PRIVATE
"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/include"
)
target_include_directories(${PROJECT_NAME} PRIVATE
"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/lib/x64"
)
# 设置 CUDA 分离编译
set_target_properties(${PROJECT_NAME} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
)
这个文件比较重要,它决定了整个环境的配置。
其中,set(CMAKE_CUDA_ARCHITECTURES 89)
要根据自己的显卡架构来设置。我的是4060ti,设置为89。不同显卡对应的数字不同,可以在https://developer.nvidia.com/cuda-gpus中进行查询,4060ti对应的是8.9,所以这里设置为89.
cpp
target_include_directories(${PROJECT_NAME} PRIVATE
"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/include"
)
target_include_directories(${PROJECT_NAME} PRIVATE
"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.9/lib/x64"
)
这段代码要根据自己的实际安装路径来设置。
随后进入build文件夹,在终端中打开这个文件夹,运行cmake ..
命令。如下图所示:
出现红框中的提示表示构建成功。然后在build文件夹中打开sln文件(默认已安装Visual Studio)。在解决方案资源管理器中右键ALL_BUILD, 生成。随后右键项目名CUDAARTICLEPROJECT,生成。都成功后点击本地Windows调试器运行代码,如果终端打印出如下结果:
表明cuda安装和环境配置都没问题,可以愉快地开始cuda开发之旅了!!!