我正在尝试移植一个MS VC++程序以在岩石集群上运行!我对linux不是很好,但我很想学习,我想移植它对我来说不是一项不可能的任务。然而,我不知道如何利用集群节点。因为执行的代码似乎只在前端服务器上运行(显然)。
我读过一些关于MPI的文章,似乎我应该使用MPI在节点之间进行混合。这个程序目前是这样写的,我有一个同步所有工作线程的主线程。主线程还接收操作模拟或查询其状态的命令。如果模拟设置正确,执行线程之间的通信可以大大减少。我不明白的是,我如何在计算节点上启动流程,以及如何处理节点中的故障?也许在移植我的程序以在集群中运行时,我还应该考虑其他事情?
第一步是移植线程化的MS VC++程序,使其在一台Linux机器上运行。
一旦超过了这一点,就可以修改程序,在线程之外使用MPI(或者代替线程)。你也可以在一台电脑上完成这项工作。
要在集群的多个节点上运行程序,您需要将程序提交给集群使用的任何调度系统。此命令取决于用于Rocks集群的调度软件。询问管理员。它可能看起来有点像mpirun -np 32 yourprogram
。
处理故障是节点的一个广泛问题。你的第一次通过可能只是报告失败,然后使程序失败。如果程序在集群上计算的时间不长,那么重新启动程序,针对故障节点进行调整就足够了。除此之外,您的应用程序可以向磁盘写入所需的中间信息,以恢复它停止的位置。这称为应用程序的检查点。因此,当一个节点失败时,作业就会失败,但重新启动作业并不是从头开始的。更先进的方法是尝试实际检测节点故障并重新安排故障节点上的工作单元。这假设工作单元没有非幂等副作用。这类事情变得非常复杂。检查点可能已经足够好了。