Разное поведение mpiexec в Windows и в Ubuntu - PullRequest
1 голос
/ 25 июня 2019

У меня есть код на Фортране (program.f), и я скомпилировал его с Eclipse в \ ubuntu 16 и в Windows 7.

Конфигурация Eclipse для Ubuntu следующая:

GNU Fortran Compiler: gfortran
Include paths(-l)   : /usr/lib/openmpi/include
GNU Fortran Linker  : mpif90
Tool Chain Editor   : GCC Fortran

Конфигурация Eclipse для Windows выглядит следующим образом:

GNU Fortran Compiler: gfortran
Include paths(-l)   : C:\cygwin64\usr\include
GNU Fortran Linker  : mpif90
Tool Chain Editor   : GCC Fortran

Когда я запускаю программу в Ubuntu, программа работает так, как ожидается. В Ubuntu программа выполняется с 2 процессорами, выполнив

$ mpiexec -np 2 myprogram

А поведение таково

$ mpiexec -np 2 myprogram 
 There are            2  processors running this job.
 Rank#           1 d1=           65  d2=          128
 Rank#           0 d1=            1  d2=           64

Где d1 и d2 - это части проблемной области, назначенные каждому процессору. В этом примере общее количество доменов составляет 128. Домен был назначен от 1 до 64 процессору 0 и от 65 до 128 процессору 1. Это ожидаемое поведение: модель 128 делится на 2, от 1 до 64 до процессор 0 и от 65 до 128 для процессора 1.

С другой стороны, в Windows, после компиляции кода с использованием упомянутых спецификаций, я запускаю программу, выполнив:

$ mpiexec.exe -n 2 myprogram.exe

А поведение таково

$ mpiexec -np 2 myprogram 
 There are            1  processors running this job.
 Rank#           0 d1=            1  d2=          128
 Rank#           0 d1=            1  d2=          128

Мы видим, что поведение отличается: программа, выполняемая в Windows, не работает параллельно, как ожидается. В терминале мы видим, что программа запущена на 1 процессоре, и домен назначается следующим образом: от 1 до 128 (весь домен) для процессора 0 и от 1 до 128 (снова весь домен?) Для процессора 0. Это проблема, которую я пытаюсь решить . Я пытаюсь вести себя так же, как в Ubuntu.

Программа mpiexec.exe для Windows была получена от официального установщика MS-MPI .

Библиотеки gfortran и OpenMPI для Windows были получены с использованием cygwin

Я пытался изменить компоновщик GNU и компилятор в Eclipse для Windows и не работает. Я пытался запустить код на других машинах с Windows 10, и проблема та же.

Любые предложения о том, как попытаться решить эту проблему?

1 Ответ

1 голос
/ 26 июня 2019

Как уже упоминалось @jcgiret, существует проблема согласованности: программа компилируется с использованием OpenMPI и выполняется с MS-MPI.Для решения этой проблемы код был выполнен с использованием эквивалента mpiexec , определенного в пакете openmpi :

usr/bin/mpiexec -> orterun.exe

Программа выполненав windows

$ orterun.exe -n 2 myprogram.exe

Тогда результаты те же, что и в Ubuntu:

$ orterun.exe -n 2 myprogram.exe 
There are            2  processors running this job.
Rank#           1 d1=           65  d2=          128
Rank#           0 d1=            1  d2=           64
...