1

我正在学习将 Aparapi 与 Java 8 一起使用,因此 GPU 可用于加速我的应用程序,但我想知道 Aparapi 是否可以处理字符串处理。

例如,如果我有 10,000 个文件要处理,而我的应用程序需要读取文本并遍历每一行以提取和解析浮点数,然后进行一些计算并将结果存储在某个位置,例如哈希图、列表或数组,当我使用多个线程时,我的 CPU 以接近 100% 的速度运行,并且运行了将近一个小时才能完成工作。

我的应用程序能否从 Aparapi 和 Java 8 中受益,以便为 GPU 分配一些计算?我知道它可以做 [ + - * / ],但 Aparapi 可以做以下事情:

String lines[]=text.split("\n");
for (int i=0;i<lines.length;i++)
{
  float number=Float.parseFloat(lines[i]);
  number*=2000;
}
4

2 回答 2

2

基于 OpenCL 的 Aparapi 无法做到这一点,因为它不能直接处理堆上的对象。我们能做的最好的事情是通过将对象编组到连续堆的单个区域(ala Rootbeer)将所有字符串状态移动到 GPU,然后对所有字符串执行并行操作。大多数时候很难“赢回”马歇尔+转会时间。

Aparapi 的启用 HSA 的 lambda 分支(仍在开发中!)将使您能够在启用 HSA 的平台上执行此操作。HSA 允许直接从 GPU(共享虚拟内存)访问 Java 堆对象。这意味着我们不再需要将数据复制到 GPU 或从 GPU 复制数据。GPU 可以直接跟随对象引用。

仍然无法在 Aparapi 之外的 GPU 上进行分配(这需要对 GC、安全点和 deopt 处理的一些支持)。另一方面,Sumatra 是一个 OpenJDK 项目,将能够处理您建议的用例并允许分配。它的优点是能够挂接到 JVM ;)

于 2014-03-25T19:40:21.623 回答
0

我想我在以下位置找到了答案:

https://github.com/pcpratts/rootbeer1/tree/master/doc [rootbeer1_paper.pdf]

或在这里:https ://github.com/pcpratts/rootbeer1

于 2014-03-24T16:02:11.520 回答