2017-04-25 215 views
0

我目前正在開發一個項目,其中涉及使用BigInteger進行大量安靜計算。但顯然我的應用程序非常慢。Java使用GPU與BigInteger進行計算

我不知道GPU的分配情況,但我聽說他們可以用來計算更大的數字,速度更快。所以我想知道是否有辦法將「大量計算」給予GPU並以這種方式加快我的應用程序。

+0

說實話,這不是一個簡單的話題,Java也許不是你需要的語言。嘗試考慮C/C++,否則使用JNI。 – Enzokie

+2

這實在不像說「我需要計算大數字,我會使用GPU」那麼簡單。這非常複雜,目前聽起來超出你的範圍。我懷疑你還沒有接近完成你對代碼的所有優化。你有沒有分析或測量任何東西? – Michael

+0

@Michael是的,我剛剛意識到它比我預期的更復雜^^。我很確定我可以優化代碼方面的配置,尤其是當我在運行程序時查看CPU使用率(僅使用一個內核)我認爲它也可能受內存速度的影響(由於真的很長的數字)。你提到_profiled或measured_ - 你有什麼具體的提示可以執行找到導致速度下降的原因? – TheEquah

回答

2

點是:Java字節碼是通過JVM執行。它在你的普通處理器上運行。因此,從理論上講,JVM實現可以自由地將某些計算「外包」到GPU硬件上;但據我所知;目前沒有JVM這樣做。

當然,還有空間可以使用JNI以連接CPU和GPU世界,就像javacl項目中提到的其他答案一樣。

在任何情況下,您可能會將here轉爲進一步閱讀。

+0

我剛剛在第二次發現這個問題。這是一個非常漫長的過程,對我來說,它似乎比我預期的更加合適。但它看起來是間接的,我很確定它值得通讀。謝謝 – TheEquah

+0

非常歡迎。 – GhostCat

2

有一個Java binding for OpenCL,這是執行非圖形GPU計算的標準API。如果您的計算機不支持OpenCL,您也可以使用OpenGL對片段着色器進行計算,儘管這樣做有點尷尬。

您需要用專門的語言重寫計算:OpenCL的C變體或OpenGL的着色語言。您不能將Java代碼卸載到GPU上,因爲GPU不理解Java字節碼。在OpenCL或OpenGL中沒有與BigInteger等效的內置。

請記住,GPU是專門爲特定類型的工作負載:在許多不同的數據項同時運行相同的代碼。 GPU不會神奇地使數學更快。如果您的計算可以分解爲多個並行任務,並且所有的代碼都在同一時間運行,那麼使用OpenCL/OpenGL只有很大的幫助。