У меня есть число «сайтов» (m), каждое из которых должно обрабатывать событие (куски данных, все доступные на ходу). Каждое событие (n из них) отправляется на каждый сайт для обработки. Поэтому вы можете подумать, что у меня есть nxm-задачи. Порядок обработки не важен, только один сайт может не обрабатывать более одного события за раз (так что Task (m, x) не может работать параллельно с Task (m, y))Выполнение нескольких задач параллельно с зависимостями
В настоящее время он реализован с использованием «OMP параллель» на сайтах, вложенных в регулярном для цикла по событиям
for(...event...)
#pragma omp parallel for
for(...site...)
site.process(event)
Это работает отлично, однако, не все сайты имеют одинаковую сложность для каждого события. то есть все сайты должны ждать самого медленного сайта, прежде чем переходить к следующему событию. Я предполагаю, что если я разрешу рабочим перейти к следующему событию, я могу сэкономить в два раза.
Каков наилучший способ реализации этого? Я использую C++ Я смотрю в TBB Flow Graph или несколько линий трубопроводов ...
Еще одно соображение заключается в том, что каждое «событие» должно считываться с диска и занимает немного памяти. Хотя пока не критично, я хотел бы иметь как можно меньше событий в системе (или ограничить их). В текущей реализации у меня есть только одна (плюс пара, подготовленная в фоновом режиме) Thanks
Вы не указали никаких зависимостей. может ли сайт A завершить все задачи 1..n до начала работы сайта B? – NiRR
есть. Возможно, зависимости не лучшее слово. Предел распараллеливания ...? Итак, да, я мог бы каждый сайт обрабатывать все события, а затем переходить на следующий сайт. Это просто реверсирует порядок двух циклов (оставляя внутренний с параллелью), но я не сумасшедший об этом решении из-за накладных расходов на подготовку (чтение) всех событий m раз. – user2232888
Вам все еще нужен ответ? – Anton