我最近刚刚发现了Project Sumatra,它旨在将 JVM 引入显卡。在他们的网页上,这包括一个用于 Java的自定义编译器(称为Rootbeer )。
这都是好消息,但是,如果这意味着 Sumatra 项目也适用于其他 JVM 语言,我想听听对项目内部有更多了解的人?是否可以直接从 Scala 或 Clojure 进行 Aparapi 调用?或者您是否必须在 Java 中开发一些核心功能,然后通过其他 JVM 语言访问这些功能?
我最近刚刚发现了Project Sumatra,它旨在将 JVM 引入显卡。在他们的网页上,这包括一个用于 Java的自定义编译器(称为Rootbeer )。
这都是好消息,但是,如果这意味着 Sumatra 项目也适用于其他 JVM 语言,我想听听对项目内部有更多了解的人?是否可以直接从 Scala 或 Clojure 进行 Aparapi 调用?或者您是否必须在 Java 中开发一些核心功能,然后通过其他 JVM 语言访问这些功能?
我只是遇到了这个问题。抱歉花了这么长时间。完全披露我是苏门答腊的 Aparapi 发明人/牵头人和共同赞助商。
与 Aparapi 不同,Sumatra 具有从 JVM 内部使用 Java 方法的 IR(中间表示)工作的优势。这意味着最终它将根据在此抽象级别发现的模式检测 GPU 卸载的机会。Aparapi 不得不从字节码中逆向工程机会。
Sumatra 很可能最初会关闭用户提示,而不是尝试自动并行化代码。目前的主要关注点是 Java 8 的新“lambda”特性及其配套的“stream API”。因此,Aparapi 要求用户从内核基类继承。Sumatr a 可能会使用以下建议的并行性的“显式”提示:-
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 等)的许多模式都是可以检测到的。
AFAIK Rootbeer(一个大学项目)和 Aparapi(一个基于 AMD 的项目)是不相关的,所以你可能在这里错过了一些东西。
关于 Aparapi 本身,它在其 Wiki 中声明它不适用于 Scale/Closure 等,或者实际上除了纯 Java 之外的任何东西,因为它依赖于 JDK 的 javac 使用的模式来正确分析字节码。它还要求您扩展其 Kernel 类,以便能够将字节码转换为 OpenCL 并在 GPU 中执行。所以看起来你会使用一个或另一个。
回到您的问题:基于所有这些,您必须使用 Java 进行开发并从其他 JVM 语言中调用它。