gpt4 book ai didi

c++ - MPI_Isend : how to keep data safe until they're received?

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:16 24 4
gpt4 key购买 nike

我要使用 MPI_Isend 发送许多消息,但我不确定如何确保我的数据在收到它们之前是安全的,同时,不要用完所有可用的内存。

目前,我正在做这样的事情:

vector<int*> outbox;
vector<MPI_Request> stats;

void run()
{
while (!done())
{
//some magic
//...

sendMsg(rand(), getRecipRank());
}
}

void sendMsg(int n, int recipRank)
{
//Need to gen n random integers and send it to proc with rank recipRank
//Can't block until the numbers are reveived.
//So how do I make sure these numbers are safe until then?


int* data = (int*)malloc(sizeof(int) * n);
//fill the data array with random numbers here

MPI_Request req;
MPI_Isend(data, n, MPI_INT, recipRank, 0, MPI_COMM_WORLD, &req);

//Keeping the pointer to the array to free it later
outbox.push_back(data); //Does this help keep the data safe until they're received?
stats.push_back(req);
}

然后我有另一个函数偶尔会通过 stats vector 来检查发送状态。如果完成,则该函数会释放请求和 outbox 中的相应数组。

我已经用少量消息对此进行了测试,它似乎有效,但我不确定它是否会总是有效,还是我只是走运。

最佳答案

看起来不错!如果您使用 malloc 分配内存,除了您之外,没有人会弄乱它。既然你不乱来,那就安全了。

这是一个很好的模式,可以通过使用更多的内存来交织计算和通信。如果您想限制内存使用,您可以为 vector outbox 设置最大长度,并在达到该长度时开始使用阻塞发送。

澄清一下:您的数据并不“更安全”,因为您将其推送到 vector outbox 中,即使不这样做也是安全的。您将它插入 vector 以便稍后释放它。

关于c++ - MPI_Isend : how to keep data safe until they're received?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158183/

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