Я работаю с программами MPI на суперкомпьютере SMP. Я хотел бы определить, какие процессы совместно используют один и тот же узел, например, установив целочисленный ключ, который одинаков во всех процессах на одном узле и отличается от узла к другому. Тогда цель будет состоять в том, чтобы использовать этот ключ для разделения коммуникатора, чтобы субкоммуникаторы собирали только процессы в одном узле.
Таким образом, функция будет выглядеть как
int identify_node(MPI_Comm* comm); // returns a key characterizing a node
Предполагая простое распределение процессов, таких как 0,1,2,3 для узла_1, 4,5,6,7 для узла_2 и т. Д., Это вопрос простой формулы, но я хотел бы добиться того же результата без предположения о распределении.
У меня есть идея, как это сделать, используя MPI_Get_processor_name: вычисляя хеш имени и предполагая, что никакие два имени не получат одинаковый хеш (мне это не нравится, потому что если однажды у меня будет два имени с одинаковым хешем , будет трудно отследить проблему) или использовать какой-либо алгоритм согласования между процессами (какой? Я пока не знаю).
Как бы вы это сделали (эффективно, если это возможно)?
Матье