2012-08-12 25 views
5

用框架rootbeer是針對Java編程的GPU可能。哪些Java代碼可以移動到GPU?

哪個Java代碼應該用於Rootbeer,哪些代碼應該更好地在Java VM自身中運行?

或其他:哪些代碼會產生更多的開銷,它沒有任何意義?

+0

你問在GPU上執行什麼樣的算法一般是有意義的? – Bart 2012-08-12 18:13:40

+0

我不知道這是否與你有任何相關性,但暴力強制密碼(密碼學)是一個使用GPU調整這種類型的操作來獲得時間優勢的領域。 – 2012-08-12 18:32:45

+2

我的問題是特定於rootbeer而不是一般的GPU編程。 – Horcrux7 2012-08-12 18:35:15

回答

3

說起來有些愚蠢,但顯而易見的答案是「對於GPU比CPU好的問題」。現代GPU擁有超過一千個內核,但內存相對較少,所以一般來說,這意味着內存不足,而且不會佔用太多內存。

G. Bach在評論中提到了對加密內容的暴力攻擊,這是一個很好的例子。科學模擬是另一個很好的例子,事實上,幾年前一些研究機構(特別是美國航天局)已經開發了一系列Playstation 3的模擬仿真。維基百科有關GPGPU計算的文章lists several applications

1

當前GPU的侷限性之一是它可以將一個簡單的方法加載到每個內核並立即執行。通用CPU可以加載更多的代碼和數據並獨立執行。

有一種矢量樣式代碼可能在GPU上更快,我可以看到它是某一天的選項,但大多數代碼(如果不通過處理能力按體積)將在CPU上。

3

除了其他答案:還有一些Java特性不支持rootbeer jet進行轉換。

  1. 本地方法
  2. 反射
  3. 動態方法調用
  4. 睡眠而顯示器的內部。
  5. 垃圾收集(!)

您應避免使用這些功能的代碼。

Rootbeer的更新正在生產中,以提供垃圾收集和其他缺少的Java功能。

+0

前4分清楚。如果我理解GC的問題,那麼代碼應該只包含靜態方法或單例。這是正確的嗎?不應該經常分配對象,因爲對象不能是垃圾? – Horcrux7 2012-08-13 20:02:56

+0

GC正在加入。在完成之前,您應該回收對象,而不是將引用設置爲'null'並創建一個新對象。或者你使用具有常量或僅增加數量的對象的代碼。 – Simulant 2012-08-29 22:06:17

+0

您可以使用動態內存分配,但沒有垃圾回收。所以如果GPU上的內存不足,OutOfMemoryError會冒泡到CPU。 – pcpratts 2013-04-03 20:59:17

2

要獲得GPU的加速,您希望每個數據元素有很多計算,因爲數據傳輸非常慢。您通常需要2或3個嵌套for循環在GPU上運行,至少有1000個線程。

相關問題