2012-09-17 78 views

回答

1

GPU中的每个SM都是一个SIMD处理器,在SIMD的每个通道上执行不同的warp线程。一旦应用程序受到更多的计算限制(少量内存访问)并且没有分支应用程序实现GPU的峰值FLOPS。这是因为在分支之后,GPU掩盖了背离的一方,并首先执行另一方。两条路径都是连续执行的,留下一些SIMD通道不活动,从而导致性能下降。

我已经包括从Fung's paper一个有用的图,其是可公开获得的在所提到的参考,以显示性能实际上是如何下降:enter image description here

图(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通道,遵循流模式,并且有一些内存访问。

3

不确定你在找什么。假设这是为了普遍理解为什么要这样做而不是其他方式。本文提供合理理解到您的问题(在外行而言):

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

简而言之:

甲CPU核心可以执行每时钟4的32位指令(使用 128通过AVX(256位)处理8位数据,而像 这样的GPU,Radeon HD 5970可以在每个时钟周期执行3200个32位指令(使用其3200个ALU或着色器)。这是800(或AVX情况下的400 )乘以每个时钟更多指令的差值。截至2011年,最快的CPU拥有多达6,8或12个内核,并且有一个更高的 频率时钟(2000-3000 MHz与Radeon HD 5970的725 MHz), ,但是一个HD5970仍然超过五个比2.3GHz的四个12核 处理器要快(这也将让你回到4700美元左右,而不是HD5970的 350美元)。

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

+0

良好的环节和起点 – Stencil