Aparapi可以使用Java 8处理字符串处理吗?

时间:2014-03-22 22:30:27

标签: java string gpu java-8 aparapi

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

例如,如果我有10,000个文件要通过,我的应用程序需要读取文本并遍历每一行来提取和解析浮点数,然后进行一些计算并将结果存储在某个地方,如hashmap或列表或数组,当我使用多个线程时,我的CPU运行在接近100%,并且它运行了将近一个小时才能完成工作。

我的应用程序可以从Aparapi with 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;
}

2 个答案:

答案 0 :(得分:2)

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

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

仍然无法在GPU上分配(这需要对GC,安全点和延迟处理的一些支持),这超出了Aparapi。另一方面,苏门答腊是一个OpenJDK项目,能够处理您建议的用例并允许分配。它的优点是能够挂钩到JVM;)

答案 1 :(得分:0)

我想我已经找到了答案:

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

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