2013-01-08 57 views
0

有没有办法在FORTRAN程序中调用mprirun?我正在通过ssh在公共Linux集群上工作,主要想法是在程序执行结束后自动将其排入队列。FORTRAN自启动MPI程序

我试图在节目的最后写的是这样的:

CALL system('mpirun -np 16 -maxtime 100 TestNP') 

但收到此错误:

sh: mpirun: command not found 

任何想法?

+1

因此,尝试在您的系统调用'mpirun'作为前缀'mpirun'与您的系统上的'mpirun'的绝对路径 - 如果你不知道是什么看着在命令行使用哪个mpirun的结果。我对你为什么试图这样做有点困惑,你真的想在完成时重新提交程序吗? (当然,重新提交它*无限*) –

+0

是的,我正在处理长期的流体动力学模拟,所以程序应该执行很多次(因为集群上的计划你不能启动涉及多时间的计算过程)。因此,一次迭代结束后,数据将被保存以供下次启动。现在我正在手动启动,但这绝对不方便。 –

+1

我想我明白你在做什么,但我仍然不会使用'system'来调用它。我会做什么取决于你没有给我们的信息,比如你的集群提供了什么作业管理系统。 –

回答

2

问题是缺少路径前缀,因此指定mpirun的绝对路径应该有所帮助。但是有几个问题,你的方法:

  • 如果每个MPI进程执行它,你将有太多的情况下运行,节点所以只有一个(例如主节点)应该执行它。

  • 原始程序不会完成,直到通过system()调用调用的程序没有完成。所以,如果你的队列受到时钟限制,你根本没有获得任何东西。

通常,像这样的任务是通过shell脚本完成的。例如。在bash,那么你会写是这样的:

while true; do 
    mpirun your_program 
done 

这不是之前由您或排队系统杀死不断重新调用的mpirun。 (所以要小心与它!)