c++ - 如何在 MPI 中发送 std::string?

标签 c++ string mpi

我想通过 MPI 发送一个字符串变量,但我不知道该怎么做! 我的代码在这里:

static string  fourTupX="Hello";

现在我想通过 MPI 发送它:

int l=std::strlen(fourTupX.c_str());
l++;
MPI::COMM_WORLD.Send (&l,1,MPI::INT,1,7);
MPI::COMM_WORLD.Send ( &fourTupX, 1, MPI::CHAR, 1, 1 );

并在另一侧接收:

int l;
 source=0;
 MPI::COMM_WORLD.Recv (&l,1,MPI::INT , source, 7, status1 );
 cout<<l;
 char* myfourTupX=new char[l];
 MPI::COMM_WORLD.Recv (myfourTupX,l,MPI_CHAR , source, 1, status1 );

但是收到后fourTupx里面什么都没有!!! 有什么问题吗?

最佳答案

您必须发送从c_str() 获得的字符串缓冲区的内容。您不必先发送字符串长度,因为接收方可以先简单地探测消息,然后分配适当大小的缓冲区:

// Sender

string bla = "blabla";
MPI::COMM_WORLD.Send(bla.c_str(), bla.length(), MPI::CHAR, dest, 1);

// Receiver

MPI::Status status;
MPI::COMM_WORLD.Probe(source, 1, status);
int l = status.Get_count(MPI::CHAR);
char *buf = new char[l];
MPI::COMM_WORLD.Recv(buf, l, MPI::CHAR, source, 1, status);
string bla1(buf, l);
delete [] buf;

此处接收方使用 Probe 来探测匹配的消息并检查 status 对象以找出消息中有多少个字符。然后它分配一个相同大小的缓冲区,接收消息并从中构造一个 std::string 对象。

关于c++ - 如何在 MPI 中发送 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378302/

相关文章:

java - 使用堆栈来反转字符串?

c - 与 off_t 等效的 MPI 数据类型是什么?

c# - 如何禁用特定的 usb 端口 com2 c# 64 位

c++ - 基本的c++之后是什么?

java - 字符串对象创建的微妙之处 : aliases and garbage

java - 总计未加起来

c++ - 在类名之前使用宏在 C++ 中类

c++ - 在 C++ 中从派生类调用未在基类上定义的成员函数是否安全?

java - 二维数组如何在 MPJ 中传递(对象形式除外)

将 libc 回溯转换为源代码行号