2012-07-29 85 views
8

我試圖在實時3D建模中優化應用程序。應用程序的計算部分幾乎完全在CUDA中的GPU上運行。該應用需要解決小型(6x6)雙精度對稱正定線性系統Ax = b每秒500次以上。目前,這是由一個基於高效CPU的線性代數庫使用Cholesky完成的,但需要將數據從CPU - GPU複製到GPU,每秒重複數百次,並且每次啓動內核開銷等。在GPU上求解小對稱正定Ax = b

我可以計算GPU上線性系統的解決方案,而不必將數據放到CPU上?我已經讀了一些關於MAGMA庫的內容,但它似乎使用混合算法而不是僅使用GPU的算法。

我準備好了這樣一個事實,即GPU上的單個線性系統的解決方案將比現有的基於CPU的庫慢很多,但我想查看是否可以通過移除主機和設備之間的數據通信以及內核啓動的開銷等等每秒數百次。如果沒有GPU,只有類似LAPACK的替代方案,那麼我將如何去實現某些功能來僅在GPU上解決這個特定的6x6情況?例如,如果沒有GPU BLAS庫的大量時間投入,它可以完成嗎?

+0

6x6線性系統非常小,您可以自己在CUDA代碼中編寫公式......顯然,對於這樣一個小型系統,很難從CUDA的並行特性中獲得任何好處,但要擺脫GPU-CPU通信的確會帶來巨大的好處。是否有可能以不同的方式進行並行化?將系統解決在單個GPU內核上,然後使用多個內核實現500+個解決方案。這將是最好的,除非你需要以前的系統的結果開始下一個系統的工作。 – Eiver 2012-07-29 17:35:01

+1

@Eiver在錢上。你能同時做這500個,還是彼此依賴?對於6x6這種方法http://en.wikipedia.org/wiki/Cholesky_decomposition#Block_variant看起來手工編碼... – 2012-07-29 18:12:42

回答

3

去年秋天,NVIDIA在批註的開發者網站上發佈了批量Ax = b解算器的代碼。此代碼適用於通用矩陣,如果您可以將對稱矩陣擴展爲完整矩陣(應該不是6x6的問題),應該可以滿足您的需求。由於代碼執行的是正向矩陣不需要的旋轉操作,因此對於您的情況它不是最優的,但是您可能可以根據您的目的對代碼進行修改,因爲代碼是在BSD許可證下。

NVIDIA的標準開發人員網站目前遇到了一些問題。這裏是你怎麼能在這個時候下載成批求解代碼:

(1)進入http://www.nvidia.com/content/cuda/cuda-toolkit.html

(2)如果你有一個現有的NVdeveloper帳戶(例如,通過partners.nvidia.com)點擊綠色的「登錄到nvdeveloper」鏈接在屏幕的右半部分。否則,點擊「加入nvdeveloper」申請一個新帳戶;通常會在一個工作日內批准新帳戶的申請。

(3)在您的電子郵件地址和密碼的提示登錄

(4)上有名爲「最新下載」右側的部分。頂部的第五項是「批量求解器」。點擊它,它會將您帶到代碼的下載頁面。

(5)點擊「下載」鏈接,然後點擊「接受」接受許可條款。你的下載應該開始。

+0

非常感謝你,從最初看批處理解算器看起來它會做我所知尋找。 – 2012-07-31 14:28:50

+0

我剛纔問了另一個關於線性代數和GPU的問題,你可能知道些什麼! http://stackoverflow.com/questions/11778981/code-library-to-calculate-determinant-of-a-small-6x6-matrix-solely-on-gpu – 2012-08-02 13:58:58