在摩尔定律尚成立的时代,出现晚的处理器正应该对应更高的FLOPS(原因是更高的运算电路密度 更高的时钟频率和更多的处理器内核)。
九十年代末GPU出现伊始,其浮点运算性能和当时的CPU差别并不大,之后的将近十年,CPU处理器的发展遇到了瓶颈(电路密度由于制造工艺而无法大幅优化 时钟频率由于高功耗也无法进一步提升 多核由于其他方面的消耗 并未使运算效率线形提升),摩尔定律逐渐开始失效,然而计算机图形学这个应用领域却非常适合单指令多数据/线程(SIMD/SIMT)的并行化。因此,GPU在图形及通用并行计算方面都取得了飞速的发展。
相对于传统CPU中单处理器支持单个硬件线程的架构,基于众核架构的GPU采用一个处理器支持多个硬件线程的做法,这方面的介绍在Berkeley和Stanford的有关并行计算的课程上都有讲到(http://www.cs.berkeley.edu/~demmel/cs267_Spr11/ http://code.google.com/p/stanford-cs193g-sp2010/wiki/ClassSchedule)。
NVIDIA自2007年开始推出CUDA至今,已经发展出了一套完整的二级并行架构。其中一簇执行同样指令的线程组成一个kernel,kernel又组合成一个block,在block级别有共享内存和其他的供线程间通信合作的机制。形象地说,这里的线程就是一个虚拟的向量处理器,其中包括自己的寄存器,程序计数器(PC)等,而一个block就是一个虚拟的多核处理器,其中包含多个线程和共享内存等。
造成GPU和CPU根本差别的原因在于不同的目标需求:GPU假设运行其上的工作都是高度可并行的,而CPU需要同时很好的支持并行和顺序操作。于是,CPU需要大的片上缓存和复杂的控制逻辑,GPU则利用多线程并行运行节省了片上的大缓存,同时针对一簇线程执行同一套控制逻辑。
因此,在高度并行化且数据规模巨大的应用下,GPU可以获得很高的浮点运算性能,然而如果问题无法良好映射到某个合适的并行模型或当数据规模较小时,SIMT就无法发挥并行的优势,CPU与GPU之间的数据交换也会大大降低运算效率。不过,后一个问题在刚刚发布的CUDA4.0中已经通过GPUDirect2.0得到了改进)。
— 完 —
本文作者:王洋子豪
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 10 个回答,查看全部。
延伸阅读:
为什么 CPU 的浮点运算能力比 GPU 差,为什么不提高 CPU 的浮点运算能力?
CPU浮点运算与整点运算分别决定其什么方面性能?