CPU SIMD与GPU SIMD?

时间:2014-12-06 16:33:59

标签: parallel-processing gpu cpu simd

GPU使用SIMD范例,即代码的相同部分将并行执行,并应用于数据集的各种元素。

但是,CPU也使用SIMD,并提供指令级并行。例如,据我所知,类似SSE的指令将处理具有并行性的数据元素。

虽然SIMD范例似乎在GPU和CPU中的使用方式不同,但GPU的SIMD功率是否比CPU更多?

CPU中的并行计算能力以哪种方式比GPU中的“弱”?

由于

2 个答案:

答案 0 :(得分:16)

两个CPU和GPU为SIMD提供最标准的概念单元,即16字节/ 128位;例如4个浮点数的向量(x,y,z,w)。

简化:

然后,CPU通过流水线化未来指令来进行更多并行化,以便它们在程序中更快地进行。然后下一步是运行独立程序的多个核心。

另一方面,GPU通过继续SIMD方法并多次执行相同的程序来并行化;两者都是纯SIMD,其中一组程序在锁定步骤中执行(这就是为什么GPU上的分支错误,因为if语句的两端必须执行;并且一个结果被抛弃,以便锁定步骤程序继续执行率);以及single program, multiple data (SPMD),其中相同程序集的组并行进行,但不一定是锁定步骤。

GPU方法很棒,需要将大量数据应用于完全相同的处理;例如,需要以相同方式转换的百万个顶点,或需要处理以产生其颜色的数百万个像素。假设它们不会导致数据块/流水线停滞,由于其限制,GPU程序通常会提供更可预测的时间限制执行;这对于时间并行性也是有益的,例如程序需要以一定的速率重复循环,例如每秒60次(16ms),60 fps。

然而,CPU方法可以更好地同时决策和执行多个不同的任务,并处理不断变化的输入和请求。

除了许多其他用途和用途之外,CPU还用于协调GPU执行的工作。

答案 1 :(得分:11)

这是一个类似的想法,它有点像这样(非常非正式地说):

  • CPU具有一定数量的可以在打包值上运行的函数。根据您的品牌和CPU版本,您可以访问SSE2,3,4,3dnow等,并且每个都可以访问越来越多的功能。您受限于寄存器大小和使用的较大数据类型,您可以并行使用较少的值。您可以将SIMD指令与传统的x86 / x64指令自由混合和匹配。
  • GPU允许您为纹理的每个像素编写整个管道。纹理大小不依赖于您的管道长度,即您在一个周期中可以影响的值的数量不依赖于您的GPU,并且您可以链接的功能(您的像素着色器)几乎可以是任何东西。虽然你的值的设置和回读速度有点慢,但它是一次性过程(加载值,运行着色器,读取值),除此之外你根本无法按摩它们,所以它实际上需要更加严格使用很多价值值得它。