2008-09-10 26 views

回答

29

我一直在做與ATI's stream SDK而不是Cuda的GPGPU的發展。 什麼樣的性能增益,你會得到取決於很多因素,但最重要的是數字強度。 (即,計算操作與內存引用的比率)。

BLAS級別1或BLAS級別2函數(如添加兩個向量)僅對每3個內存引用執行1次數學運算,因此NI爲(1/3)。這總是運行比CAL或Cuda運行速度慢,而不僅僅是在CPU上運行。主要原因是將數據從CPU轉移到GPU並返回所需的時間。對於像FFT這樣的函數,有O(N log N)計算和O(N)內存引用,所以NI是O(log N)。如果N很大,比如說1,000,000,那麼在GPU上執行它可能會更快;如果N很小,比如說1000,它肯定會變慢。

對於像矩陣的LU分解或找到其特徵值的BLAS級別3或LAPACK函數,有O(N^3)個計算和O(N^2)個內存引用,所以NI是O( N)。對於非常小的數組,如果N是幾個分數,那麼在CPU上執行操作仍然會更快,但是隨着N的增加,該算法非常快地從內存綁定到計算綁定,並且gpu上的性能提高非常快很快。

涉及複雜的arithemetic的任何事情都比標量算法計算更多,它通常使NI增加一倍,並提高GPU性能。

http://home.earthlink.net/~mtie/CGEMM%20081121.gif

這裏是CGEMM的性能 - 在4870的Radeon

+0

使用ATI優於CUDA進行浮點運算有什麼優勢?我認爲CUDA更好。 – 2011-08-24 11:58:30

7

我已經使用GPGPU用於運動檢測(原文使用CG和現在CUDA)和穩定化(使用CUDA)與圖像處理。 我在這些情況下獲得了10-20倍的加速比。

從我讀過的,這是數據並行算法的相當典型。

12

我已經寫瑣碎的應用程序,它確實幫助,如果你能parallize浮點計算。 http://courses.ece.illinois.edu/ece498/al/Archive/Spring2007/Syllabus.html(包括所有講座的錄音):

我由伊利諾伊大學香檳分校教授和NVIDIA的工程師,當我起步非常有用發現以下課程cotaught。

+0

偉大的鏈接 - 謝謝。 – 2008-09-27 12:41:01

+1

絕對是一個非常好的鏈接,但它似乎被打破。改用http://courses.ece.illinois.edu/ece498/al/Archive/Spring2007/Syllabus.html。 – 2009-05-21 23:30:52

+1

該鏈接似乎已過期 – ccook 2009-12-09 13:17:35

2

雖然我沒有與任何CUDA實踐經驗呢,我一直在研究這一課題,並發現了一些文件,其使用GPGPU的API(它們都包括CUDA)陽性結果的論文。

這個paper描述瞭如何通過創建大量並行基元(地圖,分散,聚集等),可以將數據庫連接並置爲一個有效的算法。

在這種paper,AES加密標準的並行實現與可比速度創建慎重加密的硬件。

最後,這paper分析了CUDA如何適用於許多應用程序,如結構化和非結構化網格,組合邏輯,動態編程和數據挖掘。

2

我已經在CUDA中實現了蒙特卡洛計算,以便進行一些財務用途。經過優化的CUDA代碼比「可以嘗試更難但不是真正的」多線程CPU實現的速度快大約500倍。 (在這裏比較GeForce 8800GT和Q6600)。然而,蒙特卡洛問題雖然同樣令人尷尬,但我們都知道。

由於G8x和G9x芯片對IEEE單精度浮點數的限制,遇到的主要問題包括精度損失。隨着GT200芯片的發佈,這可以通過使用雙精度單元在某種程度上得到緩解,代價是性能。我還沒有嘗試過。

此外,由於CUDA是C擴展,所以將其集成到另一個應用程序中可能並不重要。

+0

我認爲整合並不困難。畢竟,通過一個簡單的'extern'C'',它只是標準的C風格的鏈接。大多數事情都應該能夠解決這個問題。與Qt應用程序相關的快速測試運行時間<20分鐘。 (無論如何,獲得SDK安裝和樣品編譯後)如果你是託管代碼的意義...以及...恕我直言,方形掛鉤圓孔。 – darron 2009-06-29 16:15:24

10

我已經使用CUDA幾個圖像處理算法完成複雜的單精度矩陣的矩陣乘法。當然,這些應用程序非常適合CUDA(或任何GPU處理範例)。

  1. 初始移植:

    IMO,有移植的算法時CUDA三個典型階段即使CUDA的一個非常基本的知識,你可以在幾個小時內口簡單的算法。如果你幸運的話,你的表現會得到2到10的因子。

  2. 平凡的優化:這包括使用紋理輸入數據和填充多維數組。如果你有經驗,這可以在一天內完成,並可能會給你另一個10的因素。生成的代碼仍然可讀。
  3. 核心優化:這包括將數據複製到共享內存以避免全局內存延遲,將代碼從裏面翻出來以減少使用的寄存器數量等。您可以花費幾個星期的時間完成此步驟,但性能增益爲在大多數情況下並不值得。完成這一步之後,您的代碼會變得模糊不清,以至於沒人理解(包括您)。

這與優化CPU代碼非常相似。但是,GPU對性能優化的響應甚至比CPU更難以預測。

0

是的。我已經使用CUDA API實施了Nonlinear Anisotropic Diffusion Filter

這很容易,因爲它是一個過濾器,必須在給定輸入圖像的情況下並行運行。我沒有遇到過很多困難,因爲它只需要一個簡單的內核。加速時間大約是300x。這是我在CS上的最後一個項目。該項目可以找到here(它是用葡萄牙語寫的)。

我也試過編寫Mumford&Shah分割算法,但這是一個很痛苦的寫法,因爲CUDA還處於初始階段,所以發生了很多奇怪的事情。我甚至在代碼O_O中增加了一個if (false){},從而提高了性能。

該分割算法的結果不好。與CPU方法相比,我的性能損失是20倍(但是,由於它是一個CPU,所以可以採用不同的方法來獲得相同的結果)。這仍然是一項正在進行的工作,但不幸的是我離開了我正在研究的實驗室,所以也許有一天我可能會完成它。

1

我在GPU上實現了遺傳算法,得到了7左右的加速。如其他人指出的,更高的數字強度可能帶來更多收益。所以是的,如果應用程序是正確的,那麼收益是存在的

1

我已經實現了Cholesky因式分解法,用於在使用ATI Stream SDK的GPU上求解大線性方程。我的觀察是

alt text

了性能加速高達10倍。

通過將其擴展到多個GPU來處理同樣的問題以優化它。

1

我寫了一個複數值矩陣乘法內核,該函數在我使用的應用程序中擊敗了cuBLAS實現約30%,並且這種向量外積函數的運行速度比乘法跟蹤解決方案高几個數量級爲其餘的問題。

這是最後一年的項目。我花了整整一年。

http://www.maths.tcd.ie/~oconbhup/Maths_Project.pdf