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% времени.

Кроме того, у нас есть два кластера, и это происходит только на одном из них. Они оба являются виртуализированными средами, но, похоже, настроены одинаково.

0 ответов

Другие вопросы по тегам