怎么编写 CUDA 程序
时间: 2024-02-06 18:11:05 浏览: 143
在编写 CUDA 程序之前,你需要安装好 CUDA 工具包,并具备一定的 C/C++ 编程基础。下面是一个简单的 CUDA 程序示例,用于将两个向量相加:
```cuda
#include <stdio.h>
__global__ void add(int *a, int *b, int *c) {
int tid = blockIdx.x; // 获取当前线程的 ID
if (tid < 100)
c[tid] = a[tid] + b[tid];
}
int main() {
int a[100], b[100], c[100];
int *dev_a, *dev_b, *dev_c;
// 在 GPU 上分配内存
cudaMalloc((void **)&dev_a, 100 * sizeof(int));
cudaMalloc((void **)&dev_b, 100 * sizeof(int));
cudaMalloc((void **)&dev_c, 100 * sizeof(int));
// 初始化 a 和 b 数组
for (int i = 0; i < 100; ++i) {
a[i] = i;
b[i] = i * i;
}
// 将 a 和 b 数组拷贝到 GPU 上
cudaMemcpy(dev_a, a, 100 * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(dev_b, b, 100 * sizeof(int), cudaMemcpyHostToDevice);
// 在 GPU 上启动核函数
add<<<100, 1>>>(dev_a, dev_b, dev_c);
// 将结果拷贝回 CPU 上
cudaMemcpy(c, dev_c, 100 * sizeof(int), cudaMemcpyDeviceToHost);
// 打印结果
for (int i = 0; i < 100; ++i) {
printf("%d + %d = %d\n", a[i], b[i], c[i]);
}
// 释放 GPU 内存
cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
return 0;
}
```
这个程序使用了 CUDA 的核函数特性,即在 GPU 上并行执行的函数。在这个程序中,`add` 函数接受三个指针参数,分别表示两个输入向量和一个输出向量。在函数内部,每个线程都会计算一个输出向量的元素。可以使用 `blockIdx.x` 变量来获取当前线程的 ID,然后使用简单的加法操作来计算输出向量的元素值。
在主函数中,首先分配了三个向量在 GPU 上的内存,然后初始化了输入向量的值,并将它们拷贝到 GPU 上。接着,调用 `add` 函数,在 GPU 上启动了 100 个线程进行并行计算。最后,将计算结果从 GPU 拷贝回主机内存,并打印出来。
这只是一个简单的示例程序,实际上,CUDA 可以用于解决更复杂、更大规模的计算问题。如果你对 CUDA 编程感兴趣,可以参考 NVIDIA 官方文档中提供的更多示例和教程。
阅读全文