今天開始做一個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中代碼如下:
#include "kernal.h"
int main() { test(); }
kernal.cu中代碼如下:
#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中代碼如下:
void test();
CMakeLists.txt中代碼如下
##要求最低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.
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開發之旅了!!!