gnu并行单个作业拆分为多线程

gnu parallel single job splitted in multi-threads

我想启动一个作业,它接收两个输入参数,并使用 GNUparallel 在 CPU 的 128 个线程之间拆分执行。我解释一下我做了什么以及我是怎么做到的,并寻求帮助。

我有一个 bash 脚本“job.sh”,我在其中定义了两个变量并启动了一个作业

#!/bin/bash

first=70
second=10

./executable $((first-1)) $second

echo "$first $second"

现在我想使用 GNU 并行将这项繁重的工作拆分为我正在使用的服务器 CPU 的 128 个线程。

阅读文档后,我尝试将 ./executable $((first-1)) $second 行替换为 parallel -j+128 ./executable $((first-1)) $second,我尝试 运行 如下:

user@server$ nohup bash job.sh&

作业失败。任何人都知道如何 运行 与 GNU 并行的可执行文件?

I want to launch a single job, that takes in input two parameters, and split its execution between 128 thread of the CPU with GNUparallel.

这是不可能的。 GNU Parallel 启动作业。它不会神奇地将您的单线程作业变成多线程作业。

一般来说,如果您可以将您的工作表达为:

,那么 GNU Parallel 很有用:
./executable A B
./executable C D
./executable E F
./executable G H
./executable I J
:
./executable Y Z

因此,如果您能解释一种以这种方式表达您的工作的方式,GNU Parallel 可以帮助您运行并行处理这些工作。

可能是这样的:

seq 128 | parallel --dry-run ./executable {} '{= $_++ =}'

(删除 --dry-run 实际上 运行 它)。

我认为您对 GNU Parallel 的功能有错误的印象。考虑花 20 分钟阅读第 1+2 章:https://doi.org/10.5281/zenodo.1146014