OMPI_Affinity_str(3) | Open MPI | OMPI_Affinity_str(3) |
OMPI_Affinity_str - Obtain prettyprint strings of processor affinity information for this process
#include <mpi.h> #include <mpi-ext.h> int OMPI_Affinity_str(ompi_affinity_fmt_type_t fmt_type,
char ompi_bound[OMPI_AFFINITY_STRING_MAX],
char current_binding[OMPI_AFFINITY_STRING_MAX],
char exists[OMPI_AFFINITY_STRING_MAX])
There is no Fortran binding for this function.
There is no Fortran 2008 binding for this function.
There is no C++ binding for this function.
OMPI_AFFINITY_LAYOUT_FMT returns ASCII art representing where this MPI process is bound relative to the machine resource layout. For example "[. B][. .]" shows the process that called the routine is bound to socket 0, core 1 in a system with 2 sockets, each containing 2 cores.
See below for more output examples.
Open MPI may bind a process to specific sockets and/or cores at process launch time. This non-standard Open MPI function call returns prettyprint information about three things:
Example 1: Print out processes binding using resource string format.
int rank;
char ompi_bound[OMPI_AFFINITY_STRING_MAX];
char current_binding[OMPI_AFFINITY_STRING_MAX];
char exists[OMPI_AFFINITY_STRING_MAX];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
OMPI_Affinity_str(OMPI_AFFINITY_RSRC_STRING_FMT,
ompi_bound, current_binding, exists);
printf("rank %d: \n"
" ompi_bound: %s\n"
" current_binding: %s\n"
" exists: %s\n",
rank, ompi_bound, current_binding, exists);
...
Output of mpirun -np 2 -bind-to-core a.out:
rank 0:
ompi_bound: socket 0[core 0]
current_binding: socket 0[core 0]
exists: socket 0 has 4 cores rank 1:
ompi_bound: socket 0[core 1]
current_binding: socket 0[core 1]
exists: socket 0 has 4 cores
Output of mpirun -np 2 -bind-to-socket a.out:
rank 0:
ompi_bound: socket 0[core 0-3]
current_binding: Not bound (or bound to all available processors)
exists: socket 0 has 4 cores rank 1:
ompi_bound: socket 0[core 0-3]
current_binding: Not bound (or bound to all available processors)
exists: socket 0 has 4 cores
Example 2: Print out processes binding using layout string format.
int rank;
char ompi_bound[OMPI_AFFINITY_STRING_MAX];
char current_binding[OMPI_AFFINITY_STRING_MAX];
char exists[OMPI_AFFINITY_STRING_MAX];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
OMPI_Affinity_str(OMPI_AFFINITY_LAYOUT_FMT,
ompi_bound, current_binding, exists);
printf("rank %d: \n"
" ompi_bound: %s\n"
" current_binding: %s\n"
" exists: %s\n",
rank, ompi_bound, current_binding, exists);
...
Output of mpirun -np 2 -bind-to-core a.out:
rank 0:
ompi_bound: [B . . .]
current_binding: [B . . .]
exists: [. . . .] rank 1:
ompi_bound: [. B . .]
current_binding: [. B . .]
exists: [. . . .]
Output of mpirun -np 2 -bind-to-socket a.out:
rank 0:
ompi_bound: [B B B B]
current_binding: [B B B B]
exists: [. . . .] rank 1:
ompi_bound: [B B B B]
current_binding: [B B B B]
exists: [. . . .]
mpirun(1)
May 26, 2022 | 4.1.4 |