3 GPU硬件架构
3.2 Kernel的硬件映射
- Kernel函数
- CPU端调用时用<<< >>>配置
- 相应线程(块)维度、
- 共享存储容量
- CUDA流等信息
- Kernel函数增加了以下概念
- grid(线程格)、 block(线程块)、 thread(线程)。
- 大量的 thread组成一个block,
- 大量的 block组成一个grid(图5.1)
- 执行 kernel函数时,
- 一个 kernel函数对应一个grid(Fermi架构开始,一个GPU支持同时多个kernel函数执行),
- grid内block数量和 block内 thread数量在 kernel函数启动时在<<<>>>内指定
- Tesla K20c GPU
- threads尺寸维度(1024,1024,64),
- 每个block最多1024thread
- blocks(bx,by,bz)尺寸维度(2147483647,65535,65535)。
- 线程设计原则:
- block中的 thread数量合适(一般256、512、1024),使占用率最大化(占用率计算工具在CUDA安装目录的 tools文件夹下,CUDA_ Occupancy_ Calculator.xls)
- block数量越大越好(GPU中block切换开销极小,几乎可忽略)
3.3GPU存储体系
- GPU存储体系是影响GPU程序性能的最重要的因素之一。
- GPU设计了鲜明的层次式存储,
- 用好层次式存储是进行性能优化的关键。
- GPU存储结构如图3.16