나는 주변을 둘러 보았지만이 문제에 대한 참조를 찾을 수 없었다.부스트 테스트 유닛이 mpi 함수를 호출 할 수 없음
나는 boost/unit으로 테스트하고있는 C++ 프로그램을 작성했습니다. 시리얼 버전이 잘 작동하고 단위 테스트가 작동합니다.
이제 저는 MPI와 당황스럽게 평행하게 일하는 기능을 통해 프로그램을 병렬로 만들었습니다. 병렬 함수를 호출하는 자체 테스트를 적어 두었다면 parafunction이라고 부르 자. MPI가 잘 작동하고있다.
컴파일은 mpiC++로 수행되며 mpixec을 사용하여 프로그램을 실행합니다.
그러나 부스트 테스트 케이스에서 parafunction을 호출하면 MPI가 모두 잘못되어 테스트가 여러 번 시작되고 여러 MPI::Init
이 호출되면 프로세스가 중단됩니다. 여기에 내가 오류의 예입니다 MPI_FINALIZE가 호출 된 후 MPI_comm_size() 함수가 호출
.이것은 MPI 표준에 의해 허용되지 않습니다.
MPI 작업이 중단됩니다.
내 테스트 사례가 test_unit에 있고, master_test_suite가 자동으로 처리합니다. 내가 병렬 처리없이 말했듯이 그것은 완벽하게 잘 작동합니다.
Parafunction은 MPI::Init
과 MPI::Finalize
을 호출하며 MPI 관련 작업은 파일의 다른 기능으로 수행되지 않습니다.
누구도 전에 비슷한 문제가 발생 했습니까?
내 테스트를 실행하면 꽤 길기 때문에 실제로 프로그램의 병렬 버전을 사용할 수 있습니다! MPI는 프로그램의 수명 동안 한 번 초기화 할 수 있으며 한 번만 완료 할 수 있기 때문에 다음 처음 상태 모두가 한 번만 호출 할 수 있습니다 확정 당신의 도움이
parafunction을 호출하는 대신 BOOST_AUTO_TEST_CASE 내에서 모든 병렬 처리를 수행하면 동일한 문제가 발생합니다 ... –