首先配置CUDA开发环境,安装支持的NVIDIA显卡及CUDA Toolkit;接着在C++中编写__global__声明的核函数,如向量加法;通过cudaMalloc分配GPU内存,用cudaMemcpy传输数据;最后以语法启动核函数并同步结果。

在C++中调用CUDA进行GPU编程,是实现高性能计算的重要手段。通过将计算密集型任务卸载到GPU上,可以显著提升程序运行效率。整个过程涉及主机(Host)端的C++代码与设备(Device)端的CUDA核函数协同工作。下面介绍基本流程和关键步骤。
配置开发环境
要使用CUDA,首先需要确保系统具备支持CUDA的NVIDIA显卡,并安装对应版本的CUDA Toolkit。开发环境可选择Visual Studio(Windows)或GCC(Linux),并配置好nvcc编译器路径。
项目中需包含CUDA头文件:
#include#include
编译时应使用nvcc处理.cu文件,例如:
立即学习“C++免费学习笔记(深入)”;
nvcc -o myapp main.cu编写CUDA核函数
CUDA核函数是在GPU上执行的函数,使用__global__关键字声明。它由主机端调用,但在设备端执行。
示例:向量加法
__global__ void addVectors(float* a, float* b, float* c, int n) {int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx c[idx] = a[idx] + b[idx];
}
}
这里,每个线程处理一个数组元素。blockIdx.x、blockDim.x 和 threadIdx.x 共同决定当前线程的全局索引。
内存管理与数据传输
GPU有独立内存空间,因此需在主机与设备间显式传输数据。
- cudaMalloc:在GPU上分配内存
- cudaMemcpy:在主机与设备之间复制数据(可设为 cudaMemcpyHostToDevice 或 cudaMemcpyDeviceToHost)
- cudaFree:释放GPU内存
示例代码片段:
float *h_a, *h_b, *h_c; // 主机内存float *d_a, *d_b, *d_c; // 设备内存
size_t size = n * sizeof(float);
h_a = new float[n];
h_b = new float[n];
h_c = new float[n];
cudaMalloc(&d_a, size);
cudaMalloc(&d_b, size);
cudaMalloc(&d_c, size);
cudaMemcpy(d_a, h_a, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, h_b, size, cudaMemcpyHostToDevice);
启动核函数与同步
调用核函数采用特殊的>>语法指定执行配置。
int blockSize = 256;int gridSize = (n + blockSize - 1) / blockSize;
addVectors>>(d_a, d_b, d_c, n);
之后通常调用 cudaDeviceSynchronize() 等待GPU完成计算。
最后将结果从GPU拷回CPU:
cudaMemcpy(h_c, d_c, size, cudaMemcpyDeviceToHost);基本上就这些。掌握内存管理、线程组织和核函数编写后,就能在C++项目中有效集成CUDA,充分发挥GPU的并行计算能力。实际应用中还需注意错误检查(如检查cudaGetLastError())和性能优化(如内存对齐、共享内存使用等)。











