Segmentation fault GNU并行和SIGSEGV/SIGABRT

Segmentation fault GNU并行和SIGSEGV/SIGABRT,segmentation-fault,gnu-parallel,Segmentation Fault,Gnu Parallel,为了将模拟时间从15天缩短到更少,我研究了GNU并行。它确实起到了作用,但也出现了一些我无法解释的错误 代码是: parallel.“/create_ffile.py-r{2}-s{1};GENENMM-pdb file.pdb-fcust ffile.txt;DIAGSTD;frequen;RMSCOL:::arg1.txt arg2.txt 其中GENENMM、DIAGSTD、FREQUEN和RMSCOL是fortran代码,arg文件包含用于创建馈送到GENENMM的ffile.txt的变

为了将模拟时间从15天缩短到更少,我研究了GNU并行。它确实起到了作用,但也出现了一些我无法解释的错误

代码是:

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

其中GENENMM、DIAGSTD、FREQUEN和RMSCOL是fortran代码,arg文件包含用于创建馈送到GENENMM的ffile.txt的变量

错误是:

程序接收信号SIGSEGV:分段故障-内存引用无效。
此错误的回溯跟踪:
#0 AAAAAAAAAAA
#1  .....
etc

程序接收信号SIGABRT:处理中止信号。
此错误的回溯跟踪:
#0 AAAAAAAAAAA
#1  .....
etc

这两个错误后面都是
(堆芯转储)DIAGSTD
(堆芯转储)RMSCOL

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

提前感谢您的帮助/意见!
玛丽

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

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

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

谢谢这和我断断续续思考时得出的结论是一样的。这些程序确实会生成连续程序使用的文件。另一种方法可以是简单地使用参数重命名文件,然后使用该名称显式地将它们提供给下一个程序。