2017-04-25 13 views
0

現在静的な大きな数値で計算するため、BigIntegerを使用するプロジェクトがあります。しかし、明らかに私のアプリケーションは本当に遅いです。BigIntegerで計算するためにJavaを使用するGPU

私はGPUについて分かりませんが、もっと速く大きな数値を計算するのに使うことができると聞きました。だから私は、GPUに "重い数値の計算"を与えて、このようにアプリケーションを高速化する方法があるのだろうかと思います。

+0

これは簡単なトピックではありません。また、Javaは必要な言語ではないかもしれません。そうでなければJNIを使​​用することを検討してください。 – Enzokie

+2

「実際には大きな数字を計算する必要があります。私はGPUを使用します」と言うだけでは簡単ではありません。それは信じられないほど複雑で、あなたの手の届かないところで聞こえます。私はあなたのコードにできる最適化を全て使い果たしているとは思えません。あなたは何かをプロファイリングしたか測定しましたか? – Michael

+0

@Michaelええ、私はちょうどそれが私が期待したよりも複雑に割り当てられていることに気付きました^^。私はshure私は特に私がプログラムを実行中にCPU使用量を見てコード側で割り当てることができます(ただ一つのコアがheavely使用されている)私はまた、メモリの速度によって影響を受ける可能性があると思う)。そしてあなたは_profiledまたはmeasured_をお伝えしました - スピードの低下の原因を見つけるために私ができることを具体的なヒントを持っていますか? – TheEquah

答えて

2

あなたは、このLIBが提供する@Parallel注釈を確認することができます。 https://code.google.com/archive/p/java-gpu/

+0

Javaの経験のない人は、ページの説明がちょっと複雑に思えます。しかし、私は間違いなくそれを見ていきます。ありがとうございました – TheEquah

2

ポイントは次のとおりです。Javaバイトコードは、JVMを介して実行されます。あなたの普通のプロセッサ上で実行されます。

理論的には、JVM実装はGPUハードウェアに特定の計算を「アウトソーシング」することが自由にできます。しかし、私の知識に。現在のところ、JVMはありません。

もちろん、他の回答に記載されているjavaclプロジェクトのように、CPUとGPUの世界を接続するにはJNIを使用する余地があります。

いずれにしても、さらに読むためにhereにすることができます。

+0

私はこの質問を少し前にも見つかりました。それは非常に長いanwserであり、それは私が期待した以上にcompplicatedされているようだ。しかし、それは相互に見えると私はそれが徹底的に読む価値があるshureだ。ありがとうございます – TheEquah

+0

あなたは大歓迎です。 – GhostCat

2

Java binding for OpenCLがあります。これは非グラフィックGPU計算を行うための標準APIです。お使いのコンピュータがOpenCLをサポートしていない場合は、OpenGLを使用してフラグメントシェーダで計算を行うこともできますが、これは少し面倒です。

OpenCLのCやOpenGLのシェーディング言語では、特殊な言語で計算を書き直す必要があります。 GPUはJavaバイトコードを理解していないため、JavaコードをGPUにオフロードできません。 OpenCLまたはOpenGLにはBigIntegerに相当するビルトインはありません。 多くの異なるデータ項目に同時に同じコードを実行している:

は、GPUには、ワークロードの特定の種類のために設計されていることに注意してください。 GPUは魔法のように数学をより速くするわけではありません。 OpenCL/OpenGLを使用すると、計算が複数の並列タスクに分割され、すべて同じコードが同時に実行される場合に役立ちます。

関連する問題