我试图找到一种方法来在群集上执行CPU密集型并行作业.我的目标是为每个核心安排一个作业,以便每个作业有望在计划后获得100%的CPU利用率.这是迄今为止所提出的:
FILE build_sshlogin.sh
#!/bin/bash
serverprefix="compute-0-"
lastserver=15
function worker {
server="$serverprefix$1";
free=$(ssh $server /bin/bash << 'EOF'
cores=$(grep "cpu MHz" /proc/cpuinfo | wc -l)
stat=$(head -n 1 /proc/stat)
work1=$(echo $stat | awk '{print $2+$3+$4;}')
total1=$(echo $stat | awk '{print $2+$3+$4+$5+$6+$7+$8;}')
sleep 2;
stat=$(head -n 1 /proc/stat)
work2=$(echo $stat | awk '{print $2+$3+$4;}')
total2=$(echo $stat | awk '{print $2+$3+$4+$5+$6+$7+$8;}')
util=$(echo " ( $work2 - $work1 ) / ($total2 - $total1) " | bc -l );
echo " $cores * (1 - $util) " …Run Code Online (Sandbox Code Playgroud) linux parallel-processing bash cluster-computing gnu-parallel
编辑2
尝试并行运行后,当我同时运行parallel源代码时,我在终端上获得以下内容/homedtic/gsantamaria/parallel/bin/parallel:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_PAPER = "en_GB.UTF-8",
LC_ADDRESS = "en_GB.UTF-8",
LC_MONETARY = "en_GB.UTF-8",
LC_NUMERIC = "en_GB.UTF-8",
LC_TELEPHONE = "en_GB.UTF-8",
LC_IDENTIFICATION = "en_GB.UTF-8",
LC_MEASUREMENT = "en_GB.UTF-8",
LC_TIME = "en_GB.UTF-8",
LC_NAME = "en_GB.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Run Code Online (Sandbox Code Playgroud)
注意:即使在上述输出之后,该过程仍在运行.
编辑1:
我的pwd是/homedtic/gsantamaria/parallel-20100424,我跑了
./configure --prefix=/homedtic/gsantamaria/parallel (注意 …我想在Centos 7上安装GNU parrallel没有太多信息可以找到.有人能解释我怎么做吗?这是我发现的一些有用的信息
我刚开始使用 gnu-parallel。我正在尝试与几个变量并行进给。假设我有一个包含以下内容的文本文件 (foo.txt),
> cat foo.txt
a b c
d e f
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行以下命令,
> range=$(eval echo {10..15})
> parallel -a foo.txt --colsep=' ' echo {} {#} {1} {2} {3} ::: $range
Run Code Online (Sandbox Code Playgroud)
而不是得到,
10 1 a b c
11 2 a b c
12 3 a b c
13 4 a b c
14 5 a b c
15 6 a b c
10 7 d e f
11 8 d e f
12 9 d e f
14 11 d …Run Code Online (Sandbox Code Playgroud) 我想并行化 curl 请求,我在这里使用了代码。我想使用的输入是使用生成的一系列数字,seq但重定向不断给我错误,比如输入不明确。
这是代码:
#! /bin/bash
brx() {
num="$1"
curl -s "https://www.example.com/$num"
}
export -f brx
while true; do
parallel -j10 brx < $(seq 1 100)
done
Run Code Online (Sandbox Code Playgroud)
我尝试使用 < `seq 1 100` 但这也不起作用。有谁知道我怎么能解决这个问题?
我有 bash 文件 -
cat input.txt | parallel -j4 'python {}'
cp -r outputs /home/usr/my_outputs
Run Code Online (Sandbox Code Playgroud)
我只想在所有作业完成执行后才复制outputs到。my_outputs目前,它看起来像parallel立即返回(启动作业后),然后cp -r立即执行,但我想在复制之前等待作业完成执行。我该怎么做呢?谢谢!
编辑:input.txt 就像 -
run1.py -n 5
run2.py -n 5
run3.py -n 5
run4.py -n 5
Run Code Online (Sandbox Code Playgroud) 我有一个程序只需一个参数.我正在使用gnu parallel来对此参数执行参数扫描.每次运行都会生成一个结果,我想将所有结果附加到单个文件中,比如Results.txt.
这样做的正确方法是什么?
我不应该让每个实例打开文件并写入它,因为这可能会产生冲突并且还会破坏结果的顺序.我能想到这样做的唯一方法是让每个运行在具有唯一名称的文件中生成其输出,然后,当gnu并行完成运行时,使用脚本将结果合并到单个文件中.
谢谢
我一直在使用GNU并行一段时间,主要是为了grep大文件或者在每个命令/ arg实例很慢并且需要跨核心/主机分散时为各种参数运行相同的命令.
跨多个核心和主机也可以做的一件事就是在大型目录子树上查找文件.例如,像这样:
find /some/path -name 'regex'
如果/some/path包含许多文件和包含许多文件的其他目录,则需要很长时间.我不确定这是否容易加速.例如:
ls -R -1 /some/path | parallel --profile manyhosts --pipe egrep regex
想到这样的东西,但ls想要搜索的文件会很慢.那么加快这样一个发现的好方法是什么?
我想在这个命令中使用GNU Parallel:
seq -w 30 | parallel -k -j6 java -javaagent:build/libs/pddl4j-3.1.0.jar -server -Xms8048m -Xmx8048m fr.uga.pddl4j.planners.hsp.HSP -o pddl/benchmarks_STRIPS/benchmarks_STRIPS/ipc1/movie/domain.pddl -f pddl/benchmarks_STRIPS/benchmarks_STRIPS/ipc1/movie/p{}.pddl -i 8 '>>' AstarMovie.txt
Run Code Online (Sandbox Code Playgroud)
我在java程序中有600秒的超时但并行不执行它.流程可以运行2,3,4或更多小时,永不停止.
我在网上尝试了基于GNU教程的命令,但它也不起作用:
seq -w 30 | parallel -k --timeout 600000 -j6 java -javaagent:build/libs/pddl4j-3.1.0.jar -server -Xms2048m -Xmx2048m fr.uga.pddl4j.planners.hsp.HSP -o pddl/benchmarks_STRIPS/benchmarks_STRIPS/ipc1/movie/domain.pddl -f pddl/benchmarks_STRIPS/benchmarks_STRIPS/ipc1/movie/p{}.pddl -i 8 '>>' AstarMovie.txt
Run Code Online (Sandbox Code Playgroud)
我在教程中看到GNU Parallel使用毫秒 - 所以600000是10分钟,这是我需要的但是在12分钟之后该过程仍在运行.我需要6个进程一次运行,每个进程最多10分钟.
任何帮助都会很棒.谢谢.
编辑:为什么人们觉得需要编辑"600秒"到"600秒"等小变化的帖子?停止为业力做这件事..
我要做的一件事就是在GNU Parallel中使用{%}选项进行一些数学运算
cat short | parallel -j 2 echo my_prog ----in {} ----out {/.}.extension ----gpu {= {%}+1 =} {= {%}-1 =}
Run Code Online (Sandbox Code Playgroud)
(我在前面的额外破折号in,out并gpu以防万一.)
内显示的数学{= =}是所有我需要做的,我只是不知道我知道如何将它与写--rpl和--parens
{= =} 是可以在GNU parallel中编写Perl表达式的空间.
此外我的程序没有在这里运行,我只是回显输出,看看是否一切都是正确的.
有人可以解释如何在命令中执行这个简单的数学运算吗?
我的错误是这样的:
parallel: Error: Cannot use {%}+1 : Missing right curly or square bracket at (eval 13) line 2, at end of line
syntax error at (eval 13) line 2, at EOF
Run Code Online (Sandbox Code Playgroud)