Я работаю с MPI, и у меня есть определенная иерархия операций. Для конкретного значения параметра _param
я запускаю 10 проб, каждый из которых запускает определенный процесс на отдельном ядре. Для значений п _param
, код выполняется в определенной иерархии, как:Вычисление использования независимых ядер и привязка процесса к ядру
driver_file -> запускает один процесс, который проверяет, если имеющиеся процессы более чем 10. Если более чем 10 доступны, то он запускает экземпляр процесс с определенным значением _param
передается в качестве аргумента в coupling_file
coupling_file -> делает некоторые элементарные вычисления, а затем запускает 10 процессов с использованием MPI_Comm_spawn()
, каждый из которых соответствует trial_file при прохождении _trial
в качестве аргумента
trial_fil е -> вычисляет работу, возвращает значения в coupling_file
Я перед двумя дилеммами, а именно:
Как определить необходимое условие для ядер в driver_file? Как и в том, как узнать, сколько процессов было завершено, чтобы я мог правильно планировать процессы на незанятых ядрах? Я подумал, может быть, добавить блокировку
MPI_Recv()
и использовать его для передачи переменной, которая сообщила бы мне, когда какой-то процесс будет завершен, но я не уверен, что это лучшее решение.Как обеспечить соответствие процессов различным ядрам? Я подумал об использовании чего-то вроде
mpiexec --bind-to-core --bycore -n 1 coupling_file
, чтобы запустить один файл связи. За этим последует что-то вродеmpiexec --bind-to-core --bycore -n 10 trial_file
, запущенное сообщением connection_file. Однако, если я привязываю процессы к ядру, я не хочу, чтобы одно и то же ядро имело два и более процессов. Как и в, я не хочу_trial_1
_coupling_1
для запуска на ядреx
, затем запускаю еще один процессcoupling_2
, который запускает_trial_2
, который также привязывается к ядруx
.
Любой ввод будет оценен. Благодаря!
Как вы хотите фиксированное количество процессов, почему бы не начать их с mpiexec, а затем просто раздавать задания им? Возможно, вам придется добавить некоторую логику обработки клиент-сервер, но вы избавитесь от нереста, и все процессы могут быть надлежащим образом закреплены. – haraldkl