4

私はつい最近Project Sumatraを発見しました。これは、JVM をグラフィックス カードに導入することを目的としています。彼らの Web ページには、Java 用のカスタム コンパイラ ( Rootbeerと呼ばれる) が含まれています。

これはすべて良いニュースですが、プロジェクト Sumatra が他の JVM 言語にも適用されることを意味する場合、プロジェクトの内部についてより詳しい知識をお持ちの方からのご連絡をお待ちしております。Scala または Clojure から直接 Aparapi 呼び出しを行うことは可能ですか? それとも、Java でいくつかのコア機能を開発し、他の JVM 言語を介してアクセスする必要がありますか?

4

2 に答える 2

5

私はちょうどこの質問に出くわしました。長くなってしまい申し訳ありません。完全な開示 私は Aparapi の発明者であり、Sumatra のリードおよび共同スポンサーです。

Aparapi とは異なり、Sumatra には、JVM 内から Java メソッドの IR (中間表現) を使用できるという利点があります。これは、最終的に、この抽象レベルで見つかったパターンに基づいて GPU オフロードの機会を検出することを意味します。Aparapi は、バイトコードから機会をリバース エンジニアリングする必要がありました。

Sumatra は、コードの自動並列化を試みるのではなく、最初はユーザー ヒントをキーオフする可能性があります。現在の主な焦点は、Java 8 の新しい「ラムダ」機能と、それに付随する「ストリーム API」です。そのため、Aparapi ではユーザーがカーネル基本クラスから継承する必要がありました。Sumatr は、以下によって提案された並列処理の「明示的な」ヒントを使用する可能性があります。

IntRange.range(1024).parallel().forEach(gid->{out[gid]=a[gid]+b[gid];});

ただし、次のような明らかなケースの場合は

for (int id=0; i< 1024; i++){ out[gid]=a[gid]+b[gid]; }

このループをオフロードすることは完全に可能です。したがって、他の JVM ベースの言語のサポートは、自動並列化の機会をどれほど野心的に探しているかによって異なります。他の言語 (JavaScript (Nashorn)、JRuby、Scala、JPython など) からの多くのパターンが検出可能になると思います。

于 2013-04-21T14:12:20.760 に答える
3

AFAIK Rootbeer (大学のプロジェクト) と Aparapi (AMD ベースのプロジェクト) は無関係であるため、ここで何かを見逃している可能性があります。

Aparapi 自体に関しては、JDK の javac がバイトコードを適切に分析するために使用するパターンに依存するため、Scale/Closure など、または実際には純粋な Java 以外では機能しないと Wiki に記載されています。また、バイトコードを OpenCL に変換して GPU で実行できるように、Kernel クラスを拡張する必要があります。したがって、どちらかを使用するようです。

質問に戻ります。これに基づいて、Java で開発し、他の JVM 言語から呼び出す必要があります。

于 2012-10-02T07:27:07.247 に答える