【问题标题】:GNU Parallel: Giving a hint about execution timeGNU Parallel:给出关于执行时间的提示
【发布时间】:2019-05-01 05:19:14
【问题描述】:

给定

一些非常耗时的工作,BIG0BIG1等和一堆小快活fast0fast1

问题

假设 BIG* 作业需要 2 小时fast* 作业需要 1 小时。我如何指示 GNU Parallel 随时间和内核分配作业,如下所示

   time[h]    CPU[0]  CPU[1]     
     0        BIG0    BIG1     
     1         :        :       
     2        fast0   fast1

而不是如下图?

   time[h]   CPU[0]   CPU[1] 
     0       BIG0     fast0   
     1         :      fast1
     2       BIG1            
     3         :      

最后一次设置需要多花一个小时。

【问题讨论】:

  • 按预期时间排序您的工作,然后先提交给parallel 大的。
  • 例如parallel ... ::: BIG* fast*

标签: bash parallel-processing gnu-parallel


【解决方案1】:

一种可能的方法是在提交到 GNU Parallel 之前按预期时间对您的作业进行排序,首先是大型作业:

parallel ... ::: BIG* fast* 

【讨论】:

  • 我想这意味着,“没有办法指示 GNU 并行找到关于什么工作在什么时间运行最好的战略决策”。你介意解释一下你的答案吗?
  • AFAIK 是正确的...没有办法指示 GNU Parallel 就运行作业的顺序做出战略决策 - 它按照您给出的顺序运行作业他们并试图通过在任何其他工作完成后立即开始下一个工作来保持所有 CPU 内核忙碌。因此,您应该按大小顺序提交作业,首先是最大的,以粗略地尝试解决“装箱问题”。我建议的答案就是这样做的。如果您想尝试更复杂的事情,您可以通过其他方式对您的作业进行排序,然后将列表传递到stdin 上的 GNU Parallel