在1 ghz处理器上运行10-100千兆步的算法需要多长时间?

时间:2016-05-06 12:30:14

标签: java algorithm performance combinations

这是我关于SO的第一个问题,如果不合适/不合适,请告诉我。我上面的问题相当普遍,但我遇到的具体问题如下:

我想编写一段Java代码,生成一个列表,列出所有可能导致选举大学联系的状态组合。最短的列表将包含12个状态,最长的列表将包含38个状态。我做了一些(非常)粗略计算,所有可能的组合达到(可能)10千万亿。我仍然处于算法的计划阶段,但是给出的是10万亿是所需步数的绝对下限,我想实际数字会明显更高。

我对编程很新,并想知道它是否值得编写这段代码 - 一个粗略的计算表明该算法需要大约30年才能完成(!)。但是,我基于维基百科建议的MIP(每秒百万指令)值来计算这个计算,我不知道它究竟是多么准确(或者实际上,它实际上算作"指令"对于这些目的)。

非常感谢阅读和/或回答:)

2 个答案:

答案 0 :(得分:1)

1 GHz处理器的时钟频率为每秒10亿次。时钟滴答用于允许信号流过系统。因此,可以执行的理论最大操作数(任何类型)是每秒10亿次操作。为了执行10千万亿次操作,理论上的最小时间为10万亿除以10亿,即1000万(秒)。如果我的计算是正确的,那么大约需要116天。在实践中,你不会获得相当多的性能,但是使用现代流水线处理器,你应该做得很好,至少对于经过优化的汇编程序来说至少有50%。因此,对于单个现代1 GHz处理器,我认为200天是整数运算的一个非常合理的猜测,就像你在组合系统中所期望的那样。

现在,你的步骤"可能是很多机器指令。对于任何足够复杂的步骤来说,这似乎是可能的。如果单个"步骤"是100个机器说明(一个相当强大的"步骤")然后我们真的说话更像是20,000天或54年。

现在,我们能做什么?那么,生成组合非常适合并行编程。例如,如果您能够在超级计算中心获得一些时间并在1000个核心上运行此工作,每个核心运行速度为3 GHz,则运行大约需要7天才能完成 - 可能需要10天才能解决非并行工作问题。 / p>

或者,如果您可以制定一个聪明的算法来避免分支,您可以获得一些NVIDIA GTX 980并在家中运行它。你可以获得大约2,000个内核,每个内核以每个显卡约1 GHz的速度运行,所以这些坏男孩中的一些会极大地加速你的任务(再次,如果你能以一种在显卡上高效的方式编写你的程序 - 那就是困难的部分)。

判决?可行,但成本高昂和/或困难 - 如果您不习惯编写大规模并行程序,这将是您希望做出任何可行的事情所必需的,这一点尤其困难。

答案 1 :(得分:1)

计算出基本逻辑,理论上1 GHz可以进行10亿次计算/秒。

10万亿次计算的时间意味着10万亿/ 10亿

因此,通过计算它会发现大约需要115天才能完成

10,000,000,000,000,000 / 1,000,000,000 = 10,000,000 seconds
10,000,000 seconds = 166,667 minutes
166,667 minutes = 2778 hours
2778 hours = 115 days

但这都是理论上的