boost mpi发送NULL消息

时间:2015-06-05 08:49:52

标签: c++ string boost mpi

我正在尝试使用boost库向进程发送一些MPI消息。但是,接收方无法正确接收它们。接收器只获得NULL,而不是真实的消息。我的代码在这里:

(entityInstanceContext.EntityInstance as BayMessageModel).MessageStateName

现在,问题是接收器的输出类似于:

// Receiver side, rank = 0
boost::mpi::communicator* world
// initialization of the world, etc...

map<int, string> messageMap;
map<int, boost::mpi::request> requestMap;
for(int j=1; j<world->size(); j++){
    requestMap[j] = world->irecv(j, 0, messageMap[j]);
}

for(typename map<int, boost::mpi::request>::iterator it = requestMap.begin(); it != requestMap.end(); it++){
    it->second.wait();
    cout << "Received message from " << j << " is: " << messageMap[j] << endl;
}


// Sender side, ranks = 1, 2 and 3
boost::mpi::communicator* world
// initialization of the world, etc...
world->isend(0, 0, "1");

我无法弄清问题是什么。

2 个答案:

答案 0 :(得分:1)

您的问题出现在基础boost::serialization

在你的问题中,你发送一个字符串文字&#34; 1&#34;它具有C ++类型const char[2]boost::serialization将此序列化为大小为2的数组(而不是std::string)。然后接收失败,因为boost::mpi尝试将数组反序列化为std::string,并通过返回null静默失败。

正如您已经想到的那样,解决方案是发送和接收相同的类型。在这种情况下,std::string

答案 1 :(得分:0)

我不知道为什么,但是当我像这样更改发件人方面时它已修复:

// Sender side, ranks = 1, 2 and 3
boost::mpi::communicator* world
// initialization of the world, etc...
string s = "1";
world->isend(0, 0, s);