问题标签 [gnu-parallel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - GNU Parallel 和 Bash 函数:如何运行手册中的简单示例
我正在尝试学习 GNU Parallel,因为我有一个案例,我认为我可以轻松地并行化 bash 函数。因此,在尝试学习时,我去了GNU Parallel 手册,那里有一个例子……但我什至无法让它工作!以机智:
如您所见,我什至无法运行简单的示例。因此,我可能正在做一些非常愚蠢和基本的事情……但我不知所措。
ETA:根据评论者的建议(chmod +x,set -vx):
ETA2:请注意,我可以在脚本中调用'doit 1',比如说,它会这样做。所以这个函数是有效的,它只是没有......导出?
gnu-parallel - GNU Parallel:从终端读取输入时抑制警告
当从终端读取输入时,GNU Parallel 总是显示警告:
但有时我确实想从终端读取(例如,当我从其他地方逐项复制和粘贴内容时)。是否可以关闭此警告?man parallel
我在or中找不到这样的选项man parallel_tutorial
。
请注意,我不想要一个廉价的解决方案2>/dev/null
,因为来自其他程序的警告消息也会被关闭。例如,考虑以下简单脚本:
打印到的消息stderr
将全部被禁止。
刚刚意识到我可以做一个cat
或一些read </dev/tty
来达到我想要的效果。但是,让我们只关注最初的问题。
macos - Mac OS X:GNU 并行无法找到远程服务器上的内核数
我使用自制软件在我的 Mac 上安装了 GNU 并行,这样我就可以在我大学的服务器上远程运行一些测试。我正在快速浏览教程,但是当我运行时
我收到了消息
可能相关,我从来没有在我的路径中添加并行,并得到警告说“并行”不是一个可识别的命令,但并行运行无论如何并且仍然正确地回显。这个特定的服务器有 16 个内核,我怎样才能并行识别它们?
ubuntu - GNU 并行取消链接错误
在虚拟 Ubuntu 服务器上本地安装了 GNU Parallel:
并行运行时,我在 STDERR 上收到以下错误:
关于这意味着什么以及如何解决它的任何建议?
我已经调查过的事情:
- 权限我对所有文件和目录都有读写权限。
错误安装这可能是错误的安装。要安装我使用
/li>./configure --prefix=$HOME
. 这是 configure.log 的输出:
奇怪的是缺少的是uname -p
. lscpu 显示:
parallel-processing - 使用从文件中读取的两个参数启动命令(phantomjs)
我有一个文件,每行包含两个字符串,它们是从 shell 启动命令(phantomjs)的两个参数。我会使用 GNU 并行来为每一行启动我的命令。现在,如果我手动启动,我会写:
一切正常。但是如果我尝试并行,就会出现问题:
这是输出
而且我不明白为什么它不起作用,以及为什么在链接后的详细模式(前两行)中有\
字符。
猫兽医输出:
gnu-parallel - Freeing unused allocated nodes on a SLURM cluster
I'm running some batches of serial programs on a (very) inhomogeneous SLURM cluster (version 2.6.6-2), using GNU 'parallel' to do the distribution. The problem that I'm having is that some of the nodes finish their tasks a lot faster than the others, and I end up with situations like, for example, a job that's allocating 4 nodes but is only using 1 during half of the simulation.
Is there any way, without administrator privileges, to free one of these unused nodes? I can mitigate the problem by running 4 jobs on individual nodes, or with files containing lists of homogeneous nodes, but it's still far from ideal.
For reference, here are the script files that I'm using (adapted from here)
job.sh
command_list.sh
arrays - 在 GNU Parallel 中访问关联数组
在 Bash 中假设以下内容:
GNU Parallel 也可以这样做,确保使用关联数组的索引,而不是序列?数组无法导出的事实是否使这变得困难,如果不是不可能的话?
parallel-processing - Gnu Parallel:嵌套并行
是否可以从由 gnu parallel 生成的脚本的多次运行中调用 gnu parallel?
我有一个运行 100次顺序迭代的 python 脚本,并且在每次迭代中的某个地方,并行计算 4 个值(使用 gnu 并行)。现在我想再次使用 gnu 并行生成多个这样的脚本。这可能吗?gnu parallel 会很好地利用可用内核吗?
例如,如果在内部循环中,在 4 个值中,有 2 个已经完成并且 2 个正在运行,因此单个脚本在计算完所有 4 个值之前无法进行下一次迭代。两个空闲核心是否会自动用于计算脚本不同运行的结果?如何指定可用内核的总数?在内部调用并行还是外部调用?
这个问题表明可以嵌套调用并行,但我不确定当我从脚本内部调用嵌套并行时这是否会改变。
PS:抖动不是问题,我可以使用大型集群中的大量内核。
PS2:gnu-parallel 是一个很棒的工具......谢谢!:)
bash - 运行——一个最初未知的——并行的 bash 命令数
我希望能够运行一系列命令,而无需事先知道具体有多少和哪些。这些命令通常是一些计算,每个计算需要几个小时/几天。我需要一些方法来修改后验命令列表,因为它在集群上运行,我需要提前保留节点。
我希望它(无论它是什么)(i)在它运行时读取命令并在处理器释放时继续启动它们,以及(ii)在没有更多命令运行时退出。
实现这一目标的最简单方法是什么?
编辑:这有效(与 GNU 并行)
首先,按照答案中的建议,修改parallel
(例如/usr/bin/parallel
),改变
至
然后像这样测试:
笔记
- “-u”用于“ungroup”,以便所有行都在它们到来时被读取、执行和打印,并且 procs 可用
- “-E EXIT”是我们可以杀死的:在写完 EXIT 之后,必须写另一个(任意)字符串,这样 'tail -f' 才会死掉。(如果没有上述并行修改将保持流打开,这将不起作用)
- 如果流为空且 CPU 空闲,它不会退出:我认为这是一个更复杂的问题,也涉及同步,尽管它可以通过类似
if(items_processed>0 && nprocs_running==0) exit
. 然后仍然存在杀死尾巴的问题,但这可能会通过定期向输入文件写入一些虚假内容来以一种丑陋的方式解决。
我试过的
我能想到的最简单的语法是这样的,使用 GNU 并行:
这很好用......除了,如果命令的数量小于 CPU 的数量(这很常见,我可能从 16-cpu 机器上的 10 个进程开始)它将遇到 EOF,关闭流,我看到无法添加更多命令。因此,只要这些正在运行的命令结束,它就会完成。
为了避免 EOF 问题,我想我可以用 tail 跟随流
例如在这个简单的测试中:
这非常接近,我可以添加命令并且它不会关闭文件。但是,它永远不会结束,并且在读取“退出”时不会停止,而是挂起。我不确定为什么。也许它正在读取块。(??)此外,如果所有进程都已完成并且文件中没有任何事情可做,它不会停止。
(编辑这可能与答案中提出的错误有关)
或者,我可以想象一些事情,为每个 CPU 启动一些带有“等待 PID”的子进程,但它看起来过于复杂,而且这似乎正是 GNU/parallel 应该做的事情。
感谢您的任何帮助或建议!
根据此处 的评论进行编辑,这至少会退出,但它首先需要关键字“退出”。
正如该线程中所建议的,也可以使用“xargs -P2”而不是“parallel -j2”,但这并不能解决问题。
gnu-parallel - GnuParallel:在集群上并行化脚本,脚本将文件写入主节点
我有一个简单的 bash 脚本,它将文本文件中的目录名称列表作为输入。它一个一个地遍历这些目录,将输出复制pwd
到一个文件中,并将这个文件移动到一个结果目录中。我可以使用 Gnuparallel 在我的 4 核机器上轻松并行化这个脚本。bash 脚本 ( myScript.sh
) 如下所示:
现在我想在集群上并行化相同的脚本,所有工作节点都挂载了主节点的主目录,所以我可以看到ls /home/zahaib/
所有工作节点上的输出。
我尝试使用--env
导出par_func
. 我还有一个workerList.txt
文件中的工作节点列表。我最初的想法是parallel
通过更改上面脚本中的最后一行来调用以下内容:
但是,这似乎不起作用,并且主节点上的外壳在我执行之后就挂起./myScript.sh
。我在这里想念什么?
我的 folderList.txt 的内容如下:
我的workerList.txt的内容如下: