大型网络迭代 - 并行性?

时间:2011-07-11 09:13:16

标签: java parallel-processing

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

简单并行性的问题在于,每次网络重新连线时,新的迭代都会在重新连接的网络上运行。

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

2 个答案:

答案 0 :(得分:1)

每次迭代大约需要1.25秒。 (大约40亿个时钟周期)听起来好像很长一段时间,必须有一些机会来优化你正在做的事情并将其减少到毫秒。优化代码通常可以提高性能,而不是平行化。 (因为并行代码受到您拥有的可用硬件数量以及协调多个CPU /系统的开销限制)

你有多少硬件?如果您的进程受CPU限制,那么如果您有N个CPU,则最多可以使应用程序快N倍。

假设您有足够的硬件,例如可以使用2048个可以玩1天的CPU。您可以使用不同的随机/可能配置启动网络,而不是假设您需要完全忠实的端到端测试。独立地对每个网络运行10 ^ 5次攻击并检查您的结束状态是否与另一次运行的起始状态匹配。也就是说,你可以概念性地将结果连接到端到端。


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

您可以购买配备Xeon Quad 2.5 GHz和4 GB内存的服务器,价格为354英镑。这笔钱很有力量。

但是,如果您有权访问现有资源,那么您可能会感觉更好。例如你是否为一家拥有1000台桌面的公司工作,这些台式机不能过夜使用。 ;)

答案 1 :(得分:0)

您制定问题的方式,似乎没有办法并行化迭代。另外,如果1477天的估计是现实的,那么并行化将在双核机器上给你~800天,我想这仍然是不可接受的。

相反,您可以执行典型的分析工作流程:

  1. 确定需要很长时间才能完成的相当小的代码。
  2. 通过重新设计,用编译语言重写或调整来优化这段代码。
  3. 转到1
  4. 如果没有任何结果可以使您获得可接受的结果,则必须通过减少迭代次数或做出一些性能关键的假设来简化您的问题。