2015-02-04 5 views
1

Чтобы уменьшить время для моделирования от 15 дней до чего-то гораздо меньшего, я заглянул в GNU Parallel. Он выполняет эту работу, но вызывает некоторые ошибки, и я не могу найти объяснения.GNU Parallel и SIGSEGV/SIGABRT

Код:

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 содержат переменные для создания ffile.txt, который подается в GENENMM.

Ошибки:

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. Но почему это не происходит для всех файлов? Связано ли это с тем, что все они работают параллельно?

Спасибо за любую помощь/комментарии заранее! Marie

ответ

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 
+0

Спасибо! Это тот же самый вывод, к которому я пришел, размышляя об этом. Программы действительно создают файлы, которые используются последовательными программами. Другой способ может состоять в том, чтобы просто переименовать файлы с помощью аргументов, а затем явно передать их в следующую программу, используя это имя. – syna