我正在开发一种科学的应用程序,用于执行实物模拟。使用的算法是O(n3),所以一大集的数据需要一个很长的时间来处理。该应用程序运行一个模拟约有17分钟,我得走大约25,000模拟。那是大约一年的处理时间。

好消息是,该模拟是完全彼此独立,这样我就可以很容易地改变程序,以分发工作在多个计算机。

有多种解决方案,我可以看到实施这样的:

  • 得到一个多核心计算机和分发工作之间所有的核心。不足为什么我需要做的。
  • 写的应用程序连接的多个"处理"的服务器和中分发的载荷在其中。
  • 得到一个集群的linux的廉价电脑,并且有计划把一切都因为一个单一的实体。

选择2号是比较容易实施,所以我不要看这么多建议如何实现这一(可以做的只是通过编写一个程序,等待在给定的港口参数的进程的价值和返回的结果作为一个序列化文件)。这将是一个很好的例子 网格计算.

但是,我想知道在可能性的最后的选择、传统的集群。难的是如何运行的Java计划在linux网?将所有独立的计算机应视为一个单一计算机与多个内核,使它如此容易适应的程序?是否有任何良好的资源指南,这将允许我开始吗?或者我做这个过于复杂和我是最好的选择2号?

编辑:作为额外的信息,我很感兴趣,就如何落实的东西喜欢这篇文章中描述了从有线杂志: 科学替换一台超级计算机与Playstation3linux集群.确切数量两个听起来像要走的路...但是凉爽的因素。

编辑2:计算是非常CPU限。基本上有很多操作上的大矩阵,例如反法和乘法。我试图寻找更好的算法为这些行动,但迄今为止我已经发现,该行动,我需要的是0(n3)(在图书馆通常可用)。该数据集是大(对于这样的操作),但它是建立在客户基础的输入参数。


我看到现在,我有一个误解关于如何计算机机群下linux工作。我不得不假定它会的工作,在这样一种方式,这只会显得你有所有的处理器在所有计算机提供,只是因为如果你有一个计算机有多个核心,但这似乎并不是这种情况。似乎所有这些超级计算机的工作具有节点执行任务的分布式通过一些中心实体,有几个不同的图书馆和软件包允许执行这种分布很容易。

所以,真正的问题变,因为没有这样的事情3号,成:什么是最好的方式创造一个聚集java应用程序?

有帮助吗?

解决方案

我要非常强烈建议Java平行处理的框架,特别是因为你的计算都已经独立的.我做了一个好一点的工作与这种本科和它工作得很好。工作怎样执行已经为你做了所以我认为这是一个很好的方式来实现这一目标,在"编号2."

http://www.jppf.org/

其他提示

3号不是很难做到的。它需要发展两个不同的应用程序,客户和监督员。客户是什么,你已经,应用程序运行一个模拟。但是,它需要改变,以便它连接到主管使用TCP/IP或什么,请求设置的模拟参数。然后,运行模拟和发送的结果返回给主管。主管侦听的请求,客户和对于每个请求,获得未配置模拟数据库并更新数据库,以表明该项目已分配但未完成。在模拟完成后,该监督员更新的数据库的结果。如果主管数据存储在一个实际的数据库(MySql,等等),那么该数据库可以很容易地查询的当前状态的模拟。这应该扩展到那一点时间采取措施提供的模拟数据的所有客户是平等所需的时间进行模拟。

最简单的方法来分配计算在Linux群集使用MPI。我建议你的下载和看MPICH2.它是免费的。 他们的主页这里

如果你的仿真是完全独立的,你不需要的大部分功能MPI。你可能要写几行的C口与MPI,并开始执行你的脚本或Java程序。

你应该看看 依赖, 简单的peer2peer(没有集中的服务器)的集群解决方案为Java。试图依赖分布ExecutorService执行代码的集群。

问候,

-talip

你已经建议,但取消资格:多核心。你可以去多核心,如果你有足够的核心。一个热门话题atm机器计算。Esp。NVIDIAs CUDA是一个非常priomising的方法如果你有许多独立的任务,它有这样做的计算。一个理280提供你280核心,而可以计算到1120-15360线程中同时.对他们,可以解决你的问题。如果它真的可执行性取决于你的算法(数据流与控制流动),因为所有标量处理器操作一个单指令时尚。

缺点是:这将是C/C++、不java

如何优化是你的算法?您使用的是本地布拉斯库?你可以得到关于一个数量级的性能增益的交换从幼稚库的优化。一些像ATLAS系统也将自动传播的计算过多的Cpu系统上,因此,涵盖了1点。

据我所知群通常不是视为一个单一的实体。他们通常被视为单独的节点和编写这样的东西MPI和SCALAPACK分配元素的矩阵到多个节点。这并不真正帮助你所有的东西,如果你的数据组合中存在的一个节点不管怎么说.

你有没有看着 兵马俑?

工作分布你会想要使用 主/工作框架.

十年前,该公司我看了一个类似虚拟化的解决方案,以及太阳、数字和所有支持它的时间,但仅与国家的技术超级计算机硬件的热交换等。自那时以来,我听到Linux的支持类型的虚拟你在寻找解决方案#3,但我从来没有使用它自己。

Java元和性能

但是,如果你做的矩阵计算,你就要做他们在当地的代码,不在Java(假设你使用原语).特别是cache misses是非常昂贵的,并且交错在你阵列会杀了性能。非交大块的存在你的矩阵和机代码会让你大部分的加速,无需额外的硬件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top