Open MPI поддерживает так называемые файлы рангов, которые определяют отображение каждого ранга на хост и элемент обработки на этом хосте. Вы можете увидеть больше на справочной странице для mpiexec
(ссылка на документацию для v2.1, которая поставляется, например, с Ubuntu 18.04 LTS, но по сути такая же в более новых версиях), но при условии, что вы запускаете все на одном хосте, по крайней мере, с четырьмя ядрами процессора, файл ранга будет выглядеть примерно так:
rank 0=hostname slot=0
rank 1=hostname slot=1
rank 2=hostname slot=0
rank 3=hostname slot=0
rank 4=hostname slot=2
rank 5=hostname slot=3
, где hostname
- имя хоста, возможно, localhost
.
Вот пример:
Во-первых, небольшой служебный скрипт show_affinity
, который отображает сродство ЦП текущего ранга MPI:
#!/bin/bash
echo "$OMPI_COMM_WORLD_RANK: $(grep Cpus_allowed_list /proc/self/status)"
Во-вторых, пример rankfile
:
rank 0=localhost slot=0
rank 1=localhost slot=1
rank 2=localhost slot=0
rank 3=localhost slot=0
rank 4=localhost slot=2
rank 5=localhost slot=3
Запуск MPI show_affinity
с использованием этого файла ранга:
$ mpiexec -H localhost -rf rankfile ./show_affinity
0: Cpus_allowed_list: 0-1
1: Cpus_allowed_list: 2-3
2: Cpus_allowed_list: 0-1
3: Cpus_allowed_list: 0-1
4: Cpus_allowed_list: 4-5
5: Cpus_allowed_list: 6-7
В ЦПУ включена поддержка гиперпоточности, поэтому каждый ранг привязывается к обоим аппаратным потокам.