使用call system()会导致程序挂起... 50%的时间

时间:2016-12-20 22:46:18

标签: fortran system-calls hang intel-fortran

我开发了一个Fortran代码,其内存要求可以根据使用ifort编译的问题的大小进行扩展。在初始化问题(数组的分配等)之后,代码的主要部分通过一系列函数调用循环。

其中一个功能包括3-5个调用system()命令。有些很简单,只复制目录,如:

call system('cp -r plot_files plot_files1)

虽然有另一个实际上调用了一个运行单独程序的mpiexec。

问题是程序“挂起”系统调用大约50%的时间,但只针对已分配数组的大问题(〜array(300000))。

挂起我的意思是当我qstat时,它仍然显示正在运行但是使用pstack,strace,cat / proc / PID / status搜索PID会显示PID不再存在。

在大量初始化之前,代码中有一个调用system(),并且只有在分配了数组之后才会在那里失败。这让我相信这是一个内存问题,但在挂起过程中的监控显示有足够的​​内存可用。

[top -cbp PID before the program hangs][1]

我最初使用OpenMP进行编译,希望将来可以并行化代码。使用OpenMP,失败率约为80%。当OpenMP被取出时,失败率降至50%左右。我搜索并搜索了这个问题的可能原因并空手而归。

0 个答案:

没有答案