Ошибка при выполнении кода OpenMPI (ошибка OPAL) с помощью nvcc - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь запустить код OpenMPI на NVIDIA Jetson TX2. Но я получаю OPAL ошибку, когда я запускаю mpiexec.

Инструкция по компиляции:

$ nvcc -I/home/user/.openmpi/include/ -L/home/user/.openmpi/lib/ -lmpi -std=c++11 *.cu *.cpp -o program
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

Сообщение об ошибке выполнения:

$ mpiexec -np 4 ./program 
[user:05728] OPAL ERROR: Not initialized in file pmix2x_client.c at line 109
*** An error occurred in MPI_Init
*** on a NULL communicator
*** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
***    and potentially your MPI job)
[user:05728] Local abort before MPI_INIT completed completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!
[user:05729] OPAL ERROR: Not initialized in file pmix2x_client.c at line 109
-------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
*** An error occurred in MPI_Init
*** on a NULL communicator
*** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
***    and potentially your MPI job)
[user:05729] Local abort before MPI_INIT completed completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!
--------------------------------------------------------------------------
mpiexec detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:

  Process name: [[7361,1],0]
  Exit code:    1
--------------------------------------------------------------------------

Я установил OpenMPI версии 3.1.2, используя следующие инструкции:

$ ./configure --prefix="/home/user/.openmpi" --with-cuda
$ make; sudo make install

Я также настроил мои $PATH и мои $LD_LIBRARY_PATH переменные соответственно на основе инструкций из этой ссылки

Я могу успешно выполнить программу на своем ноутбуке (Intel i7). После поиска ошибки я нашел несколько ссылок, предлагающих переустановить OpenMPI. Я пытался сделать это несколько раз (включая новую загрузку библиотеки), но безуспешно.

Любая помощь будет принята с благодарностью!

редактирует

Я попытался запустить следующий минимальный код (main.cpp), как это было указано в комментариях:

#include <iostream>
#include "mpi.h"
#include <string>

int main(int argc, char *argv[]) {
  int rank, size;
  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  std::cout << rank << '\n';
  MPI_Finalize();
  return 0;
}

Чтобы скомпилировать это, я повторно выполнил предыдущую команду и получил ту же ошибку:

$ nvcc -I/home/user/.openmpi/include/ -L/home/user/.openmpi/lib/ -lmpi -std=c++11 main.cpp -o program

Но тогда, если я скомпилирую его с mpic++, он сможет отлично работать.

$ mpic++ main.cpp -o ./program
$ mpiexec -np 4 ./program 
0
1
3
2

1 Ответ

0 голосов
/ 04 марта 2019

Это версия только OpenMPI, которую вы установили? Я предполагаю, что вы используете разные версии MPI между сборкой и запуском. Проверьте which mpirun, а также найдите экземпляры mpirun. Если вы работаете в Ubuntu, сделайте

sudo updatedb
locate mpirun

Если вы вызываете правильный mpirun (та же версия, что использовалась для сборки), то ошибка должна исчезнуть.

...