我正在编写一个算法来测量大型网络在独立攻击下的健壮性。该网络大约有2000个节点,它面临着10^8的攻击。最初,我在Matlab中实现了我的soution,但是太多的迭代(10^8)都不起作用。每个项目都试图通过提高健壮性来重新布线网络。
简单并行的问题是,每次网络重新连接时,新的迭代都会在重新连接的网络上工作。
我不确定如何在这里实现高度并行,以便有效地运行我的算法。目前没有并行,我相信这将需要大约1477天。
发布于 2011-07-11 18:20:31
每次迭代大约需要1.25秒。(大约40亿个时钟周期)这听起来是一个很长的时间,必须有一些机会来优化你正在做的事情,并将其减少到毫秒。优化代码通常比并行化更能提高性能。(因为并行化代码受到您拥有的自由硬件数量和协调多个CPU/系统的开销的限制)
你有多少硬件?如果您的进程是CPU受限的,那么如果您有N个CPU,您将使应用程序最多快N倍。
假设你有足够的硬件,比如2048个CPU,花一天的时间是可以接受的。您可以在不同的随机/可能的配置中启动网络,而不是假设您需要进行完全忠实的端到端测试。在每个网络上独立运行10^5次攻击,并检查您的结束状态是否与另一次运行的开始状态非常接近。也就是说,您可以在理论上将结果端到端地连接在一起。
根据您需要的内存大小,您可能会发现塔式服务器是最具成本效益的。
你可以买一台XeonQuad2.5 GHz和4 GB内存的服务器,价格是354 GB。对于钱来说,这是很大的权力。
但是,如果您可以访问现有的资源,您可能会过得更好。例如,你是否在一家拥有1,000台整夜不用的桌面的公司工作?;)
发布于 2011-07-11 17:33:46
按照你提出问题的方式,似乎没有办法将迭代并行化。此外,如果1477天的估计是现实的,那么在双核机器上并行化将给你大约800天的时间,我猜这仍然是不可接受的。
相反,您可以执行典型的性能分析工作流:
如果这些都不能让你得到可接受的结果,你将不得不通过减少迭代或做出一些性能关键的假设来简化你的问题。
https://stackoverflow.com/questions/6647995
复制相似问题