最简单的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上的内存

posted @ 2022-08-20 23:18  Oliver2022  阅读(265)  评论(0编辑  收藏  举报