我正在学习如何在Java 8中使用Aparapi,这样GPU可以用来加速我的应用程序,但我不知道Aparapi是否能够处理字符串处理。
例如,如果我有10,000个文件要通过,我的应用程序需要读取文本,遍历每一行来提取和解析浮点数,然后进行一些计算,并将结果存储在某个地方,比如hashmap、列表或数组,那么当我使用多个线程时,我的CPU将以接近100%的速度运行,并运行将近一个小时才能完成任务。
我的应用程序能从使用Java 8的Aparapi分配一些计算到GPU吗?我知道它可以做+-*/,但是Aparapi可以这样做:
String lines[]=text.split("\n");
for (int i=0;i<lines.length;i++)
{
float number=Float.parseFloat(lines[i]);
number*=2000;
}发布于 2014-03-25 19:40:21
基于OpenCL的Aparapi不能这样做,因为它不能直接处理堆上的对象。我们所能做的最好是将所有字符串状态移动到GPU,方法是将对象编组到连续堆的单个区域(ala ),然后对所有字符串执行并行操作。大多数时候,很难“赢回”marshall+transfer的时间。
HSA启用了Aparapi的lambda分支(仍在工作!)将使您能够在启用HSA的平台上执行此操作。HSA允许直接从GPU (共享虚拟内存)访问Java堆对象。这意味着我们不再需要将数据复制到GPU或从GPU复制。GPU可以直接跟踪对象引用。
仍然不能在GPU上分配(这需要对GC、安全点和deopt处理的一些支持),这是Aparapi之外的。另一方面,苏门答腊是一个OpenJDK项目,能够处理您建议的用例,并允许分配。)它的优点是能够与JVM挂钩;)
发布于 2014-03-24 16:02:11
我想我找到的答案是:
https://github.com/pcpratts/rootbeer1/tree/master/doc rootbeer1_paper.pdf
https://stackoverflow.com/questions/22584496
复制相似问题