Как определить ранг MPI / номер процесса, локальный для сокета / узла

Скажем, я запускаю параллельную программу с использованием MPI. Команда выполнения

mpirun -n 8 -npernode 2 <prg>

запускает всего 8 процессов. То есть 2 процесса на узел и всего 4 узла. (OpenMPI 1.5). Если узел состоит из 1 ЦП (двухъядерный), а сетевое соединение между узлами - это InfiniBand.

Теперь номер ранга (или номер процесса) можно определить с помощью

int myrank;
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

Это возвращает число от 0 до 7.

Но как я могу определить номер узла (в данном случае число от 0 до 3) и номер процесса внутри узла (число от 0 до 1)?

11
задан ritter 26 January 2012 в 17:30
поделиться