GNU Parallel和SIGSEGV / SIGABRT

时间:2015-02-04 15:00:03

标签: segmentation-fault gnu-parallel

为了将模拟的时间从15天减少到更少的东西,我研究了GNU Parallel。它完成了这项工作,但却抛出了一些我无法找到解释的错误。

代码是:

parallel "./create_ffile.py -r {2} -s {1}; GENENMM -pdb file.pdb -fcust ffile.txt; DIAGSTD; FREQEN; RMSCOL" :::: arg1.txt arg2.txt

其中GENENMM,DIAGSTD,FREQEN和RMSCOL是fortran代码,argfiles包含变量以创建一个输入到GENENMM的ffile.txt。

错误是:

Program received signal SIGSEGV: Segmentation fault - invalid memory peference. Backtrace for this error: #0 aaaaaaaaaaaa #1 ..... etc

Program received signal SIGABRT: Process abort signal. Backtrace for this error: #0 aaaaaaaaaaaa #1 ..... etc

这两个错误后跟(core dumped) DIAGSTD(core dumped) RMSCOL

我无法理解的是,为什么它们仅出现在某些{1} - {2}组合而非全部。此外,这两个错误有时会一起出现,有时只会出现其中一个错误。从我在网上看到的是,fortran代码发生了什么。但为什么它不会发生在所有文件中呢?这是否与它们全部并行运行有关?

感谢您提前提供任何帮助/意见! 玛丽

1 个答案:

答案 0 :(得分:0)

我不清楚不同程序使用哪些文件。我的猜测是程序使用相同的文件。因此,如果同时运行多个副本,它们将相互干扰,但如果它们是串行运行则不会发生这种情况。

因此解决方案是让每个副本在不同的文件上运行。执行此操作的标准方法是为每个副本创建一个目录。像这样:

parallel "mkdir {#}; cd {#}; ../create_ffile.py -r {2} -s {1}; GENENMM -pdb ../file.pdb -fcust ffile.txt; DIAGSTD; FREQEN; RMSCOL" :::: arg1.txt arg2.txt