CUDA编程02 HelloWorld

一、主机和设备

1. 主机(Host)

CPU以及系统的内存称为主机

2.设备(Device)

GPU以及其内存称为设备

3.核函数(Kernel)

在GPU上运行的函数

4.标识符

  • __ global __命名的函数可以由主机(Host)调用在GPU(Device)上运行的函数
  • device 只能由GPU(Device)上的函数调用的函数
  • host 在主机上运行的函数

二、HelloWorld代码

#include<iostream>
__global__ void kernel(void) {
    
}

int main() {
    kernel<<<1,1>>>();
    printf("HelloWorld!");
    return 0;
}

在上面的代码中我们看到在主机中调用kernel使用三个尖括号里面的中的数字指的向内核中传递的执行参数,执行参数一共有四个,

  • 第一个表示网格大小(grid)
  • 第二个声明块的大小(block)
  • 第三个声明动态分配的共享存储器大小,默认为0
  • 最后一个参数声明执行的流,默认为0。

三、加法运算(展示如何传递参数)

#include<iostream>

__global__ kernel(int a, int b, int *c) {
    *c = a + b;
}

int main() {
    int c;
    int *dev_c;
    cudaMalloc((void**)&dev_c, sizeof(int));
    add<<<1,1>>>(7,2,dev_c);
    cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);
    printf("7 + 2 = %d\n", c);
    return 0;
}

当设备执行任何有用的操作(需要对数据记录)的时候都需要分配内存,例如计算值的返回。

给数据分配内存类似于c的malloc这里使用的关键字是cudaMalloc

  • 第一个参数是一个指针,指向用于保存新分配的内存地址的变量
  • 第二个参数需要分配的内存空间大小

cudaMemcpyDeviceToHost相当于一个标识,标识数据流动的方向。

最后修改:2021 年 08 月 06 日
如果觉得我的文章对你有用,请随意赞赏