CRAY суперкомпьютер с использованием библиотеки MPICH2. Каждый узел имеет 32 ЦП.
У меня есть одно число с плавающей точкой на N разных рангах MPI, где каждый из этих рангов находится на отдельном узле. Мне нужно выполнить операцию сокращения на этой группе поплавков. Я хотел бы знать, является ли MPI_Reduce быстрее, чем MPI_Gather с уменьшением, рассчитанным для корня, для любого значения N. Пожалуйста, предположите, что сокращение, выполненное для корневого ранга, будет сделано с использованием хорошего алгоритма параллельного сокращения, который может использовать N потоков .
Если оно не будет быстрее для любого значения N, будет ли это верно для меньшего N, например, 16 или большего N?
Если это правда, то почему? (Например, будет ли MPI_Reduce использовать шаблон связи дерева, который стремится скрыть время операции сокращения в подходе, который он использует для связи со следующим уровнем дерева?)