Hello, CUDA

一、 硬件架构分析(Ampere)

1. 架构总览

架构图

我们先从架构总览里知道有几个核心概念:

  • GPCGraphics Processing Cluster
  • TPCTexture Processing Cluster
  • SM(Streaming Multiprocessor)
  • Warp Scheduler
  • CUDA Core/Tensor Core
  • RT Core

二、 CUDA编程模型

三、hello world代码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
*hello_world.cu
*/

#include<stdio.h>

__global__ void hello_world(void)
{
printf("GPU: Hello world!\n");
}

int main(int argc,char **argv)
{
printf("CPU: Hello world!\n");
hello_world<<<1,10>>>();
cudaDeviceReset(); // if no this line ,it can not output hello world from gpu
return 0;
}

我们先解析一下代码,相比较纯C++代码,有三个陌生的点:

  • __global__ ; 他的告诉编译器这个是个可以在设备上执行的核函数
  • hello_world<<<1, 10>>>: 他的作用是,告诉编译器,我的这个计算任务是由1个grip和10个block组成。
  • cudaDeviceReset : 这句话告诉cpu侧,即host侧,你得等等GPU跑完你再往下。