笔记
最近开始自己写些东西, 感觉很多基础概念还是很模糊, 找到了一个比较近的tutorial, 感觉更清晰一些.
|
调用位置 |
执行位置 |
__device__ |
device |
device |
__global__ |
host & device |
device |
__host__ |
host |
host |
Software |
GPU |
|
Thread |
CUDA core |
线程由CUDA core执行 |
Block |
SM |
Block在SM上执行, Block线程属于同一个SM, Block中线程可协作 |
Grid |
Device |
Grid中的Block可以在多个SM中执行 |
- 为什么要设置层次结构? A: 便于管理, 扩展, 协作.
- 执行流程:
- 将Grid分配到Device
- 根据
<<<..>>>
第一个参数, 将Block分配到SM
- 根据
<<<..>>>
第二个参数, Warp调度器启用线程(32一组, 每个Warp分配到32个core)
- 资源和通信:
- Grid: 共享Kernel和Context
- Block: 同一个SM, 同一个Shared Memory
- Threads/Warp: 允许Threads之间共享一些变量
- 如何设置Gridsize & Blocksize?
- cover所需的线程数N, 性能最优需要通过实验试错
- 同时需要注意不超过block/grid上限, 一般block上限是1024, gird上限很大
- 数据过大线程不够用怎么办? A: Grid Loop.
Comments