通过将一些工作转移到GPU,我耗时的Java应用程序会从Rootbeer中受益吗?
我的Java应用程序读取数千个文本文件,通过行并将文本解析为浮点数,然后用它们进行一些计算,然后将结果保存到一些文件中,现在我使用多个线程同时执行它们,仍然需要大约一个小时来运行整个应用程序
以下是我的应用程序的简化伪版本:
String Lines[]=ReadFile("abc.txt"),Items[];
float its[];
for (int i=0;i<Lines.length;i++)
{
Items=Lines[i].split(",");
its=new float[Items.length];
for (int j=0;j<its.length;j++) its[j]=Float.parseFloat(Items[j]);
do some calculation with : its[]
}
Do more calculation, save results to a StringBuffer.
Save StringBuffer to ("abc_result.txt");
我已经了解到,Rootbeer能够将一些工作负载转移到GPU上,并加快进程,因此我的问题是:
[1]Rootbeer能否在GPU上处理文本解析和文件I/O?或者我需要这部分在CPU上完成,并且只在GPU上进行计算
[2]我的应用程序会从Rootbeer中受益吗
# 1 楼答案
答案往往是:视情况而定
Rootbeer将能够将一些工作转移到GPU上。但是有很多警告
现在,从外观上看,应用程序中的许多处理都与字符串的处理有关。你在一个;然后你做你的计算。这是一项相当繁重的工作,尤其是在垃圾收集器上,它必须清除所有这些
String
上调用.split()
,这会把它分解成一个String[]
;然后你遍历这些位并读取每个位,将其转换为^{String
我在this question中对一些非常类似的东西做了一些详细的分析,使用整数而不是浮点,这导致了一些详细的讨论。得出的结论是,放弃基于
String
的方法,逐个字符地读取文件,手动将其转换为整数,会产生巨大的影响。几乎可以肯定,非常类似的东西将帮助您生成浮点数所以,简而言之,Rootbeer可能会有所帮助,但在你尝试如此激烈的事情之前,你有很多事情可以做