gpt4 book ai didi

c++ - 无法使用 MPI_Send 和 MPI_Recv 发送 std::vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:15 27 4
gpt4 key购买 nike

我正在尝试使用 MPI 发送和接收函数发送 std:vector 但我没有到达任何地方。我收到类似

的错误
Fatal error in MPI_Recv: Invalid buffer pointer, error stack:
MPI_Recv(186): MPI_Recv(buf=(nil), count=2, MPI_INT, src=0, tag=0, MPI_COMM_WORLD, status=0x7fff9e5e0c80) failed
MPI_Recv(124): Null buffer pointer

我尝试了多种组合

A) 就像用来发送数组的..

 std::vector<uint32_t> m_image_data2; // definition of  m_image_data2
m_image_data2.push_back(1);
m_image_data2.push_back(2);
m_image_data2.push_back(3);
m_image_data2.push_back(4);
m_image_data2.push_back(5);

MPI_Send( &m_image_data2[0], 2, MPI_INT, 1, 0, MPI_COMM_WORLD);
MPI_Send( &m_image_data2[2], 2, MPI_INT, 1, 0, MPI_COMM_WORLD);

MPI_Recv( &m_image_data2[0], 2, MPI_INT, 0, 0, MPI_COMM_WORLD, &status );

B)没有[]

MPI_Send( &m_image_data2, 2, MPI_INT, 1, 0, MPI_COMM_WORLD);
MPI_Send( &m_image_data2 + 2, 2, MPI_INT, 1, 0, MPI_COMM_WORLD);

MPI_Recv( &m_image_data2, 2, MPI_INT, 0, 0, MPI_COMM_WORLD, &status );

C) 使用 vector 方法,如 at()..

MPI_Send( &m_image_data2.at(0), 2, MPI_INT, 1, 0, MPI_COMM_WORLD);
MPI_Send( &m_image_data2.at(2), 2, MPI_INT, 1, 0, MPI_COMM_WORLD);

MPI_Recv( &m_image_data2.at(0), 2, MPI_INT, 0, 0, MPI_COMM_WORLD, &status );

我正在考虑在主节点将 vector 转换为 int[],然后在工作节点将其转换回 vector ,但这会产生不必要的开销。

有谁知道怎么解决吗?

最佳答案

没有更完整的示例,我不知道发生了什么,但您似乎不匹配发送和接收(或者您没有正确初始化接收 vector )。

像下面这样的东西就足够了:

std::vector<uint32_t> m_image_data2;

if (rank==0) {
m_image_data2.push_back(1);
m_image_data2.push_back(2);
m_image_data2.push_back(3);
m_image_data2.push_back(4);
m_image_data2.push_back(5);
// send 5 ints at once
MPI_Send( &m_image_data2[0], 5, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
else {
// make space for 5 ints
m_image_data2.resize(5);
// receive 5 ints
MPI_Recv(&m_image_data2[0], 5, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
}

关于c++ - 无法使用 MPI_Send 和 MPI_Recv 发送 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com