MPI: Получение количества узлов (не процессов) в коммуникаторе

StackOverflow https://stackoverflow.com/questions/8314000

  •  25-10-2019
  •  | 
  •  

Вопрос

Я работаю с программами MPI на суперкомпьютере SMP. Я хотел бы определить, какие процессы разделяют один и тот же узел, например, установив целочисленный ключ, который равен во всех процессах на одном узле, и отличается от узла к другому. Целью будет то, чтобы использовать этот ключ для разделения коммуникатора и попросить подкоммуникаторах собирать только процессы в том же узле.

Так что функция будет выглядеть как

int identify_node(MPI_Comm* comm); // returns a key characterizing a node

Предполагая простое распределение процессов, таких как 0,1,2,3 на Node_1, 4,5,6,7 на Node_2 и т. Д. Это вопрос простой формулы, но я хотел бы достичь того же результата без предположения на распределение.

У меня есть идея, как это сделать, используя mpi_get_processor_name: вычисляя хэш имени и предполагая Будьте трудно отслеживать проблему) или использовать какой -то алгоритм соглашения между процессами (какой? Я еще не знаю).

Как бы вы это сделали (эффективно, если это возможно)?

Маттие

Это было полезно?

Решение

Вы правы, что предположение о распределении было бы неразумно, поскольку переупорядочение ранга на самом деле является перспективной техникой для повышения производительности за счет этой регулярности.

Хороший алгоритм хеширования на возвратной стоимости MPI_Get_processor_name Должно быть в безопасности, но если вы хотите дважды проверить, вы всегда можете собрать настоящие имена в каждой группе, используя MPI_Gatherv и сравните их напрямую.

Кажется этот вопрос решает те же проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top