GPU使用SIMD模型,即同一部分代码将并行执行,并应用于数据集的各个元素。
然而,CPU也使用SIMD,并提供指令级并行性。例如,据我所知,类似SSE的指令将以并行方式处理数据元素。
虽然SIMD范式在GPU和CPU中似乎被不同地使用,但是GPU是否比CPU具有更强的SIMD能力?
CPU的并行计算能力相对于GPU在哪些方面“较弱”?
GPU使用SIMD模型,即同一部分代码将并行执行,并应用于数据集的各个元素。
然而,CPU也使用SIMD,并提供指令级并行性。例如,据我所知,类似SSE的指令将以并行方式处理数据元素。
虽然SIMD范式在GPU和CPU中似乎被不同地使用,但是GPU是否比CPU具有更强的SIMD能力?
CPU的并行计算能力相对于GPU在哪些方面“较弱”?
两种处理器(CPU和GPU)都提供SIMD,其中最常见的概念单位是16字节/128位;例如4个浮点数(x,y,z,w)构成一个向量。
简单地说:
CPU通过将未来指令进行流水线处理来并行化更多操作,从而使它们在程序中更快地执行。下一步是多核心,可以独立运行不同的程序。
另一方面,GPU则通过继续使用SIMD方法并多次执行相同的程序来实现并行化;其中纯粹的SIMD方式是一组程序同时执行(这就是为什么在GPU上分支较差的原因,因为if语句的两个分支都必须执行;并且需要舍弃一个结果,以便锁定步骤程序以相同的速率执行);同时还有单程序,多数据(SPMD),其中一组相同程序的集合可以并行执行,但不一定要按照锁定步骤进行。
GPU的方法非常适用于需要对大量数据应用完全相同处理的情况,例如需要以相同方式转换的一百万个顶点,或者需要处理生成颜色的数百万像素。假设它们不会成为数据块/管道停顿,由于其限制,GPU程序通常提供更可预测的时间绑定执行;这对于时间并行性非常有好处,例如程序需要以某个速率重复其周期,例如每秒60次(16毫秒)以达到60 fps。这个想法类似,大概是这样(非常不正式地说):