96

グラフィックスプロセッシングユニット( GPGPU )での汎用コンピューティングは、あらゆる種類のコンピューティングにGPUのパワーを活用するための非常に魅力的なコンセプトです。

画像処理、パーティクル、高速の幾何学的操作にGPGPUを使用したいと思います。

現在、この分野での2つの候補はCUDAとOpenCLのようです。知りたいのですが:

  • OpenCLはWindows/MacのJavaからまだ使用できますか?
  • OpenCL / CUDAに接続するためのライブラリの方法は何ですか?
  • JNAを直接使用するオプションはありますか?
  • 私は何かを忘れていますか?

実世界の経験/例/戦争の話は大歓迎です。

4

8 に答える 8

62

私の知る限り、JavaCL / OpenCL4Javaは、現在すべてのプラットフォームで利用できる唯一の OpenCL バインディングです (MacOS X、FreeBSD、Linux、Windows、Solaris、すべて Intel 32、64 ビットおよび ppc バリアントで、JNAの使用により)。

少なくとも Mac と Windows で Java Web Start から実際に正常に動作するデモがあります (Linux でのランダムなクラッシュを避けるために、この Wiki ページ、このParticles Demoなどを参照してください。

また、いくつかのユーティリティ (GPGPU 乱数生成、基本的な並列削減、線形代数) とScala DSLも付属しています。

最後に、これは利用可能な最も古いバインディング (2009 年 6 月以降)であり、アクティブなユーザー コミュニティがあります

(免責事項: 私はJavaCLの作成者です :-))

于 2010-07-22T08:47:20.983 に答える
35

Aparapiも検討してください。コードを Java で記述できるようにし、実行時にバイトコードを OpenCL に変換しようとします。

完全開示。私は Aparapi 開発者です。

于 2011-10-06T16:36:42.380 に答える
12

CUDA は C の修正版です。CUDA カーネルを作成するには、C でコーディングしてから、nvidia の CUDA コンパイラを使用して実行形式にコンパイルする必要があります。生成されたネイティブ コードは、JNI を使用して Java とリンクできます。したがって、技術的には、Java からカーネル コードを作成することはできません。JCUDA http://www.jcuda.de/jcuda/JCuda.htmlがあり、一般的なメモリ/デバイス管理用の cuda の API と、CUDA および JNI でラップされた Java メソッド (FFT、いくつかの線形代数メソッド) を提供します。 ..などなど..)

一方、OpenCL は単なる API です。OpenCL カーネルは API に渡されるプレーンな文字列であるため、Java から OpenCL を使用すると、独自のカーネルを指定できるはずです。Java の OpenCL バインディングは、http://www.jocl.org/にあります。

于 2010-04-15T12:32:14.027 に答える
11

私は JOCL を使用してきましたが、とても満足しています。

CUDA に対する OpenCL の主な欠点 (少なくとも私にとって) は、利用可能なライブラリ (Thrust、CUDPP など) がないことです。ただし、CUDA は OpenCL に簡単に移植できます。これらのライブラリがどのように機能するか (アルゴリズム、戦略など) を調べることで、多くのことを学ぶことができます。

于 2010-05-06T14:35:54.633 に答える
7

遅いことは承知していますが、これを見てください: https://github.com/pcpratts/rootbeer1

私はそれを使用していませんが、他のソリューションよりもはるかに使いやすいようです。

プロジェクトページから:

Rootbeer は、CUDA または OpenCL Java 言語バインディングよりも高度です。バインディングを使用すると、開発者はオブジェクトの複雑なグラフをプリミティブ型の配列にシリアル化する必要があります。Rootbeer では、これは自動的に行われます。また、言語バインディングを使用する場合、開発者は GPU カーネルを CUDA または OpenCL で作成する必要があります。Rootbeer を使用すると、Java バイトコードの静的分析が行われ (Soot を使用)、CUDA コードが自動的に生成されます。

于 2012-08-15T10:25:25.520 に答える