Параллельно HDF5: "make check" зависает при запуске t_mpi
Я изо всех сил пытаюсь заставить параллельную HDF5 работать на кластере целую неделю, но без какого-либо прогресса. Я хотел бы, чтобы кто-нибудь мог помочь мне с этим. Спасибо!
Я собираю Parallel HDF5 (hdf5-1.8.15-patch1) в блестящей файловой системе с ОС RedHat Enterprise Linux 5.5 x86_64. Я попытался скомпилировать его как с импи 4.0.2, так и с openmpi 1.8, и все прошло без ошибок. Когда я "делаю проверку", они оба проходили последовательные тесты, но зависали сразу после входа в параллельные тесты (в частности, t_mpi). В конце концов мне пришлось нажать Ctrl+C, чтобы закончить. Вот вывод:
lijm@c01b03:~/yuan/hdf5-1.8.15-patch1/testpar$ make check
CC t_mpi.o
t_mpi.c: In function ‘test_mpio_gb_file’:
t_mpi.c:284: warning: passing argument 1 of ‘malloc’ with different width due to prototype
t_mpi.c:284: warning: request for implicit conversion from ‘void *’ to ‘char *’ not permitted in C++
t_mpi.c: In function ‘test_mpio_1wMr’:
t_mpi.c:465: warning: passing argument 2 of ‘gethostname’ with different width due to prototype
t_mpi.c: In function ‘test_mpio_derived_dtype’:
t_mpi.c:682: warning: declaration of ‘nerrors’ shadows a global declaration
t_mpi.c:37: warning: shadowed declaration is here
t_mpi.c:771: warning: passing argument 5 of ‘MPI_File_set_view’ discards qualifiers from pointer target type
t_mpi.c:798: warning: passing argument 2 of ‘MPI_File_set_view’ with different width due to prototype
t_mpi.c:798: warning: passing argument 5 of ‘MPI_File_set_view’ discards qualifiers from pointer target type
t_mpi.c:685: warning: unused variable ‘etypenew’
t_mpi.c:682: warning: unused variable ‘nerrors’
t_mpi.c: In function ‘main’:
t_mpi.c:1104: warning: too many arguments for format
t_mpi.c: In function ‘test_mpio_special_collective’:
t_mpi.c:991: warning: will never be executed
t_mpi.c:992: warning: will never be executed
t_mpi.c:995: warning: will never be executed
t_mpi.c: In function ‘test_mpio_gb_file’:
t_mpi.c:229: warning: will never be executed
t_mpi.c:232: warning: will never be executed
t_mpi.c:237: warning: will never be executed
t_mpi.c:238: warning: will never be executed
t_mpi.c:253: warning: will never be executed
t_mpi.c:258: warning: will never be executed
t_mpi.c:259: warning: will never be executed
t_mpi.c:281: warning: will never be executed
t_mpi.c:246: warning: will never be executed
t_mpi.c:267: warning: will never be executed
t_mpi.c:319: warning: will never be executed
t_mpi.c:343: warning: will never be executed
t_mpi.c:385: warning: will never be executed
t_mpi.c:389: warning: will never be executed
t_mpi.c:248: warning: will never be executed
t_mpi.c:269: warning: will never be executed
t_mpi.c: In function ‘main’:
t_mpi.c:1143: warning: will never be executed
t_mpi.c:88: warning: will never be executed
t_mpi.c:102: warning: will never be executed
t_mpi.c:133: warning: will never be executed
t_mpi.c:142: warning: will never be executed
CCLD t_mpi
make t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_pshutdown t_prestart t_shapesame
make[1]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[1]: `t_mpi' is up to date.
make[1]: `testphdf5' is up to date.
make[1]: `t_cache' is up to date.
make[1]: `t_pflush1' is up to date.
make[1]: `t_pflush2' is up to date.
make[1]: `t_pshutdown' is up to date.
make[1]: `t_prestart' is up to date.
make[1]: `t_shapesame' is up to date.
make[1]: Leaving directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make check-TESTS
make[1]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[2]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[3]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[3]: Nothing to be done for `_exec_check-s'.
make[3]: Leaving directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[2]: Leaving directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[2]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
===Parallel tests in testpar begin Thu Jun 11 22:07:48 CST 2015===
**** Hint ****
Parallel test files reside in the current directory by default.
Set HDF5_PARAPREFIX to use another directory. E.g.,
HDF5_PARAPREFIX=/PFS/user/me
export HDF5_PARAPREFIX
make check
**** end of Hint ****
make[3]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
============================
Testing t_mpi
============================
t_mpi Test Log
============================
===================================
MPI functionality tests
===================================
Proc 1: hostname=c01b03
Proc 2: hostname=c01b03
Proc 3: hostname=c01b03
Proc 5: hostname=c01b03
--------------------------------
Proc 0: *** MPIO 1 write Many read test...
--------------------------------
Proc 0: hostname=c01b03
Proc 4: hostname=c01b03
Command exited with non-zero status 255
0.08user 0.01system 0:37.65elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+5987minor)pagefaults 0swaps
make[3]: *** [t_mpi.chkexe_] Error 1
make[2]: *** [build-check-p] Interrupt
make[1]: *** [test] Interrupt
make: *** [check-am] Interrupt
Вышеуказанные выходы двух реализаций MPI одинаковы, но openmpi также выводит предупреждение:
ПРЕДУПРЕЖДЕНИЕ. Похоже, что ваша подсистема OpenFabrics настроена так, что позволяет регистрировать только часть вашей физической памяти. Это может привести к тому, что задания MPI будут работать с неустойчивой производительностью, зависать и / или зависать.
Я искал эту проблему. Но я не думаю, что это может быть причиной повешения, причина указана в конце.
Я пытался найти место, где он висит. Я обнаружил, что он всегда застревает на первой коллективной функции, которую встречает. Например, в t_mpi. сначала он висит на:
MPI_File_delete (имя файла, MPI_INFO_NULL); (строка 477),
в test_mpio_1wMr. И если я закомментирую эту строку, она застрянет в MPI_File_open чуть ниже. Но я не уверен в том, что произошло внутри этих функций.
Есть еще одна вещь, которую я заметил. Папка HDF5, где я делаю "make", находится в файловой системе NFS, и я могу получить доступ к глянцу только через определенную папку, расположенную где-то еще. Итак, я обнаружил, что тест выполняется довольно хорошо, если я не установил HDF5_PARAPERFIX в свою папку с блеском, поскольку тест по умолчанию выполняется локально. Итак, я полагаю, это должна быть проблема, связанная с самим блеском, а не пределом памяти?
Спасибо!
1 ответ
Трудно сказать, что здесь происходит.
Возможно, вы применяете "универсальную файловую систему Unix" к своему драйверу блеска. Для Intel MPI требуются две переменные среды (I_MPI_EXTRA_FILESYSTEM и I_MPI_EXTRA_FILESYSTEM_LIST), чтобы использовать оптимизированные для блеска пути кода: (см. https://press3.mcs.anl.gov/romio/2014/06/12/romio-and-intel-mpi/ для подробнее).
Вам также придется явно запрашивать поддержку блеска при сборке OpenMPI.
Было бы очень полезно, если бы вы могли подключить отладчик к одному или нескольким застрявшим процессам, чтобы увидеть, где он висит. застрял на ввод-вывод рутины? застрял в общении?