【发布时间】:2015-10-19 20:01:43
【问题描述】:
作为加速系统中某些 CPU 密集型处理的尝试的一部分,我希望并行化对外部二进制文件的昂贵调用。在多个进程中运行此二进制文件的开销比我预期的要多得多,我需要一些帮助来弄清楚它的来源。
在一台 8 核机器上,当我使用 bash 中的循环顺序运行 6 次二进制调用时,时间是这样的:
real 0m7.034s
user 0m6.798s
sys 0m0.199s
当我执行相同的循环,但用& 后跟wait 指示在后台运行调用时,它的时间是这样的:
real 0m9.824s
user 0m54.048s
sys 0m0.458s
二进制文件读取几个不变的数据文件 21M 和 164K,然后读取单个
这是我用来并行执行调用的 bash 脚本。对于顺序行为,除了 if 块消失并且 & 从命令中删除之外,它是相同的。
SPAWN_COUNT=6
for i in 1 2 3 4 5 6; do
/opt/netMHCpan-2.8/netMHCpan /tmp/test_input -ic50 -a BoLA-D18.4 -l 10 > /dev/null &
NPROC=$(($NPROC+1))
if [ "$NPROC" -ge "$SPAWN_COUNT" ]; then
wait
NPROC=0
fi
done
【问题讨论】:
-
它使用了多少内存?这些症状看起来像是在颠簸。
-
在执行这两个测试时尝试在另一个窗口中运行
vmstat 1。 -
它正在读取的文件有多大?
-
您能展示一下您是如何执行循环和非循环脚本的吗?
-
看来内存使用不是问题,运行脚本前的可用内存为 12512256,执行脚本时达到的最低值是 12277468。
标签: linux bash process parallel-processing