gpt4 book ai didi

linux - 在后台运行作业时导致开销的原因是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:58 24 4
gpt4 key购买 nike

作为加速系统中某些 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,然后读取单个输入文件 <1K,执行 CPU 密集型计算,并将结果写入标准输出。什么可以提供足够的开销以致于并行运行它们的速度变慢?

这是我用来并行执行调用的 bash 脚本。对于顺序行为,除了 if block 消失并且 & 从命令中删除之外,它是相同的。

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

最佳答案

将流程分成更小的部分。
使每个较小的部分成为可执行文件(甚至是带有 chmod u+x $script 的脚本)并随时间测量内存使用情况:

tf='wall:%e s:%S u:%U (%Xtext+%Ddata %F %p %t %Kmem %Mmax)'
/usr/bin/time -f "$tf" "$script"

这应该能让您找到正在消耗您内存的内容(如果有的话)。


编辑:

较小的进程调用报告了这一点(随时间):
wall:1.08 s:0.03 u:1.05 (0text+0data 0 0 0 0mem 11844max) 一个实例
wall:8.89 s:0.41 u:48.93 (0text+0data 0 0 0 0mem 11848max) 并行作业

内存不是问题,仅使用 11.85 兆。

使用 strace(strace -c 脚本)显示有对 wait() 的调用,而且大部分时间都是这些调用。还不清楚(目前)为什么旧的二进制文件会这样。

我会发布更多信息。

关于linux - 在后台运行作业时导致开销的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com