Код MPI, использующий больше ресурсов ЦП, чем выделено (чрезмерная фиксация) - PullRequest
0 голосов
/ 14 февраля 2019

Вот ситуация: я запускаю код оптимизации генетического алгоритма (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()
}


...