Я осмотрел все вокруг, но не смог найти ссылки на эту проблему.модуль повышения напряжения не может вызвать функцию mpi
Я написал программу на C++, которую я тестирую с помощью boost/unit. Серийная версия работает нормально, и модульный тест работает.
Теперь я сделал программу параллельной с помощью функции, выполняющей неловко параллельную работу с MPI. Если записать мой собственный тест, вызывающий параллельную функцию - назовем его parafunction - он работает хорошо, MPI работает правильно.
Компиляция выполняется с помощью mpiC++, и я использую mpixec для запуска программы.
Если я вызываю парафункцию в тестовом случае с усилением, MPI идет не так, тест запускается несколько раз, и процесс вызывается, когда вызываются несколько MPI::Init
. Вот пример ошибки я получаю:
Функция MPI_Comm_size() была вызвана после того, как MPI_FINALIZE был вызван.
Это запрещено стандартом MPI.
Ваша работа MPI будет отменена.
Мой тестовый пример находится на test_unit, автоматически обрабатывается master_test_suite. Как я сказал без параллелизации, он работает отлично.
Parafunction вызывает MPI::Init
и MPI::Finalize
, и никакая другая функция файлов не должна выполнять какие-либо материалы, связанные с MPI.
С кем-либо сталкивались с подобной проблемой раньше?
Мой пробный прогон довольно длинный, поэтому я действительно мог использовать параллельную версию моей программы!
Спасибо за вашу помощь
И то же самое происходит, если я выполняю все параллелизацию внутри моего BOOST_AUTO_TEST_CASE вместо вызова parafunction ... –