【问题标题】:gnu parallel single job splitted in multi-threadsgnu 并行单个作业拆分为多线程
【发布时间】:2023-03-14 03:27:01
【问题描述】:

我想启动一个单独的作业,它接受两个参数的输入,并使用 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 并行运行可执行文件吗?

【问题讨论】:

  • 您想以相同的参数 (./executable 69 10) 启动所有作业,还是应该将第一个参数 (69) 始终减一为 (6)?
  • 工作是一个; 69 和 10 是我单作业的输入参数;我只想将工作拆分为 64 个线程。
  • 您只想并行运行./executable 69 10 64 次?
  • 不,我想运行一次,但是将这个单一进程的执行分配在64个线程中。
  • 从我的角度来看,您必须在 ./executable 中实现多线程。

标签: bash multithreading process nohup gnu-parallel


【解决方案1】:

我想启动一个单独的作业,它接受两个参数的输入,并使用 GNUparallel 在 CPU 的 128 个线程之间拆分它的执行。

这是无法做到的。 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

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2013-02-15
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多