大型网络迭代——并行性



我正在编写一个算法来衡量大型网络在独立攻击下的鲁棒性。该网络大约有2000个节点,面临10^8次攻击。最初我在Matlab中实现了我的解决方案,但是太多的迭代(10^8)没有成功。每次迭代都试图通过提高鲁棒性来重新连接网络。

简单并行的问题是,每次网络重新连接时,新的迭代都在重新连接的网络上工作。

我不确定如何在这里实现高度并行,以便有效地运行我的算法。目前没有并行,我相信大约需要1477天。

每次迭代大约需要1.25秒。(大约40亿个时钟周期)这听起来很长,一定有机会优化你正在做的事情并将其减少到毫秒。优化代码通常比并行化代码更能提高性能。(因为并行代码受到可用硬件数量和协调多个CPU/系统的开销的限制)

你有多少硬件?如果你的进程是CPU限制的,如果你有N个CPU,你将使应用程序最多快N倍。

假设你有足够的硬件,例如2048个cpu来玩,花1天是可以接受的。不需要假设您需要一个完全可靠的端到端测试,您可以在不同的随机/可能的配置中启动网络。在每个网络上独立运行10^5次攻击,并检查您的结束状态是否与另一次运行的开始状态密切匹配。也就是说,你可以在理论上将结果端到端连接在一起。


根据您需要多少内存,您可能会发现塔式服务器是最具成本效益的。

你可以花354英镑买一台Xeon Quad 2.5 GHz和4gb内存的服务器。这就是金钱换来的权力。

但是,如果您可以访问现有资源,您可能会更好。例如,你所在的公司是否有1000台台式电脑没有通宵使用?div;)

按照您表述问题的方式,似乎没有办法并行化迭代。此外,如果1477天的估计是现实的,那么在双核机器上并行化将给你大约800天的时间,我想这仍然是不可接受的。

相反,您可以执行典型的分析工作流程:
  1. 确定需要很长时间才能完成的一小段代码。
  2. 通过重新设计、用编译语言重写或调整来优化那段代码。
  3. 转到1

如果这些方法都不能得到可接受的结果,那么您将不得不通过减少迭代或做出一些性能关键的假设来简化问题。

最新更新