【问题标题】:FORTRAN self-launching MPI programFORTRAN自启动MPI程序
【发布时间】:2012-12-22 08:03:01
【问题描述】:

有什么方法可以在 FORTRAN 程序中调用 mprirun 吗?我正在通过 ssh 在公共 linux 集群上工作,主要思想是在程序执行结束后自动将程序入队。

我试着在程序的最后写下这样的东西:

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

但收到此错误:

sh: mpirun: command not found

有什么想法吗?

【问题讨论】:

  • 因此,请尝试在您对system 的调用中为mpirun 加上系统上mpirun 的绝对路径——如果您不知道那是什么,请查看@987654326 的结果@ 在命令行。我对您为什么要这样做感到有些困惑,您真的想在程序完成后(重新)提交程序吗? (当然,重新提交它无限期
  • 是的,我正在处理长期的流体动力学模拟,所以程序应该执行多次(因为集群上的计划你不能启动涉及许多过程的长时间计算)。因此,在一次迭代结束后,将保存数据以供下次启动。现在我正在手动启动,但这绝对不方便。
  • 我想我明白你想要做什么,但我仍然不会使用system 来做这件事。我会做什么取决于您没有提供给我们的信息,例如您的集群提供的作业管理系统。
  • 不幸的是,我不太了解集群如何管理排队的作业。为了让我的工作排队,我在 putty 控制台中使用 mpirun 命令。在该集群自动将我的程序排入队列并执行它之后,没有足够的资源可用。
  • 我建议,您最好花时间学习如何在集群上配置和管理长时间运行的作业,而不是尝试创建一个使用 @ 调用重新运行自身的程序987654328@例行公事。

标签: ssh fortran cluster-computing mpi


【解决方案1】:

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

  • 如果每个 MPI 进程都执行它,您将运行的实例太多,因此只有一个节点(例如主节点)应该执行它。

  • 原始程序不会完成,直到通过 system() 调用调用的程序没有完成。因此,如果您的队列受挂钟限制,您将一无所获。

通常,这样的任务是通过 shell 脚本完成的。例如。在 Bash 中,你会写如下内容:

while true; do
  mpirun your_program
done

这将不断地重新调用 mpirun,直到未被您或排队系统杀死。 (所以小心!)

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2014-08-22
    • 1970-01-01
    • 2018-11-05
    • 2019-08-29
    • 2016-12-06
    • 2014-08-24
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多