Вот ситуация: я запускаю код оптимизации генетического алгоритма (GA), который вызывает автономный пакет (ccx) для оценки функции.Для повышения эффективности код GA параллельно с использованием MPI.Программа размещена, скажем, N + 1 ядер на кластере HPC.Затем он будет использовать N ядер для параллельного вызова автономного пакета оценки, дождаться их завершения, оценить результаты, а затем сгенерировать новый набор параметров, чтобы начать новый раунд оценок.Этот процесс повторяется до тех пор, пока не будут выполнены определенные критерии.
Вот проблема: Программа иногда перерасходит выделенные ресурсы.Ниже приведен пример вывода команды top
, отправленной мне администратором кластера.Обратите внимание, что загрузка процессора составляет 200%.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7498 bgeng 20 0 148512 17912 5300 R 199.3 0.0 534:31.08 GATOOL
Администратор говорит мне, что мой код где-то выполняет многопоточность.Поскольку гиперпоточность в кластере отключена (т. Е. 1 процесс с ядром 1), он запускает два процесса на 1 ядре и замедляет весь вычислительный узел.
Я не думаю, что многопоточность происходит вавтономный пакет, потому что чрезмерная фиксация не происходит, когда я запускаю его один с одним ядром.Кроме того, кажется, что чрезмерная фиксация происходит только в одном процессе среди всех выделенных процессов MPI. Какие могут быть места или условия, в которых может происходить чрезмерная фиксация? Я мало знаю о MPI, и я больше пользователь, чем разработчик программы.Но я могу попытаться проверить некоторые подсказки.Приношу свои извинения, если вопрос слишком абстрактный ...
Администратор попросил меня добавить
export OMP_NUM_THREADS=1
в сценарий представления работы, который я пробовал и не помогал.
Это псевдокод, показывающий структуру программы
main()
{
MPI_INIT()
while(criteria not met){
if(myid>0) execute_command_line('./ccx',wait=.ture.)
if(myid==0) assess results
}
MPI_Finalize()
}