У меня есть [; N;] рабочие единицы, [; w_n;], которые эффективно смущающе распараллеливаются. Каждый из них занимает приблизительно определенный отрезок времени, [; t_n;], который мы знаем заранее.Эффективное параллелирование независимых задач
Учитывая, что мне нужно, возможно, потребуется обработать некоторое подмножество рабочих единиц и ограничение, что я могу использовать максимум [; P;] процессов, каждый на отдельных процессорах, как эффективно распределять рабочие единицы , заранее, к процессам, таким образом, чтобы все процессы заканчивались как можно ближе друг к другу (по времени)?
У меня есть вопрос. У нас есть представление о том, как долго каждая из рабочих единиц будет работать (и ожидания не равны). Рабочие единицы, подлежащие обработке, должны быть распределены для обработки до начала вычислений. – skeevey
* Должно быть выделено? Вы уверены, что это требование? Если это так, сначала выберете статическое расписание и будете жить с последствиями. Это, скорее всего, даст вам более длительное время автономной работы, чем динамическое расписание, что может в значительной степени учитывать фактическое изменение. Это компромисс, который вы хотите сделать? Если нет, мой B) ответ, вероятно, лучший. –
Вариант использования немного необычен, но я думаю, это означает, что наше распределение задач должно быть заранее. Мы применяем много преобразований к данным, содержащимся в большом блобе (zip, содержащем сотни тысяч xml-файлов). Каждая задача (преобразование) применяется к каждому XML-файлу, и вывод последовательно записывается в набор выходных файлов, по одному для каждого преобразования. Распределяя, как и мы, мы избегаем любой проблемы безопасности потоков, поскольку нет общих ресурсов помимо входного файла (только для чтения). – skeevey