MS-MPI MPI_Barrier: иногда зависает бесконечно, иногда нет
Я использую библиотеку MPI.NET, и недавно я переместил свое приложение в больший кластер (больше COMPUTE-NODES). Я начал видеть различные коллективные функции зависать бесконечно, но только иногда. Примерно половину времени работа будет завершена, в остальное время она зависнет. Я видел, как это случилось со Scatter, Broadcast и Barrier.
Я положил MPI.Communicator.world.Barrier()
вызов (MPI.NET) в начале приложения и создал журналы трассировки (используя MPIEXEC.exe /trace
переключатель).
Фрагмент кода C#:
static void Main(string[] args)
{
var hostName = System.Environment.MachineName;
Logger.Trace($"Program.Main entered on {hostName}");
string[] mpiArgs = null;
MPI.Environment myEnvironment = null;
try
{
Logger.Trace($"Trying to instantiated on MPI.Environment on {hostName}. Is currently initialized? {MPI.Environment.Initialized}");
myEnvironment = new MPI.Environment(ref mpiArgs);
Logger.Trace($"Is currently initialized?{MPI.Environment.Initialized}. {hostName} is waiting at Barrier... ");
Communicator.world.Barrier(); // CODE HANGS HERE!
Logger.Trace($"{hostName} is past Barrier");
}
catch (Exception envEx)
{
Logger.Error(envEx, "Could not instantiate MPI.Environment object");
}
// rest of implementation here...
}
Я могу видеть msmpi.dll
"s MPI_Barrier
функция вызывается в журнале, и я вижу сообщения об отправке и получении после этого для прохождения и неудачного примера. Для примера прохождения сообщения отправляются / принимаются, а затем регистрируется функция MPI_Barrier Leave.
Для неудачного примера это выглядит так, как будто одно (или более) из отправленных сообщений потеряно - оно никогда не будет получено целью. Правильно ли я считаю, что сообщения, потерянные в MPI_Barrier
вызов будет означать, что процессы никогда не синхронизируются, поэтому все застряли в Communicator.world.Barrier()
вызов?
Что может быть причиной этого периодически? Может ли быть причиной плохая производительность сети между COMPUTE-NODES?
Я использую MS HPC Pack 2008 R2, поэтому версия MS-MPI довольно старая, v2.0.
РЕДАКТИРОВАТЬ - Дополнительная информация Если я продолжаю выполнение задачи в том же узле, то эта проблема не возникает. Например, если я запускаю задачу, используя 8 ядер на одном узле, то это нормально, но если я использую 9 ядер на двух узлах, я увижу эту проблему ~50% времени.
Кроме того, у нас есть два кластера, и это происходит только на одном из них. Они оба являются виртуализированными средами, но, похоже, настроены одинаково.