最近在GPU编译器测试方面遇到一些瓶颈,准备学习下cuda 相关的基础知识。
warp/sm/index/grid等。
GPU最重要的一点是可以并行的实现数据处理。
这一点在数据量大、运算复杂度不高的条件下极为适用。可以简单地把一块GPU想象成一个超多核的CPU运算部件。这些CPU有自己的寄存器,还有供数据交换用的共享内存、缓存,同时周围还有取指部件和相应的调度机制,保证指令能够在之上执行。
这里有一张典型的CPU和GPU的对比图片,CPU和GPU就呈现出非常不同的架构
GPU:数量众多的计算单元和超长的流水线,只有简单的控制逻辑并省去了Cache
CPU:被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路。
这个比喻就很恰当:
GPU的工作大部分就是这样,计算量大,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样