我的程序显示的 CPU 运行时间比程序实际运行的时间长,代码中没有编写并行化。
代码大部分是用 Fortran 90 编写的(我添加了一两个后来的 Fortran 东西),并用我的 Linux 机器的本机gfortran
编译器编译(--version
信息:GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17) )。我知道gfortran
编译到比 90 更高的标准。
当程序启动时它调用call cpu_time(time_start)
并在它结束之前调用call cpu_time(time_end)
. 在这种情况下,time_end - time_start
以秒为单位给出经过的 CPU 时间。
所以奇怪的是:我使用 HTCondor 提交我的代码,以便在本地网络中任何有可用 CPU 的机器上运行。我的 HTCondor 日志文件显示作业于 07/24 14:17:46 提交,15 秒后开始运行,然后在同一台机器上运行完成,于 07/30 11:01:52 结束,时钟时间不到 6天。但是,time_end - time_start
说CPU 时间是 993535 秒,或超过 11 天。我的代码根本没有并行化,所以我不明白这是怎么回事。 怎么会这样?
我之前已经运行了这个代码数百次并且从未注意到这种现象,但是我也从未仔细检查过。
编辑:我想再次指出我的代码没有并行化,至少没有明确地并行化。我确实使用-O3
标志编译,但我认为这不会引入并行化。如果链接的关于并行 Fortran 的问题/答案确实回答了我关于串行进程的问题,请帮助我理解如何,因为我没有看到连接。
我的 HTCondor 提交脚本如下。我condor_submit
是这个脚本,这就是我运行代码的方式。
executable = /path/to/executable
universe = standard
log = condorlog.log
output = condorstdout.out
error = condorerror.out
should_transfer_files = IF_NEEDED
when_to_transfer_output = ON_EXIT
queue