当前位置: 首页 > 知识库问答 >
问题:

我耗时的 Java 应用程序是否会通过将一些工作转移到 GPU 而从 Rootbeer 中受益?

归鸿朗
2023-03-14

我的 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个答案

姜业
2023-03-14

答案,就像往常一样:视情况而定。

Rootbeer将能够将一些工作转移到GPU上。但是有很多警告。

  1. 你必须学习一种全新的做事方式。
  2. 它可能不会加快速度。这取决于应用程序中的瓶颈在哪里。例如,如果您的问题是 I/O 密集型的,那么 GPU 处理将无济于事。你可以通过查看应用运行时的 CPU 使用率来检查代码的现状。如果需要一个小时,那么除非您的文件非常庞大,否则听起来好像是 CPU 密集型的。
  3. (这是最重要的警告。您应该首先优化您拥有的代码,并检查那里有多少空间是为了改进。GPU 处理本质上只是为问题投入更多的马力;这是一个好主意,当且仅当您的代码已经以最佳方式运行时。

现在,从外观上看,应用程序中的许多处理都与处理字符串有关。您正在字符串上调用 .split(),这会将其分解字符串[];然后您浏览这些位并读取每个位以转换为浮点数;然后你做你的计算。这是一项非常繁重的工作,尤其是在垃圾收集器上,它必须摆脱所有这些字符串

在这个问题中,我对非常相似的东西做了一些详细的分析,使用整数而不是浮点数,这导致了一些详细的讨论。结论是,放弃基于字符串的方法并逐个字符读取文件,手动将它们转换为整数,这有很大的不同。几乎可以肯定的是,非常相似的东西将帮助您生成浮点数。

所以,简而言之,Rootbeer可能会有所帮助,但在你尝试一些激烈的事情之前,你可以做很多事情。

 类似资料:
  • 问题内容: 我创建了一个简单的Java应用程序,其中包含一个JFrame和几个JButton。当我尝试使用JVMTI检查Java应用程序时,我发现虽然我没有创建任何显式线程,但是却产生了许多显式线程。 我可以找到以下线程: 销毁JavaVM AWT-EventQueue-0 AWT关机 AWT-XAWT-守护线程 Java2D Disposer-守护程序线程 线程-0-守护程序线程[由JVMTI代

  • 我在java中创建了一个在桌面上执行时可以正常工作的Swing游戏。但是,由于不可预见的事件,我的老板现在要求将游戏变成一个小程序,以便可以嵌入到网站中(不,JWS不是一个选项)。 以下是我将游戏转换为小程序的步骤: 1)将我的main类更改为具有public ulureinit()而不是public静态ululemain(),并从Applet扩展它 2) 更改了我的myJFrame。java类现

  • 在收到远程通知并且用户采取操作(而不是关闭/解除)之后,app委托获得回调: -(void)application:(UIApplication*)application DidReceiverEmoTentification:(NSDictionary*)userInfo FetchCompletionHandler:(void(^)(UIBackgroundFetchResult))compl

  • 手机是OnePlus3T。oxygen OS版本为4.1.6。当应用程序在前台、后台但在内存中时,应用程序会收到通知。但当应用程序不在内存中(即从内存中刷出)时不会收到通知。其他安装了android操作系统版本4.2、5.1.1、6.0.1、7.1.1的设备也会收到通知,即使应用程序不在内存中。 好心建议点什么。提前道谢。

  • NVD报告PostgreSQL JDBC驱动程序存在具有高严重性(7.7)的XXE漏洞,请参见https://nvd.nist.gov/vuln/detail/CVE-2020-13692.此类漏洞与解析XML中的外部实体有关。 不过,我无法在PostgreSQL JDBC驱动程序中找到有关如何实际使用受感染的XML文件来利用此漏洞的信息。是当应用程序尝试将XML文件存储在数据库中时吗?是否有被解

  • 在我的项目中,我使用了带有okta验证的reactjs程序。当我运行reactjs程序时,输出变得很好。 但是,当我使用capacitorjs将reactjs网页转换为移动应用程序时,该网页不会显示在手机中 我已经按照以下url中的步骤将网页转换为移动应用程序 https://medium.com/how-to-react/convert-your-existing-react-js-app-to

  • 我正在尝试将运行在Jboss eap-6.3服务器上的应用程序传输到Wildfly 9服务器上。 独立日志 谁能帮帮我吗?我是JBoss和Wildfly环境的新手

  • 有没有人能说,是否可以通过我的android应用程序执行< code>adb命令。如果有可能执行,如何实现?