Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不到6小时的执行时间内测试500万亿个组合_C#_Java_Php_Execution Time - Fatal编程技术网

C# 如何在不到6小时的执行时间内测试500万亿个组合

C# 如何在不到6小时的执行时间内测试500万亿个组合,c#,java,php,execution-time,C#,Java,Php,Execution Time,我现在有一个PHP脚本,通过一组数组的组合循环。我可以用一个简单的PHP脚本在一小时内测试500万亿个组合中的61亿个。有没有可能在今天的普通PC上用任何语言编写一个程序,能够在不到6小时的时间内测试多个阵列的所有500万亿组合 此外,我没有资源使用分布式或集群计算来完成这项任务。我希望将代码转换为多线程java/c会有什么收获 谢谢让我们从简单开始。你使用线程吗?如果不是的话,现代的高端英特尔现在每个处理器有12个硬件线程。这意味着您可以从线程中获得12的因子 如果有人得到一个特定于此的服务器

我现在有一个PHP脚本,通过一组数组的组合循环。我可以用一个简单的PHP脚本在一小时内测试500万亿个组合中的61亿个。有没有可能在今天的普通PC上用任何语言编写一个程序,能够在不到6小时的时间内测试多个阵列的所有500万亿组合

此外,我没有资源使用分布式或集群计算来完成这项任务。我希望将代码转换为多线程java/c会有什么收获


谢谢

让我们从简单开始。你使用线程吗?如果不是的话,现代的高端英特尔现在每个处理器有12个硬件线程。这意味着您可以从线程中获得12的因子

如果有人得到一个特定于此的服务器,他可以以相对较低的成本轻松获得24-32个硬件线程


如果阵列是半静态的,并且您需要一张先进的图形卡,您可能会发现拥有800到3000个处理器内核可以大大节省时间。没有什么能比得上这一点——现在,即使是普通CPU的芯片或图形卡中也有相当多的核心功能。

如果你没有资源,那么我恐怕要说的是,你想要的数字,你就错了


你需要重新考虑你的数据结构和使用它们的算法,以便有机会在时间限制内完成你的谜题-使用PHP或任何其他语言。

我对你想要运行的过程一无所知,也许你目前的资源无法实现你的目标,但是,既然您需要一种语言,而且PHP确实不是解决并行问题的最佳语言,那么我应该说Erlang以这种成就而闻名

500 trillion comparisons in 6 hours
=
83.3 trillion comparisons in 1 hour
=
1.4 trillion comparisons per minute
=
23.1 billion comparisons per second
假设您有一个Intel Core i7-2600 cpu(3.4GHz),即4核+超线程=8核,那么您需要的每核速度为

23.1/6 = 3.9GHz
这是基本超频可能性的极限


一旦你考虑到其他开销,你想要的是不可能的。您的cpu只能进行比较。

这是一个WPA 48位黑客吗?;)这在很大程度上取决于处理这些数组元素的方法,以及为节省500万亿个组合而浪费的内存。理论上是的,多线程语言可以更好地利用CPU。如果这是出于崇高的目的,你可以创建一个“捐赠CPU时间”页面,然后传播病毒,收集用户在浏览器中完成的解决方案块。。。这将解决你的资源问题。根据算法,你可以避免使用蛮力,并减少你需要考虑的组合数量。e、 g.找到一个数组的组合,其总和等于一个总数。如果你使用暴力,你把每一个组合加起来,看看它是否与总数相符。一个简单的优化方法是将除一个之外的所有数据相加,然后查看
total sumSoFar
是否为数组/集合的成员。(当您添加此项时,您将得到总数)涉及重复的组合可以被优化,这样你就不必考虑重复的组合。这个问题不适合程序员吗?StExchange?com?我同意ToToMang-GPGPU计算是在这样的情况下去的方法,如果你没有用于集群或类似的资源。即使。SuperMicro销售2台机架式服务器,可容纳6张Nvidia特斯拉卡,这是有原因的。在并行操作方面,没有什么能比得上GPU。我认识一个人,他在桌下用一台机器对美国股票市场进行期权分析——每秒钟,所有股票。使用6990的耦合。@TomTom对于特定类型的并行操作,没有什么比GPGPU更好的了。在这种情况下,是的,这应该是一个很好的选择。看起来简单的答案是否定的,我的选择是GPU或集群计算中的并行处理。感谢所有人。@QBawl简单的答案是否定的,但根据你能做出的假设,你可以消除许多组合,并将其减少几个数量级,在某些情况下,时间可以缩短到一秒钟。e、 g.一些项目问题是这样的。使用暴力可能需要几个小时。聪明一点,这可能需要几秒钟。为开销保留2个内核?我甚至不确定HT是否能完成这样的任务。然后,这里的账户遗漏了一些东西:39亿个比较不能直接映射到1个周期/比较。根据实际的代码,我们需要更多的代码来获得下一个必要的组合、循环开销等等。如果我们每次迭代的周期少于100个,我会非常惊讶