好消息是,这些模拟完全独立于彼此,因此我可以轻松地更改程序以在多台计算机之间分配工作负载。
我可以看到多种解决方案来实现这一点:
1.获取多核计算机并在所有核心之间分配工作负载。不足以满足我的需求。 2.编写一个连接到多个“处理”服务器并在它们之间分配负载的应用程序。 3.获取便宜的Linux计算机群,并使程序将所有内容视为单个实体。
选项2相对容易实现,因此我不太需要有关如何实现此操作的建议(只需编写等待给定端口上的参数、处理值并将结果返回为序列化文件的程序即可)。那将是网格计算的一个很好的例子。
然而,我对最后一个选项(传统集群)的可能性感到好奇。在linux网格中运行Java程序有多难?所有单独的计算机是否被视为具有多个内核的单个计算机,从而使其易于适应该程序?是否有任何好的资源指针可以让我入门?或者我是否过于复杂化了,最好选择第二个选项?
编辑:作为额外信息,我对如何实现类似Wired Magazine中描述的内容感兴趣:Scientific replaced a supercomputer with a Playstation 3 linux cluster。明显第二个选项听起来是正确的选择...但酷炫因素。
编辑2:计算非常CPU密集。基本上涉及大量的矩阵操作,例如求逆和乘法。我试图寻找更好的算法来执行这些操作,但到目前为止,我发现我需要的操作是0(n3)(在通常可用的库中)。数据集很大(对于这样的操作),但它是基于输入参数在客户端上创建的。
我现在明白了Linux下计算机集群的工作原理。我曾经认为,它的工作方式就好像你拥有一个具有多个内核的计算机一样,所有计算机上的处理器都可用。但事实并非如此。所有这些超级计算机都是通过节点执行由某个中央实体分配的任务来工作的,并且有几种不同的库和软件包可轻松执行此分发。
因此,问题真正变成了:没有第三种方法,那么创建集群Java应用程序的最佳方法是什么?