安装了适当的GPU驱动程序和CUDA工具包
时间: 2024-05-03 21:22:09 浏览: 65
后,您可以开始使用CUDA编写GPU加速程序。下面是基本的CUDA编程步骤:
1. 在主机上分配内存并初始化数据。
2. 将数据从主机内存复制到设备内存。
3. 在设备上启动内核函数,该函数将在GPU上执行。
4. 在主机上等待内核函数执行完成。
5. 将结果从设备内存复制回主机内存。
以下是一个简单的CUDA程序示例,该程序将两个向量相加:
```
#include <stdio.h>
__global__ void add(int *a, int *b, int *c) {
int i = threadIdx.x;
c[i] = a[i] + b[i];
}
int main(void) {
int a[5] = {1, 2, 3, 4, 5};
int b[5] = {10, 20, 30, 40, 50};
int c[5] = {0, 0, 0, 0, 0};
int *dev_a, *dev_b, *dev_c;
cudaMalloc((void**)&dev_a, 5 * sizeof(int));
cudaMalloc((void**)&dev_b, 5 * sizeof(int));
cudaMalloc((void**)&dev_c, 5 * sizeof(int));
cudaMemcpy(dev_a, a, 5 * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(dev_b, b, 5 * sizeof(int), cudaMemcpyHostToDevice);
add<<<1, 5>>>(dev_a, dev_b, dev_c);
cudaMemcpy(c, dev_c, 5 * sizeof(int), cudaMemcpyDeviceToHost);
printf("{%d, %d, %d, %d, %d}\n", c[0], c[1], c[2], c[3], c[4]);
cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
return 0;
}
```
在此示例中,`add`函数是在GPU上执行的内核函数。`threadIdx.x`变量表示当前线程的索引。`<<<1, 5>>>`表示启动1个块,每个块包含5个线程。`cudaMalloc`和`cudaMemcpy`函数用于分配和复制内存。`cudaFree`函数用于释放设备内存。最后,程序输出两个向量的和。
阅读全文