【问题标题】:Bash loop - parallelization but also iterationBash 循环 - 并行化和迭代
【发布时间】:2019-02-14 01:00:46
【问题描述】:

目标如下:我总共有 40 个 FPGA。 10 个 FPGA 连接到一个编程器,即我有 4 个编程器来烧写所有 40 个 FPGA。 FPGA 只能在每个编程器上连续编程。

现在我需要一个循环来对所有 40 个 FPGA 进行编程。为了加快/加速过程,我想并行编程 4 个程序员的 FPGA,即并行 4 个闪存脚本。在执行每个编程器的下一个刷写过程之前,必须完成刷写过程。 为简单起见,我们假设 FPGA 的编号为 01 到 40。

  • programmer1: FPGA01,..,FPGA10
  • programmer2: FPGA11,..,FPGA20
  • programmer3: FPGA21,..,FPGA30
  • programmer4: FPGA31,..,FPGA40

这意味着FPGA02只有在FPGA01完成后才能刷新。 但是FPGA01、FPGA11、FPGA21和FPGA31应该是并行烧写的。

下面代码的问题是进程没有等到刷机完成。

for i in `seq 1 10`
do
   my_flash_script.py --FPGA 0$i &
done

【问题讨论】:

    标签: bash loops parallel-processing iteration


    【解决方案1】:

    似乎您在后台处理错误的事情。试试:

    for i in $(seq -w 1 10); do my_flash_script.py --FPGA $i; done &
    for i in $(seq -w 11 20); do my_flash_script.py --FPGA $i; done &
    for i in $(seq -w 21 30); do my_flash_script.py --FPGA $i; done &
    for i in $(seq -w 31 40); do my_flash_script.py --FPGA $i; done &
    wait
    

    (请注意,如果您将设备编号为 0 到 39,这会变得更加自然,但这完全是一个不同的问题。)

    【讨论】:

    • 为什么不用{01..10} 而不是seq
    • @karakfa 没有理由,只是与 OP 保持一致(并通过反引号来证明 $()!)
    猜你喜欢
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2023-03-27
    相关资源
    最近更新 更多