Я хочу запустить параллельное приложение с 2 процессами в системе с 24 ядрами.Я хочу, чтобы первый процесс использовал ядра 0-11, а второй - ядра 12-23.Я смог добиться этого с помощью следующей команды:
mpirun -np 2 -binding user:0-11,12-24 ./a.out
Проблема с этим заключается в том, что мое приложение внутренне запускает большое количество потоков, над которыми у меня нет контроля.Когда я сгибаю процессы к ядрам, как указано выше, потоки, запускаемые процессами, не «плавают» в диапазоне ядер, выделенных этому процессу.Например, с этой привязкой я ожидал, что потоки T1-T4, запущенные процессом с рангом 0, смогут работать на любом ядре от 0 до 11. Однако, используя top
, я заметил, что процесс, а также запущенные потокипроцесс остается привязанным к первому ядру в диапазоне, выделенном для них, то есть ядру 0 для процесса с рангом 0. Эта конфигурация приводит к неоптимальному использованию ядер, которые у меня есть в системе, чего я хочу избежать.
Как и следовало ожидать, я не сталкиваюсь с этой проблемой, когда не использую привязки к ядру, например
mpirun -np 2 ./a.out
Но эта конфигурация не позволяет мне сопоставить определенные ядра с определенными процессами, что я и хочубыть в состоянии сделать.
Есть ли способ добиться такого "плавающего" связывания процесса с ядром, используя mpich.Если нет, я бы хотел попробовать и другие реализации MPI.