2011-12-08 83 views
0

我正在撰寫異構計算中可能性的理論分配。 我需要比較在CPU或GPU上以串行方式執行的單個線程(不可並行化)的有效性。串行CPU與GPU代碼

我知道這是一個奇怪的問題,因爲在GPU上執行單個線程沒有意義,但我真的可以使用引導線比率來實現我正在開發的啓發式方法。

我知道它可以很容易地進行測試,但我沒有任何CUDA和OpenCL的實際經驗,而且我很匆忙。

回答

4

GPU執行單元傾向於按順序排列,並且(至少在nVidia GPU中),在單線程環境下,通常每4個時鐘只能獲得一條指令。將其與現代超標量CPU進行比較,您可以在每個時鐘通常可以獲得大於1條指令的吞吐量,並且CPU在每個時鐘的基礎上贏得4倍或更多倍。雖然CPU時鐘頻率往往比GPU時鐘頻率高得多,但從時鐘速度來看,可能會有更多的3倍,相對於GPU,CPU的CPU頻率可能高達12倍或更多。

1

NVidia Tesla GPU以4ops /時鐘執行一些操作。
GPU上的內存帶寬通常比CPU < - >主RAM更快,並且對於2D結構有一些聰明的緩存功能。

但一般沒有 - 如果你不需要做同樣的事情> 256項使用CPU

2

單GPU核心比CPU的弱幅度,加上有數據傳輸的開銷。 GPU贏得並行代碼的原因是同時在100個內核上運行的線程數量龐大。考慮這個例子:

for(int i=0; i<1000; i++) 
    a[i]= /*some value*/ 

如果你只使用1個線程,它必須迭代1000次。 CPU肯定會比GPU更快,更快。但是爲了從GPU中受益,我們創建了1000個線程,每個線程將值插入到相應位置的內存「a」中。這可能會導致性能增益超過CPU。

1

您還應該考慮GPU工作的時鐘頻率(1-2 GHz),與CPU的相比非常低。當代碼不平行時,GPU的性能實際上不是一種選擇。