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

Я работаю с программами 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: вычисляя хэш имени и предполагая, что никакие два имени не получат одинаковый хеш (мне это не нравится, потому что если однажды у меня будет два имени с одинаковым хешем , будет сложно отследить проблему) или использовать какой-то алгоритм согласования между процессами (какой? Я пока не знаю).

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

Матье

6
задан sunmat 29 November 2011 в 16:12
поделиться