跳转至

CUDA 程序基本结构

GPU 只是设备,控制权仍然在主机的 CPU 手里。

通常的程序:

int main(){
    // cudaMalloc 分配主机和设备内存

    // do some work at host

    // cudaMemcpy(...) 从主机到设备

    // kernel function call ...
    my_kernel_function<<<1, 2>>>();

    // cudaMemcpy(...) 从设备到主机

    // cudaFree(...) 释放设备内存


    // host code ...

    return 0;
}

Kernel Function

核函数的定义:

__global__ void my_kernel_function(){
    // do something
}

核函数的调用:

my_kernel_function<<<2 , 4>>> ();

Note

第一个参数是 Block 数量,称为 grid size;第二个参数是 Thread in Block 的数量,称为 block size。

第一个参数最大是 \(2^{31} - 1\) ,第二个参数最大是 \(1024\)

builtin 的变量:

  • gridDim.x 是第一个参数(网格)的大小;blockIdx.x 是第一个参数(线程块)的 Id
  • blockDim.x 是第二个参数(线程块)的大小;threadIdx.x 是第二个参数(线程块)的 Id