GNU/Linux >> Znalost Linux >  >> Linux

Paralelizovat Bash For Loop?

Snažil jsem se paralelizovat následující skript, konkrétně každou ze tří instancí smyčky FOR, pomocí GNU Parallel, ale nepodařilo se mi to. 4 příkazy obsažené ve smyčce FOR běží v sérii, každá smyčka trvá přibližně 10 minut.

#!/bin/bash

kar='KAR5'
runList='run2 run3 run4'
mkdir normFunc
for run in $runList
do 
  fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
  fsl5.0-flirt -in $run".poststats.nii.gz" -ref $kar"deformed.nii.gz" -omat $run".norm2.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
  fsl5.0-convert_xfm -concat $run".norm1.mat" -omat $run".norm.mat" $run".norm2.mat"
  fsl5.0-flirt -in $run".poststats.nii.gz" -ref normtemp.nii.gz -out $PWD/normFunc/$run".norm.nii.gz" -applyxfm -init $run".norm.mat" -interp trilinear

  rm -f *.mat
done

Přijatá odpověď:

Proč je prostě nerozdělíte (také znám jako pozadí)?

foo () {
    local run=$1
    fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
    fsl5.0-flirt -in $run".poststats.nii.gz" -ref $kar"deformed.nii.gz" -omat $run".norm2.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 
    fsl5.0-convert_xfm -concat $run".norm1.mat" -omat $run".norm.mat" $run".norm2.mat"
    fsl5.0-flirt -in $run".poststats.nii.gz" -ref normtemp.nii.gz -out $PWD/normFunc/$run".norm.nii.gz" -applyxfm -init $run".norm.mat" -interp trilinear
}

for run in $runList; do foo "$run" & done

V případě, že to není jasné, podstatná část je zde:

for run in $runList; do foo "$run" & done
                                   ^

To způsobí, že se funkce spustí v rozvětveném shellu na pozadí. To je paralela.


Linux
  1. Skriptování v Linuxu:3 postupy pro smyčky while v Bash

  2. Udržujeme vás ve smyčce – příklady opakování pro, Zatímco, dokud

  3. 12 Bash pro příklady smyček pro vaše skriptování prostředí Linux

  1. Jak napsat smyčku v Bash

  2. Bash pro průvodce smyčkou a příklady

  3. Bash for smyčky Příklady

  1. Příklady Bash for Loop a While Loop

  2. Linux bash. pro smyčku a funkci, pro sčítání čísel

  3. Vnořená smyčka for