CUDA编程的理论部分可以参考模型部署篇 中的GPU 的 CUDA 编程方法。
虽然CUDA有很多的C代码,这里我们主要以C 为主。一个完整的CUDA程序,需要经历7个步骤
- 设置显卡设备
- 分配显存空间
- 从内存到显存拷贝数据
- 执行CUDA并行函数
- CUDA函数结束后,将结果从显存拷贝回内存
- 释放显存空间
- 设备重置
如果是单GPU的话可以省略1跟7两个步骤。
代码语言:javascript复制#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime_api.h>
#include <iostream>
/* 核函数 */
__global__ void kernelFunc(float *a) {
a[threadIdx.x] = 1;
}
int main(int argc, char **argv) {
//设置显卡设备
cudaSetDevice(0);
//分配显存空间
float *aGpu;
cudaMalloc((void**)&aGpu, 16 * sizeof(float));
//从内存到显存拷贝数据
float a[16] = {0};
cudaMemcpy(aGpu, a, 16 * sizeof(float), cudaMemcpyHostToDevice);
//执行CUDA并行函数
kernelFunc <<<1, 16>> >(aGpu);
//CUDA函数结束后,将结果从显存拷贝回内存
cudaMemcpy(a, aGpu, 16 * sizeof(float), cudaMemcpyDeviceToHost);
for (int i = 0; i < 16; i ) {
printf("%f", a[i]);
}
return 0;
}
CUDA的源码文件以.cu为后缀,编译命令如下(需要先安装CUDA,安装方式可以参考乌班图安装Pytorch、Tensorflow Cuda环境 )
代码语言:javascript复制nvcc main.cu -o main
运行结果
代码语言:javascript复制1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000