首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们能在java中加速CPU密集型任务吗?

我们能在java中加速CPU密集型任务吗?
EN

Stack Overflow用户
提问于 2012-01-07 02:00:25
回答 2查看 752关注 0票数 5

像寻找2000的阶乘这样的任务,使用BigInteger是一项CPU密集型任务,有没有任何方法可以加速这样的过程?

例:查找2000!因为它只是一个单一的任务,我认为这里不需要线程(因为运行这个程序或在一个线程中运行这个任务都必须执行这种CPU密集型的事情)。

我听说Java7为计算密集型任务引入了一种新的并行机制。那么,我该如何在其中执行这种事情呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-07 02:19:50

通过最终的合并,一个阶乘可以很容易地拆分成两个任务。这是某种map-reduce,如果你喜欢的话。

示例:

代码语言:javascript
运行
复制
9! = (7*5*3*1) * (8*6*4*2)

所以你可以有两个任务。

这可以概括为任意数量的并行任务。

这个解决方案与Java无关,它是关于将“常规”解决方案转换为并行解决方案。

票数 12
EN

Stack Overflow用户

发布于 2012-01-07 02:10:31

可以简单地向WolframAlpha提交一个查询,并在不到一秒的时间内(at least for 2,000!,甚至10,000,000,000!)返回一个近似答案,如果您只需要一个大阶乘的近似值,这可能就足够了。

这是你自己在维基百科上写的一篇关于challenges around calculating large factorials的文章,其中一些你已经发现了。

您真正想要做的是尝试减少需要完成的总工作量。要做到这一点,最简单的方法是将结果存储在表中,然后进行查找。包含所有这些值的表可能会非常大,但如果存储空间在您的情况下不是限制,那么这是一种方法。

简单地尝试将其并行化不会节省您的CPU (除非您正在计算一个近似值,而不是精确的数字),因为您正在做相同数量的总工作,但将其分散开来。此外,并行化任何东西都会涉及一些开销(线程间/进程间通信,分布式内存,如果问题空间足够大,各种各样的事情)。将任何算法并行化是一大胜利的地方,是当你可以成功地将问题分成更小的块,并将这些块有效地分散开来,以便将时间...

chunks out

  • out
  • chunks
  • results back
  • combine

results

与系列产品相比,...is的成本更低(以时间、金钱、存储空间、电力或其他有限资源来衡量),并且/或者它提供了一定的价值(时间、金钱、存储空间等。节省了),从而有效地弥补了成本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8762259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档