如何使这个并行 bash 脚本更加高效?

如何使这个并行 bash 脚本更加高效?

我有一个涉及 afni 命令行工具的简单脚本,我从 bash 并行运行该脚本,但它是磁盘 I/O 密集型的,并且会减慢我们服务器上的速度(仅使用 96 个核心中的 2-3 个),尽管只有一次运行几个作业。在不减慢速度和增加 iowait 的情况下,我一次能够运行的最多作业是 2。我觉得这可能与它写入这么多文件有关,但我还没有找到解决方案。

#!/bin/bash 

task() {
x=$1
SUB_stats="path/to/subject/data/"$x"_cond3.feat/stats/"

cd $SUB_stats

3dcalc -prefix precentral_top_N_voxels_b -a Precentral_b+orig -b T_top_N_voxels_precentral+orig -expr 'a*b'

3dcalc -prefix occipital_top_N_voxels_b -a Occipital_b+orig -b T_top_N_voxels_occipital+orig -expr 'a*b'

3dcalc -prefix temporal_top_N_voxels_b -a Temporal_b+orig -b T_top_N_voxels_temporal+orig -expr 'a*b'


3dmaskave -quiet -sigma precentral_top_N_voxels_b+orig[0..390] > avgroi_precentral_subbrik_topvoxels.txt

3dmaskave -quiet -sigma occipital_top_N_voxels_b+orig[0..390] > avgroi_occipital_subbrik_topvoxels.txt

3dmaskave -quiet -sigma temporal_top_N_voxels_b+orig[0..390] > avgroi_temporal_subbrik_topvoxels.txt

} 

export -f task
cat young_fsf.txt | parallel --nice 15 --progress --eta -j 2 task

相关内容