我目前正在開發一個項目,其中涉及使用BigInteger進行大量安靜計算。但顯然我的應用程序非常慢。Java使用GPU與BigInteger進行計算
我不知道GPU的分配情況,但我聽說他們可以用來計算更大的數字,速度更快。所以我想知道是否有辦法將「大量計算」給予GPU並以這種方式加快我的應用程序。
我目前正在開發一個項目,其中涉及使用BigInteger進行大量安靜計算。但顯然我的應用程序非常慢。Java使用GPU與BigInteger進行計算
我不知道GPU的分配情況,但我聽說他們可以用來計算更大的數字,速度更快。所以我想知道是否有辦法將「大量計算」給予GPU並以這種方式加快我的應用程序。
您可以檢查這個LIB提供@Parallel註釋: https://code.google.com/archive/p/java-gpu/
作爲一個沒有經驗的java用戶,頁面上的描述對我來說似乎有點複雜。但我肯定會看看它。謝謝 – TheEquah
有一個Java binding for OpenCL,這是執行非圖形GPU計算的標準API。如果您的計算機不支持OpenCL,您也可以使用OpenGL對片段着色器進行計算,儘管這樣做有點尷尬。
您需要用專門的語言重寫計算:OpenCL的C變體或OpenGL的着色語言。您不能將Java代碼卸載到GPU上,因爲GPU不理解Java字節碼。在OpenCL或OpenGL中沒有與BigInteger
等效的內置。
請記住,GPU是專門爲特定類型的工作負載:在許多不同的數據項同時運行相同的代碼。 GPU不會神奇地使數學更快。如果您的計算可以分解爲多個並行任務,並且所有的代碼都在同一時間運行,那麼使用OpenCL/OpenGL只有很大的幫助。
說實話,這不是一個簡單的話題,Java也許不是你需要的語言。嘗試考慮C/C++,否則使用JNI。 – Enzokie
這實在不像說「我需要計算大數字,我會使用GPU」那麼簡單。這非常複雜,目前聽起來超出你的範圍。我懷疑你還沒有接近完成你對代碼的所有優化。你有沒有分析或測量任何東西? – Michael
@Michael是的,我剛剛意識到它比我預期的更復雜^^。我很確定我可以優化代碼方面的配置,尤其是當我在運行程序時查看CPU使用率(僅使用一個內核)我認爲它也可能受內存速度的影響(由於真的很長的數字)。你提到_profiled或measured_ - 你有什麼具體的提示可以執行找到導致速度下降的原因? – TheEquah