最简单的cuda程序
需要注意的是,最简单的cuda代码中也使用了一些通用模式:
- ·调用cudaMalloc()在设备上为三个数组分配内存:在其中两个数组(dev_a和dev_b)中包含了输入值,而在数组dev_c中包含了计算结果。·
- 为了避免内存泄露,在使用完GPU内存后通过cudaFree(O释放它们。·
- 通过cudaMemcpy()将输人数据复制到设备中,同时指定参数cudaMemcpyHostToDevice,在计算完成后,将计算结果通过参数cudaMemcpyDeviceToHost复制回主机。·
- 通过尖括号语法,在主机代码main()中执行add()中的设备代码。
1 #include "cuda_runtime.h" 2 #include "device_launch_parameters.h" 3 4 #include <stdio.h> 5 #include "book.h" 6 7 __global__ void addKernel(const int a, const int b, int *c) 8 { 9 *c = a + b; 10 } 11 12 void testSaclarAdd() { 13 int c; 14 int* dev_c; 15 HANDLE_ERROR(cudaMalloc((void**)&dev_c, sizeof(int))); 16 addKernel << <1, 1 >> > (2, 7, dev_c); 17 HANDLE_ERROR(cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost)); 18 printf("2+7=%d\n", c); 19 cudaFree(dev_c); 20 } 21 22 int main(){ 23 testScalarAdd(); 24 return 0; 25 }
这个最简单的cuda代码实现了整数相加,包括4个步骤
(1)在device上开辟内存空间
(2)调用kernel函数
(3)把计算结果传回host
(4)释放device上的内存