« Previous - 
    Version 7/9
    (diff) - 
    Next » - 
    Current version
    
    Andrey Golovin, 08.11.2014 00:30 
    
    
{toc}
Использование GNU parallel¶
Итак, есть задача по запуску счёта для некоторого количества задач.
Чаще всего используется скрипт с циклом:
for i in $(seq 0 6);do
#    mkdir model_${i}
##    remove OXT and H1-H2, rename H3 to H in original autodock pdb
    echo "save model_${i}/pep.pdb, all, $i" 
    cat flex_short.pdb   model_${i}/pep.pdb > model_${i}/compl.pdb
 cd model_${i}     
     FlexPepDocking.linuxgccrelease -s compl.pdb  -flexpep_prepack  -ex1 -ex2aro \
     -peptide_chain A -receptor_chain H >& log.prepack 
     FlexPepDocking.linuxgccrelease -s compl_0001.pdb -receptor_chain H  -peptide_chain A \
     -out:file:silent decoys.silent -out:file:silent_struct_type binary \
     -pep_refine -ex1 -ex2aro -use_input_sc  -nstruct 300  >& log.run &
 cd ..    
done
	Часто, в ходе работы надо коментировать некторые строки, так как эти задачи уже выполнены. Так же не плохо бы было реализовать эффективное использование всех вычмслительных ядер компьютера.
Давайте я предложу несколько примеров как эти шаги можно эффективно реализовать с GNU parallel:
Сделать N директорий:¶
parallel --gnu mkdir model_{1} ::: {1..6}
or
export n=6 
parallel --gnu mkdir model_{1} ::: $(seq 1 $n)
	
Генерация скрипта для Pymol¶
parallel --gnu  echo "save model_{1}/pep.pdb, all, {1}"  ::: $(seq 1 $n) > run.pml
	
Склеить файлы:¶
parallel --gnu cat flex_short.pdb model_${1}/pep.pdb > model_${1}/compl.pdb ::: $(seq 1 $n)
	
Запуск задач по prepacking на восьми ядрах:¶
parallel --gnu -j8 "cd model_{1} ; FlexPepDocking.linuxgccrelease @../flags.prepack -overwrite >& log.prepack" ::: $(seq 1 $n)
	
Можно подавать функции bash на исполнение:¶
export SHELL=$(type -p bash)
prepack() {  
      cd model_${1}
      FlexPepDocking.linuxgccrelease @../flags.prepack -overwrite >& log.prepack 
}
n=9
export -f prepack 
parallel -j6   prepack ::: $(seq 1 $n)
	Итак весь скрипт можно представить как набор однострочных команд исполняюшихся паралельно:
#!/bin/bash
export SHELL=$(type -p bash)
prepack() {  
cd model_${1}
      FlexPepDocking.linuxgccrelease @../flags.prepack -overwrite >& log.prepack 
}
refine() {  
cd model_${1}
      FlexPepDocking.linuxgccrelease @../flags.refine -overwrite >& log.refine 
}
export -f prepack refine
n=9
parallel --gnu mkdir model_{1} ::: $(seq 1 $n)
parallel --gnu  echo "save model_{1}/pep.pdb, all, {1}"  ::: $(seq 1 $n) > run.pml
parallel --gnu  cat flex_short.pdb model_{1}/pep.pdb > model_{1}/compl.pdb ::: $(seq 1 $n)
parallel --gnu -j6 prepack ::: $(seq 1 $n)
parallel --gnu -j6 refine ::: $(seq 1 $n)