• 使用CMake创建CUDA工程


    依赖工具:

    • CUDA驱动
    • CUDA TOOL KIT
    • cmake
    • Linux:gcc/g++
    • Windows:cl.exe

    hello world代码

    在你的工程目录下创建hello_cuda.cu文件,写入以下CUDA代码,作为该教程的源码:

    #include 
    
    __global__ void add(int *a, int *b, int *c)
    {
        *c = *a + *b;
    }
    
    int main(void)
    {
        int a, b, c;          // host copies of a, b, c
        int *d_a, *d_b, *d_c; // device copies of a, b, c
        int size = sizeof(int);
        // Allocate space for device copies of a, b, c
        cudaMalloc((void **)&d_a, size);
        cudaMalloc((void **)&d_b, size);
        cudaMalloc((void **)&d_c, size);
        // Setup input values
        a = 2;
        b = 7;
        // Copy inputs to device
        cudaMemcpy(d_a, &a, size, cudaMemcpyHostToDevice);
        cudaMemcpy(d_b, &b, size, cudaMemcpyHostToDevice);
        // Launch add() kernel on GPU
        add<<<1, 1>>>(d_a, d_b, d_c);
        // Copy result back to host
        cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost);
        // Cleanup
        cudaFree(d_a);
        cudaFree(d_b);
        cudaFree(d_c);
        printf("The CUDA result c = %d\n", c);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    Linux环境下,创建CMake工程

    1、环境变量配置

    编译CUDA工程时,需要在环境变量中配置CUDA的bin目录(包含nvcc)lib64目录,这样cmake才能找到CUDA相关的可执行文件和库。
    一般情况下CUDA会装在/usr/local/cuda- 目录下,你需要根据自己的情况替换成自己的路径,不要无脑照抄教程。

    1. 方式1:配置到/etc/environment文件,重启后全局全用户可用。如果你用的是自己的机器,或者所在的服务器可以执行重启操作,那么建议你可以这么操作。

      # 在PATH后追加:/usr/local/cuda-/bin
      PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-/bin"
      
      # 在LD_LIBRARY_PATH后追加:/usr/local/cuda-/lib64
      LD_LIBRARY_PATH="/usr/local/cuda-/lib64"
      
      • 1
      • 2
      • 3
      • 4
      • 5

      配置完后需要重启电脑,重新登录后就可用了。

    2. 方式2:配置到~/.bashrc文件,仅当前用户可用。如果你没有sudo权限或无法重启机器,那么建议你可以这么操作。

      # export PATH:/usr/local/cuda-/bin
      export PATH=/usr/local/cuda-/bin:$PATH
      
      # export LD_LIBRARY_PATH:/usr/local/cuda-/lib64
      export LD_LIBRARY_PATH=/usr/local/cuda-/lib64:$LD_LIBRARY_PATH
      
      • 1
      • 2
      • 3
      • 4
      • 5

      配置完后需要source一下,或关闭当前shell窗口重启一个新的shell就可用了。

    按照上述2种方式配置完后,可调用一下nvcc --version的命令看能否找到,如果能找到并输出,证明CUDA的环境变量就配置好了。以下是我的nvcc --version的命令及输出,供参考:

    yanghong@isp-02:~/Projects/hello_cuda$ nvcc --version
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Tue_Mar__8_18:18:20_PST_2022
    Cuda compilation tools, release 11.6, V11.6.124
    Build cuda_11.6.r11.6/compiler.31057947_0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、CMakeLists.txt编写

    在你的工程目录下创建CMakeLists.txt文件,写入以下cmake配置,部分配置自己看注释灵活调整:

    # 设置cmake的最低版本号为3.26
    cmake_minimum_required(VERSION 3.26)
    
    # 设置项目名称,并设置编程语言为CUDA。参考文档:https://cmake.org/cmake/help/latest/command/project.html#options
    project(modules_cuda CUDA)
    
    # 设置项目的C++标准为C++20
    set(CMAKE_CUDA_STANDARD 20)
    
    # 设置可执行程序的名称为hello_cuda, 对应源码文件为hello_cuda.cu
    add_executable(hello_cuda hello_cuda.cu)
    
    # 设置可执行程序的target属性
    set_target_properties(hello_cuda PROPERTIES
            CUDA_SEPARABLE_COMPILATION ON)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3、编译、执行hello_cuda程序

    在命令行中,建立build目录并进入,然后用cmake编译运行即可,具体的命令如下:

    # 如果之前有build目录,可用先删除
    rm -rf ./build
    
    # 创建build目录
    mkdir build
    
    # 进入build目录
    cd build
    
    # cmake生成hello_cuda工程
    cmake ..
    
    # cmake编译hello_cuda工程,生成可执行文件hello_cuda
    make -j 
    
    # 运行可执行文件hello_cuda,观察输出
    ./hello_cuda
    
    # 如执行完毕后无其他操作,可用返回上级目录
    cd -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    预期的./hello_cuda会有如下输出:

    yanghong@isp-02:~/Projects/hello_cuda/build$ ./hello_cuda
    The CUDA result c = 9
    
    • 1
    • 2

    Windows环境下,创建CMake工程

    暂略

  • 相关阅读:
    Vue3封装全局插件
    一文学会设计模式
    matplotlib中关于极坐标轴的控制
    SpringBoot 自定义参数校验(5)
    docker Compose 部署springboot+vue前端端分离项目
    buuctf刷题9 (反序列化逃逸&shtml-SSI远程命令执行&idna与utf-8编码漏洞)
    Git---当本地分支和远程分支都被删除时,如何处理?
    vue学习笔记21-组件传递数据_Props
    FreeRTOS操作系统中,断言输出 Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 原因
    假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件
  • 原文地址:https://blog.csdn.net/YoungHong1992/article/details/134273747