认识CUDA

CUDA是?

  • 是适用于NVIDIA GPU的通用目的GPU(GPGPU)并行编程平台
  • 安装?:CUDA Toolkit 12.0 Update 1 Downloads | NVIDIA Developer
  • 用什么编译器?:实际上是NVIDIA自己的nvcc
    • CUDA语言是C++的超集,因此可以和C++混编
    • nvcc会将非CUDA部分的代码送给其他编译器(如MSVC或clang)编译,自己编译CUDA部分代码
  • CMake、Visual Studio均支持CUDA项目
  • 开发环境:Visual Studio + CUDA Toolkit最常见

基本结构

  • 一般含有CUDA代码的源码文件,扩展名改为.cu
  • 头文件:#include <cuda_runtime.h>
  • 入口点
    • 程序入口点依然是C++中的int main()函数
    • 程序不会在入口点就在GPU上执行,而是依然在CPU上执行

关键字

  • CUDA通过特殊定义的关键字标识代码在CPU上执行,还是在GPU上执行
  • 修饰函数的关键字,用法:__global__ void func() {}
  • __device__:由GPU调用,在GPU上执行
  • __global__:由CPU调用,在GPU上执行
  • __host__:由CPU调用,在CPU上执行
  • 示例程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstdio>
// 引入CUDA环境的头文件
#include <cuda_runtime.h>

// CPU调用,但在GPU上执行
__global__ void hello()
{
printf("Hello World!");
}

int main(const int argc, const char* argv[])
{
// 执行函数hello()
hello<<<1, 1>>>();
// 等待hello()全部执行完成
cudaDeviceSynchronize();
return 0;
}
评论