我刚刚发现了Project Sumatra,其目的是将JVM引入显卡。在他们的网页上,这包括一个用于Java的自定义编译器(称为Rootbeer)。
这是一个好消息,但是,如果这意味着苏门答腊项目也适用于其他JVM语言,我想听听对项目内部有更多了解的人的意见?是否有可能直接从Scala或Clojure发出Aparapi电话?或者您是否必须在Java中开发一些核心功能,然后通过其他JVM语言访问它?
答案 0 :(得分:5)
我刚才遇到过这个问题。抱歉这么久。完全披露我是Aparapi的发明者/苏门答腊的首席和赞助商。
与Aparapi不同,Sumatra具有从JVM内部的Java方法的IR(中间表示)开始工作的优势。这意味着最终它将根据在此抽象级别找到的模式检测GPU卸载的机会。 Aparapi不得不从字节码逆向工程机会。
苏门答腊最初可能会关闭用户提示,而不是尝试自动并行化代码。目前主要关注的是Java 8的新“lambda”功能及其配套的“流API”。所以Aparapi要求用户从内核基类继承。 Sumatr a可能会使用以下建议的“显式”并行性提示: -
IntRange.range(1024).parallel()的forEach。(gid-> {出[GID] = A [GID] + B [GID];});
虽然对于明显的情况,例如
for(int id = 0; i< 1024; i ++){ 出[GID] = A [GID] + B [GID]; }
应该完全可以卸载此循环。因此,对其他基于JVM的语言的支持将取决于我们寻找自动并行化机会的雄心壮志。我怀疑来自其他语言(JavaScript(Nashorn),JRuby,Scala,JPython等)的许多模式都是可检测的。
答案 1 :(得分:3)
AFAIK Rootbeer(一个大学项目)和Aparapi(一个基于AMD的项目)是无关的,所以你可能在这里错过了一些东西。
关于Aparapi本身,它在其Wiki中声明它不能用于Scale / Closure等,或者实际上除了纯Java之外的任何东西,因为它依赖于JDK的javac用来正确分析字节码的模式。它还要求您扩展其内核类,以便能够将字节码转换为OpenCL并在GPU中执行它。所以看起来你会使用其中一种。
回到你的问题:基于这一切,你必须用Java开发并用其他JVM语言调用它。