В SPMD, использующем GNU параллельно, является ли обработка самых маленьких файлов первым наиболее эффективным способом?
Это довольно просто:
Скажем, у меня есть много файлов в папке data/
обрабатывать через какой-то исполняемый файл ./proc
, Какой самый простой способ максимизировать эффективность? Я делал это, чтобы получить некоторую эффективность:
ls --sort=size data/* | tac | parallel ./proc
который перечисляет данные в соответствии с размером, затем tac
(обратная сторона cat
) переворачивает порядок вывода, поэтому сначала обрабатываются самые маленькие файлы. Это самое эффективное решение? Если нет, как повысить эффективность (предпочтительнее простые решения)?
Я помню, что подобная сортировка ведет к повышению эффективности, так как большие задания не блокируют конвейер, но кроме примеров, я не могу найти или вспомнить какую-либо теорию, стоящую за этим, поэтому любые ссылки будут высоко оценены!
1 ответ
Если вам нужно выполнить все задания и вы хотите оптимизировать время для их выполнения, вы хотите, чтобы они выполнялись одновременно. В этом случае вы должны выполнять небольшие задания в последнюю очередь. В противном случае вы можете столкнуться с ситуацией, когда все процессоры выполняются, кроме той, которая только началась на последней большой работе. Здесь вы будете тратить время процессора на все процессоры, кроме одного.
Вот 8 заданий: 7 занимают 1 секунду, одно занимает 5:
1 2 3 4 55555 6 7 8
Сначала о двухъядерных небольших работах:
1368
24755555
Сначала о двухъядерных больших работах:
555557
123468