我正在开发一个用于执行物理模拟的科学应用程序.使用的算法是O(n3),因此对于大量数据,处理需要很长时间.该应用程序在大约17分钟内运行模拟,我必须运行大约25,000次模拟.这大约是一年的处理时间.
好消息是模拟完全相互独立,因此我可以轻松地更改程序以在多台计算机之间分配工作.
我可以看到有多种解决方案来实现这一点:
获取多核计算机并在所有核心之间分配工作.不足以满足我的需要.
编写一个连接到多个"处理"服务器的应用程序,并在它们之间分配负载.
获得廉价的Linux计算机集群,让程序将所有内容视为一个单独的实体.
选项号2相对容易实现,所以我不太关注如何实现它的建议(可以通过编写等待给定端口的参数的程序,处理值并返回结果来完成作为序列化文件).这将是网格计算的一个很好的例子.
但是,我想知道最后一个选项的可能性,传统的集群.在linux网格中运行Java程序有多难?是否将所有单独的计算机视为具有多个核心的单台计算机,从而轻松调整程序?是否有任何关于资源的好指针可以让我开始?或者我让这个过于复杂,我最好用2号选项?
编辑:作为额外的信息,我感兴趣的是如何实现这篇文章中描述的内容来自Wired Magazine:Scientific用Playstation 3 linux集群取代了一台超级计算机.确切地说,第二个听起来像是要走的路......但是很酷的因素.
编辑2:计算非常受CPU限制.基本上在大矩阵上有很多操作,例如反向和乘法.我试图为这些操作寻找更好的算法,但到目前为止,我发现我需要的操作是0(n3)(在通常可用的库中).数据集很大(对于此类操作),但它是基于输入参数在客户端上创建的.
我现在看到我对Linux下的计算机集群如何工作有误解.我假设它会以这样一种方式工作:它看起来你所有计算机中的所有处理器都可用,就好像你有一台具有多个核心的计算机一样,但似乎并非如此.似乎所有这些超级计算机都通过让节点执行由某个中央实体分发的任务来工作,并且有几个不同的库和软件包允许轻松地执行此分发.
因此,问题确实变成了,因为没有第3项这样的东西:创建集群Java应用程序的最佳方法是什么?
我非常强烈推荐Java并行处理框架,因为您的计算已经是独立的.我和这个本科生做了很多工作,而且效果很好.已经完成了实施的工作,所以我认为这是实现"2号"目标的好方法.
http://www.jppf.org/