java - 大型网络迭代 - 并行性?

标签 java parallel-processing

我正在编写一种算法来衡量大型网络在独立攻击下的稳健性。该网络有大约 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 和 4 GB 内存的服务器。这对金钱来说是很大的力量。

但是,如果您可以访问现有资源,您可能会过得更好。例如您是否在一家拥有 1,000 台未在夜间使用的台式机的公司工作? ;)

关于java - 大型网络迭代 - 并行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647995/

相关文章:

java - 无向图DFS的并行实现

python - Python 中的并行数据处理

java - XMLBeans 中解析元素的顺序丢失

multithreading - 使用监视器的一车道桥

Java:Runtime.getRuntime().exec() - 如何获取对已启动程序 JFrame 的引用?

java - 当我调整大小或移动滚动条时,我的线条和椭圆消失了

c# - 多个线程向一个列表添加元素。为什么列表中的项目总是比预期的少?

macros - Julia:是否有一个简短的语法可以使所有函数都可用@everywhere

java - XMLBeans 或 JAXB 哪一个更适合模式到代码生成?

java - 无法访问 com.sun.net.ssl.internal.ssl.Provider() Java Mail Api