繁体   English   中英

相对于 CPU 的 GPU 性能

[英]GPU performance with respect to CPU

为什么 GPU 在数值计算方面的性能比 CPU 高? 更糟糕的分支? 有人可以给我一个详细的解释吗?

不知道你在找什么。 假设它是为了一般理解为什么这样做而不是另一种方式。 这篇文章对您的问题提供了合理的理解(用外行的话):

https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU

简而言之:

CPU 内核每个时钟可以执行 4 条 32 位指令(使用 128 位 SSE 指令)或 8 条通过 AVX(256 位),而像 Radeon HD 5970 这样的 GPU 每个时钟可以执行 3200 条 32 位指令(使用它的 3200 个 ALU 或着色器)。 这是每时钟 800(或 AVX 情况下为 400)倍多指令的差异。 截至 2011 年,最快的 CPU 具有多达 6、8 或 12 个内核和更高的频率时钟(2000-3000 MHz 与 Radeon HD 5970 的 725 MHz),但一个 HD5970 仍然比 HD5970 快五倍多四个 2.3GHz 的 12 核 CPU(这也会让您花费大约 4700 美元,而不是 HD5970 的 350 美元)。

GPU 专为特定任务而设计,即渲染需要大量计算的 3D 图形。 因此,某些应用程序将“数字处理”卸载到 GPU,就像大多数现代浏览器一样。 而对于分支功能,任务由 CPU 负责(现在,谁知道他们以后会做什么),因为 CPU 具有更好的“霸主”功能。

GPU 中的每个 SM 都是一个 SIMD 处理器,在 SIMD 的每个通道上执行扭曲的不同线程。 一旦应用程序更受计算限制(一些内存访问)并且没有分支应用程序达到 GPU 的峰值 FLOPS。 这是因为在分支时,GPU 会屏蔽发散的一侧并首先执行另一侧。 两条路径都是串行执行的,因此一些 SIMD 通道处于非活动状态,从而降低了性能。

我在Fung 的论文中包含了一个有用的图,该图可在上述参考文献中公开获取,以显示性能实际上是如何下降的:在此处输入图片说明

图 (a) 显示了一个典型的 GPU 分支发散发生在扭曲内部(本示例中为 4 个线程)。 假设您有以下内核代码:

A:  // some computation
    if(X){
B:      // some computation
        if(Y){
C:          // some computation
        }
        else{
D:          // some computation
        }
E:      // some computation
    }else{
F:      // some computation
    }
G:  // some computation

A 处的线程分为 B 和 F。如 (b) 所示,随着时间的推移,一些 SIMD 通道被禁用,从而降低了性能。 图 (c) 到 (e) 显示了硬件如何串行执行发散路径并管理发散。 有关更多信息,请参阅这篇有用的论文,这是一个很好的起点。

计算受限的应用程序,如矩阵乘法或 N 体模拟,可以很好地映射到 GPU 并返回非常高的性能。 这是因为它们很好地占据了 SIMD 通道,遵循流模型,并且有一些内存访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM