我在boost-mpi交换中有一个记忆问题。由于应用程序的需要,交换机在发送端是异步的,在接收端是同步的,它以前使用过基本的mpi代码。
#include <iostream>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
int main()
{
boost::mpi::environment env;
boost::mpi::communicator world;
size_t irank=world.rank();
if (irank == 0) {
std::vector<int> V(100, 0);
boost::mpi::request req = world.isend(1, 37, V);
while(true) {
boost::optional<boost::mpi::status> stat = req.test();
if (stat) {
if (stat->error() != 0) {
std::cerr << "Rank 0: Non-zero error in stat\n";
char error_string[10000];
int length_of_error_string;
MPI_Error_string(stat->error(), error_string, &length_of_error_string);
fprintf(stderr, "err: %s\n", error_string);
return 1;
}
break;
}
}
} else {
while(true) {
boost::optional<boost::mpi::status> prob = world.iprobe();
if (prob) {
if (prob->tag() == 37) {
std::vector<int> V;
world.recv(prob->source(), prob->tag(), V);
std::cerr << "Rank 1: Correct receiving of the vector\n";
break;
}
}
}
}
}该消息已正确接收,但mpirun -np 2 ./CTYP_debug的错误为
Rank 0: Non-zero error in stat
Invalid error code (14263904) (error ring index 27 invalid)
Invalid error code (14263904) (error ring index 27 invalid)
err: Unknown error class, error stack:
(unknown)(): MPI_Info_create failed
Rank 1: Correct receiving of the vector对我来说,这显示出一些记忆问题,但我找不到哪里出了问题。滴滴涕没有显示任何明显的错误。
发布于 2020-12-17 12:20:22
它出现在依赖于.test()的MPI_Test中。事实证明,MPI_Status结构的错误字段没有在MPI_Test调用中设置。详情请参见https://www.mpich.org/static/docs/v3.2/www3/MPI_Test.html。
https://stackoverflow.com/questions/65320086
复制相似问题