В 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
Другие вопросы по тегам