Цикл Bash - распараллеливание, но также итерация - PullRequest
0 голосов
/ 14 февраля 2019

Цель следующая: у меня всего 40 ПЛИС.10 ПЛИС подключены к одному программисту, т.е. у меня есть 4 программиста для прошивки всех 40 ПЛИС.FPGA могут программироваться только последовательно для каждого программиста.

Теперь мне нужен цикл, который программирует все 40 FPGA.Чтобы ускорить / ускорить процесс, я хотел бы запрограммировать FPGA 4 программистов параллельно, то есть 4 flash-скрипта параллельно.Процесс перепрошивки должен быть завершен перед выполнением следующего процесса перепрошивки каждого программиста.Для простоты предположим, что 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

1 Ответ

0 голосов
/ 14 февраля 2019

Похоже, вы не правы.Попробуйте:

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, но это совсем другая проблема.)

...