OpenCLは通常、大量の並列操作(計算など)を処理するために使用されます。これはOpenCLが繁栄し、プログラムのスループットが実際に向上する場所です。
Javaは、さまざまなプラットフォーム/デバイスで実行されるアプリケーションを作成するための汎用言語です。
ツールとしての目的は異なりますが、JOCLを使用してJavaプログラムからOpenCLを使用できます。また、AMDのAparapiというツールも使用しました。アプリケーションで計算を実行したかったので、ASUSAMD6970カードの仕事は6コアのAMD1090TPhenomBlackEditionよりも速く完了したようです。
Aparapiが何であるかを知るためだけに(グーグルコードサイトから取得):
Aparapiを使用すると、Java開発者は、ローカルCPUに限定されるのではなく、GPUでデータ並列コードフラグメントを実行することにより、GPUおよびAPUデバイスの計算能力を活用できます。これは、実行時にJavaバイトコードをOpenCLに変換し、GPUで実行することによって行われます。何らかの理由で、AparapiがGPUで実行できない場合は、Javaスレッドプールで実行されます。
非常に多くの類似点があるにもかかわらず、ヘテロジニアスコンピューティングのためにJavaよりもOpenCLを好む理由と時期は?
並列処理タスクにはOpenCLを選択します。そうしないと、CPUでの実行に多くの時間がかかります。この場合の不利な点は、余分な熱と電力の消費コストです。一部のタスクはCPU上でより高速に実行されることにも注意してください。どちらが最適かを判断するために、ほとんどの場合、両方のタイプのチップで試行する必要があるのは、アプリケーションによって異なります。
なぜJavaの代わりにOpenCLを選んだのですか?
並列処理指向のタスクには、JavaではなくOpenCLを選択します。OpenCLは、この目的のために構築されたツールです。OpenCLは、エンタープライズまたはデスクトップアプリケーションの構築に使用するものではありません。Javaは、多くのプラットフォームで実行されているほとんどすべてのドメインのプログラミング言語です。OpenCLを使用すると、Javaで24時間の計算を節約できることがわかっている場合。もちろん、Javaは廃止され、OpenCLが道を開くか、Javaアプリケーションを介してOpenCLを使用することができます。
openClの方がパフォーマンスが優れていると言えば、私の直接の質問はなぜそうなのかということです(どちらも、特定のh / wのバイナリに変換する必要のある中間コードを生成するため)。
GPUにはCPUよりも多くのコアがあるため、特定のアプリケーションでのパフォーマンスが向上します。ただし、頻度は非常に低いため、順次タスクよりも並列タスクの方が優れていることを意味します。OpenCLは基本的な計算に使用され、フルフレーバーアプリケーションの構築には使用されないことを覚えておく必要があります...少なくとも私が知る限りでは。