2010-05-19 52 views
6

首先:我清楚地知道,OpenCL的不會奇蹟般地使一切更快什麼樣的工作典型應用該類超支的由OpenCL的

  • 我深知,OpenCL的有侷限性

所以現在我的問題,我習慣使用編程做不同的科學計算。我所使用的一些東西在計算的複雜性和數量方面非常強烈。所以我想知道,也許我可以使用OpenCL加快bu的速度。

所以,我很樂意從你們聽到的是答案,下面的一些[獎金鍊接]的:

*什麼樣的計算/算法/一般問題適用於OpenCL的

*通過遷移到OpenCL來確定某些特定代碼是否會受益的一般準則是什麼?

問候

回答

9

我認爲這是一個很好的問題,這也是我正在努力爲自己的研究工作。

目前,GPU可以執行的操作有很大的侷限性,因爲它們需要單獨的線程在不同的數據集上執行完全相同的代碼,即問題/算法必須是「數據並行」。顯然數據並行問題包括蒙特卡羅模擬(其中許多MC模擬並行執行),圖像處理以及不太明顯的分子動力學模擬。數值積分(Monte Carlo或其他)是另一種可以輕鬆移植到GPU上運行的科學應用程序。

另一個主要限制是每個線程的內存非常有限,因此要在GPU上高效執行,該算法必須具有較高的算術強度。算法在GPU上運行的候選者的一個必要但不充分的條件是,在CPU上,該算法必須強烈受CPU約束而不受內存限制。

我的觀點是,隨着時間的推移,越來越多的問題會變得越來越嚴重,只有這樣才能解決這個問題,只是因爲要獲得如此大的性能增益,但低懸的果實卻是明顯的數據並行問題。在我看來,大規模多核編程在未來十年將在科學界日益重要和普遍。

我已經玩了一下,並設法將回溯問題轉化爲在GPU上執行的適當格式(使用CUDA)。僅供參考,我在談話中對此進行了描述:http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf

3

它非常適合於可表示爲一個有點小程序並行過簡單的數據結構的大塊的工作任務。

如果要計算兩個圖像之間的差異,OpenCL是爲你準備的。如果你想對一個場景進行光線追蹤,這有點困難但仍然可行。如果您已經回答了大量的Web服務請求,OpenCL並不是解決方案。

2

就算法而言,它們必須是數據並行的。這是一組數據不應該依賴於以前的設置。爲了進行類比,考慮插入排序,其中一個元素與其他元素進行比較以找到正確的位置。這是「不」數據並行,因爲每一步都需要訪問N-1個元素。現在,如果你需要使用OpenCL的排序,你將不得不實行雙調排序是一種類型的排序網絡。

即使它們是數據並行,FLOPS和內存延遲之間也存在權衡的問題。如果每一個數據必須從全局存儲器中取出,然後將性能改善可能並不顯著。 GPU的內存延遲遠高於CPU。爲了解決這個問題,GPU中可以使用本地存儲器。