我有7台运行四核处理器的Gentoo Linux的电脑,我希望能够将程序的执行分发给所有这些机器。 我有一些multithreading程序,我想在集群中使用所有28个可用的CPU,而不是在每个节点上运行7个程序副本。
这就像distcc的想法:我有我的C / C ++项目,如果我用distcc而不是gcc编译源代码,它将编译过程分配给几台计算机,即使在Makefile中我也不需要改变任何东西。
对于集群来说,如果我不需要改变程序源代码中的任何东西(尽pipe我认为这是不可能的),会更好。 但如果需要,我可以更改程序以使用外部API。
有几种方法可以做到这一点,但我怀疑他们中的任何一个都会让你运行你的代码。
对于某些types的工作负载, Hadoop似乎是一个很好的select,并被雅虎等广泛使用和维护。
贝奥武夫集群更像是一个传统的集群。 如果您查看Beowulf维基百科页面 ,可以find可供select的链接以及专注于Rocks等集群的Linux Distros。
从你的问题,听起来像你希望所有的机器神奇地绑定在一起,使一台大型计算机,您可以login并运行程序。 这种魔术被称为SSI(单系统图像),并有许多集群包可以做到这一点。 尝试在维基百科页面上列出的任何一个。
如果你想build立一个传统的集群或者网格,你只需要一个像Torque或Grid Engine这样的工作pipe理器。 ROCKS是开始使用这种types的快速方法。
对此的答案是高度专用的。 3dinfluence已经提到了Hadoop的可能性,如果你的应用程序分解成Map-Reduce执行模型,这是非常好的。
如果您打算将工作负载分布到多个节点,但仍然希望在类似线程的执行模型中只有一个应用程序实例,则需要查看某种forms的MPI。
MPI是一个具有通用接口的标准,但是它有多种实现,如OpenMPI和MPICH 。 从本质上讲,你devise你的应用程序来产生多个彼此之间传递消息的副本。 MPI然后抽象出实际的通信方法。 相反,它提供了一系列原始function,例如您在应用程序devise中使用的发送,接收和广播。 然后实际的通信由您select的MPI堆栈中的模块处理。
OpenMPI包括许多传输,包括共享内存,TCP / IP,InfiniBand,Myrinet Express等等。 你使用哪一个以及如何configuration它们又是高度依赖于应用程序的。
通常,您的MPI任务将使用某种批处理排队系统(如Torque或Sun Grid Engine)在集群上分配节点。 如果您在多个用户之间共享您的集群,并且需要调度您的集群资源,这些会变得更加有用。
我build议你查看一下Gentoo Cluster项目网站,并浏览一些链接的资源。 这些将帮助您更好地了解在集群环境中运行的应用程序,并帮助您缩小需要更多帮助的范围。
你可以考虑用像Cluster Knoppix这样的LiveCD发行版来testing这个想法。