1

У меня есть [; N;] рабочие единицы, [; w_n;], которые эффективно смущающе распараллеливаются. Каждый из них занимает приблизительно определенный отрезок времени, [; t_n;], который мы знаем заранее.Эффективное параллелирование независимых задач

Учитывая, что мне нужно, возможно, потребуется обработать некоторое подмножество рабочих единиц и ограничение, что я могу использовать максимум [; P;] процессов, каждый на отдельных процессорах, как эффективно распределять рабочие единицы , заранее, к процессам, таким образом, чтобы все процессы заканчивались как можно ближе друг к другу (по времени)?

ответ

2

A) Если все они являются статистически одинаковыми, и вы не можете контролировать, как долго любой из них работает, я бы предположил, что в среднем вы не можете сделать лучше, чем «процессор при завершении работы блок, выполняет любую незавершенную рабочую единицу и выполняет ее до завершения ». Среднее время выполнения - это сумма (1..N, t_n)/P.

B) Если бы у них было несколько предсказуемых времен, у меня возникло бы желание попросить каждый процесс выбрать оставшуюся рабочую единицу с самым длинным расчетным временем и запустить ее. Сначала он выполняет всю дорогостоящую работу, оставляя много небольших заданий, чтобы заполнить оставшееся время.

C) Если вы настаиваете на статическом расписании, выбранном заранее, запустите алгоритм B) в автономном режиме и предварительно назначьте рабочие единицы для процессов. Это, скорее всего, даст вам более длительное время автономной работы, чем динамическое расписание, что может в значительной степени учитывать фактическое изменение.

+0

У меня есть вопрос. У нас есть представление о том, как долго каждая из рабочих единиц будет работать (и ожидания не равны). Рабочие единицы, подлежащие обработке, должны быть распределены для обработки до начала вычислений. – skeevey

+0

* Должно быть выделено? Вы уверены, что это требование? Если это так, сначала выберете статическое расписание и будете жить с последствиями. Это, скорее всего, даст вам более длительное время автономной работы, чем динамическое расписание, что может в значительной степени учитывать фактическое изменение. Это компромисс, который вы хотите сделать? Если нет, мой B) ответ, вероятно, лучший. –

+0

Вариант использования немного необычен, но я думаю, это означает, что наше распределение задач должно быть заранее. Мы применяем много преобразований к данным, содержащимся в большом блобе (zip, содержащем сотни тысяч xml-файлов). Каждая задача (преобразование) применяется к каждому XML-файлу, и вывод последовательно записывается в набор выходных файлов, по одному для каждого преобразования. Распределяя, как и мы, мы избегаем любой проблемы безопасности потоков, поскольку нет общих ресурсов помимо входного файла (только для чтения). – skeevey

Смежные вопросы