2012-09-17 74 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