背景:我为当地学术机构的一些朋友编写了一个 Java 程序,该程序模拟微细胞矩阵中晶体的生长,作为一个并发程序,可实现 100,000 次蒙特卡罗迭代,每次迭代包含 14,240^2 个步骤。首先在二维中实现,它能够支持高达 14,240x14,240 大小的矩阵,每个单元为一个字节,以及相关数据结构以支持计算晶粒面积等算法。
该程序被编写为 4 个并发线程,使用四核 CPU(100%),每个线程执行 1/4 步数,线程在 14,240^2/4 次试验结束时“重新组合”,并开始下一次迭代,我在此分叉新线程。对公共矩阵等的访问由关键字控制synchronize
,4 个线程由信号量控制关闭。
此外,我还为他们构建了硬件 - Intel Core i5 2500K 处理器,配备 16GB RAM,双分区为 Windows(供他们使用)和 Linux - 用于我的测试。
问题:这些朋友现在希望我尝试帮忙编写一个三维版本,并愿意接受 10,000x10,000x10,000 矩阵的大小。
我的想法:显然,单台机器无法处理这个问题。是否可以使用两到三台这样的机器组成的集群?如果可以,有人可以指导我找到一个开源、免费、元软件或 Java 实现,可以在这些节点上执行 JVM,然后运行这个程序吗?
在一台机器上,我只能处理 400x400x400 的矩阵。我愿意重写代码,以便矩阵的每个象限在不同的集群上进行处理,每个象限都进行试验,但需要知道如何在不同的机器上同时执行程序以及如何同步计算。
我仍然感谢任何建议或想法。
答案1
移动基础设施可能是您应该开始的地方。尝试构建集群时,消息传递接口非常常见。