Производительность MPI_Reduce vs (MPI_Gather + Reduction on Root) - PullRequest
0 голосов
/ 25 апреля 2018

CRAY суперкомпьютер с использованием библиотеки MPICH2. Каждый узел имеет 32 ЦП.

У меня есть одно число с плавающей точкой на N разных рангах MPI, где каждый из этих рангов находится на отдельном узле. Мне нужно выполнить операцию сокращения на этой группе поплавков. Я хотел бы знать, является ли MPI_Reduce быстрее, чем MPI_Gather с уменьшением, рассчитанным для корня, для любого значения N. Пожалуйста, предположите, что сокращение, выполненное для корневого ранга, будет сделано с использованием хорошего алгоритма параллельного сокращения, который может использовать N потоков .

Если оно не будет быстрее для любого значения N, будет ли это верно для меньшего N, например, 16 или большего N?

Если это правда, то почему? (Например, будет ли MPI_Reduce использовать шаблон связи дерева, который стремится скрыть время операции сокращения в подходе, который он использует для связи со следующим уровнем дерева?)

1 Ответ

0 голосов
/ 25 апреля 2018

Предположим, что MPI_Reduce всегда быстрее, чем MPI_Gather + локальное уменьшение.

Даже если бы был случай N, когда уменьшение медленнее, чем сбор, реализация MPI могла бы легко реализовать сокращение в этом случае с точки зрения сбора + локального сокращения.

MPI_Reduce имеет только преимущества перед MPI_Gather + локальное снижение:

  1. MPI_Reduce - операция более высокого уровня, дающая реализации больше возможностей для оптимизации.
  2. MPI_Reduce нужно выделить гораздо меньше памяти
  3. MPI_Reduce необходимо передавать меньше данных (если используется дерево) или меньше данных по одной и той же ссылке (если используется прямой all-to-one)
  4. MPI_Reduce может распределять вычисления по большему количеству ресурсов (например, используя древовидную схему связи)

Это сказало: Никогда не предполагайте ничего о производительности. Измерить.

...