cuda学习1——Udacity
来源
https://classroom.udacity.com/courses/cs344/lessons/55120467/concepts/670743010923
CPU与GPU
异构型计算机(termed heterogeneous)有两种:根据不同的处理器区分——CPU与GPU。cuda编程模型允许我们在GPU上运行。程序运行在CPU的部分成为host,在GPU的部分则是的device,并且还假设host和device有各自分开的内存。在CPU与GPU的关系中,前者占据着重要的位置,它告诉GPU应该做什么
流程:
- 从CPU拷贝数据到GPU
- 从GPU拷贝数据到CPU
这两部就是cudaMemcpy
- 分配GPU内存:cudaMalloc
- 在GPU上启动内核
cuda程序例子
1 |
|
设置kernel启动
以这个为例:
1 | square<<<1, ARRAY_SIZE>>>(d_out, d_in); |
我们使用了这些启动参数1, ARRAY_SIZE,并以这些自变量d_out, d_in来启动它。
在这里我们启动了64个线程,即1个带有64个线程的块。对于kernel而言:
- 能够同时运行多个块;
- 每个块带有多个线程;较新的GPU可以支持1024个线程,不要超过1024.
threadIdx这个结构中,x, y, z分别表示线程在block中不同纬度的索引。
blockDim:block的大小,有多少个线程;
blockIdx:网格中block的索引;
gridDim:网格大小;
总结
- 当我们写一个程序,它看起来是运行在一个线程上;
- 当我们启动程序的时候,我们从CPU代码启动这个内核;
- 在内核中,每个线程都知道自己所在index;