关于CPU的GPU性能

时间:2012-09-17 13:43:52

标签: gpu electronics

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

2 个答案:

答案 0 :(得分:3)

不确定您要找的是什么。假设它是为了一般理解为什么这样做而不是其他方式。本文提供了对您的问题的合理理解(以外行人的话说):

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

简而言之:

  

CPU内核每个时钟可以执行4个32位指令(使用   128位SSE指令)或8通过AVX(256位),而像GPU一样   Radeon HD 5970每个时钟可以执行3200个32位指令   (使用其3200 ALU或着色器)。这相差800(或400   在AVX的情况下)每个时钟更多的指令。截至2011年,   最快的CPU具有高达6,8或12个核心,并且稍微高一些   频率时钟(2000-3000 MHz与Radeon HD 5970的725 MHz相比),   但是一个HD5970仍然比四个12核快五倍   CPU为2.3GHz(也可以让你回到4700美元而不是   HD5970售价350美元。

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

答案 1 :(得分:1)

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

我已经在Fung's paper中添加了一个有用的图片,该图片在上述参考资料中公开提供,以显示性能实际上如何下降:enter image description here

图(a)显示了warp中发生的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-Body仿真,很好地映射到GPU并返回非常高的性能。这是因为他们很好地占据了SIMD通道,遵循流媒体模型,并且有一些内存访问。