【问题标题】:Application of Project Sumatra to other JVM languagesProject Sumatra 在其他 JVM 语言中的应用
【发布时间】:2013-04-21 22:12:20
【问题描述】:

我最近才发现Project Sumatra,它的目的是将JVM带到显卡上。在他们的网页上,这包括一个用于 Java 的自定义编译器(称为 Rootbeer)。

这都是好消息,但是,如果这意味着 Sumatra 项目也适用于其他 JVM 语言,我想听听对项目内部有更多了解的人?是否可以直接从 Scala 或 Clojure 进行 Aparapi 调用?还是您必须在 Java 中开发一些核心功能,然后通过其他 JVM 语言访问这些功能?

【问题讨论】:

    标签: java jvm gpu


    【解决方案1】:

    我只是遇到了这个问题。抱歉花了这么长时间。全面披露我是苏门答腊岛的 Aparapi 发明人/牵头人和共同发起人。

    与 Aparapi Sumatra 不同,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

    应该完全可以卸载这个循环。因此,对其他基于 JVM 的语言的支持将取决于我们寻找自动并行化机会的雄心。我怀疑来自其他语言(JavaScript (Nashorn)、JRuby、Scala、JPython 等)的许多模式都是可以检测到的。

    【讨论】:

    • “显式”提示是否也涵盖了例如 Scala 的并行收集 api,这样它的使用会以准透明的方式卸载到 GPU 上?
    【解决方案2】:

    AFAIK Rootbeer(一个大学项目)和 Aparapi(一个基于 AMD 的项目)是不相关的,所以你可能在这里漏掉了一些东西。

    关于 Aparapi 本身,它在其 Wiki 中声明它不适用于 Scale/Closure 等,或者实际上除了纯 Java 之外的任何东西,因为它依赖于 JDK 的 javac 使用的模式来正确分析字节码。它还要求您扩展其 Kernel 类,以便能够将字节码转换为 OpenCL 并在 GPU 中执行。所以看起来你会使用一个或另一个。

    回到您的问题:基于所有这些,您必须使用 Java 进行开发并从其他 JVM 语言中调用它。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2012-07-14
      • 2010-10-31
      • 2016-04-02
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多