Гибридный параллелизм: MPI и TBB

В TBB метод task_scheduler_init(), который часто (и должен ли?) вызываться внутри, является обдуманным дизайнерским решением.

Однако, если мы смешаем TBB и MPI, гарантированно ли будет потокобезопасность без контроля количества потоков каждого процесса MPI? Например, у нас есть 7 ядер (без гиперпоточности) и 2 процесса MPI. Если каждый процесс порождает отдельную задачу TBB с использованием 4 потоков одновременно, возникает конфликт, который может привести к сбою программы во время выполнения.

Я новичок в ТБ. Ждем ваших комментариев и предложений!


person TensorNetowork    schedule 08.08.2017    source источник


Ответы (2)


С точки зрения среды выполнения Intel TBB не имеет значения, является ли это процессом MPI или нет. Таким образом, если у вас есть два процесса, у вас будет два независимых экземпляра среды выполнения Intel TBB. Я не уверен, что понимаю вопрос, связанный с потокобезопасностью, но он должен работать правильно. Однако у вас может быть переподписка, которая может привести к проблемам с производительностью.

Кроме того, вам следует проверить документацию по реализации MPI, если вы используете подпрограммы MPI одновременно (из нескольких потоков), поскольку это может вызвать некоторые проблемы.

person Alex    schedule 15.08.2017

Вообще говоря, это танго в два шага.

  1. MPI привязывает каждую задачу к некоторым ресурсам
  2. среда выполнения потоков (TBB, то же самое относится к OpenMP), как правило, достаточно умна, чтобы связывать потоки в ранее предоставленных ресурсах.

Суть в том, что если MPI привязывает свои задачи к непересекающимся ресурсам, то не должно быть конфликтов, вызванных средой выполнения TBB.

типичным сценарием является запуск 2 задач MPI с 8 потоками OpenMP на задачу на восьмиядерном процессоре с двумя сокетами. пока MPI привязывает задачу к сокету, а среде выполнения OpenMP дается указание привязать потоки к ядрам, производительность будет оптимальной.

person Gilles Gouaillardet    schedule 15.08.2017