私はちょうどこの質問に出くわしました。長くなってしまい申し訳ありません。完全な開示 私は 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 など) からの多くのパターンが検出可能になると思います。