我使用的TotalView和我得到的MPI_Error。 然而,的Totalview不会停止对这个错误,我无法找到它正在发生。 我相信这也适用于GDB。
Answer 1:
定义一个MPI_ErrHandler。 它被调用,取代默认的MPI处理程序,你可以设置一个断点。 建议欢迎如何得到它打印同样的事情MPI错误,或者更好的,更多的信息。
MPIErrorHander.hpp:
#define MPIERRORHANDLER_HPP
#ifdef mpi
#include <stdexcept>
#include <string>
#include <mpi.h>
namespace MPIErrorHandler {
//subclass so we can specifically catch MPI errors
class Exception : public std::exception {
public:
Exception(std::string const& what) : std::exception(), m_what(what) { }
virtual ~Exception() throw() { }
virtual const char* what() const throw() {
return m_what.c_str( );
}
protected:
std::string m_what;
};
void convertToException( MPI_Comm *comm, int *err, ... );
}
#endif // mpi
#endif // MPIERRORHANDLER_HPP
MPIErrorHandler.cpp:
#ifdef mpi
#include "MPIErrorHandler.hpp"
void MPIErrorHandler::convertToException( MPI_Comm *comm, int *err, ... ) {
throw Exception(std::string("MPI Error."));
}
#endif //mpi
main.cpp中:
#include "MPIErrorHandler.hpp"
{
MPI_Errhandler mpiErrorHandler;
MPI_Init( &argc, &argv );
//Set this up so we always get an exception that will stop TV
MPI_Errhandler_create( MPIErrorHandler::convertToException,
&mpiErrorHandler );
MPI_Errhandler_set( MPI_COMM_WORLD, mpiErrorHandler );
// Your program here.
MPI_Finalize( );
}
文章来源: How do you stop in TotalView after an MPI Error?