gpt4 book ai didi

c - 如何使用 C 在 MPI 中发送(MPI_Send)具有指针字段的嵌套结构

转载 作者:太空狗 更新时间:2023-10-29 16:09:22 25 4
gpt4 key购买 nike

我有一个结构:

    struct vertex 
{
double a; double b;
}

struct polygon
{
int numofVertex;
vertex *v;
}

如何使用 MPI_Send 在 MPI 中发送这个嵌套结构?问题是该结构包含指针字段“v”,导致 MPI_Send 崩溃。我试过 MPI_Datatype 来定义新的数据类型,但它不起作用。我读到序列化是唯一的解决方案,但 C 不提供这样的实现。关于如何解决这个问题有什么建议吗?

最佳答案

您必须在两条消息中发送它:

// 'p' is a pointer to your polygon
vertex *tmp = p->v;
p->v = NULL;
MPI_Send(p, sizeof(struct polygon), MPI_BYTES, dest, 1, ...);
MPI_Send(tmp, sizeof(struct vertex), MPI_BYTES, dest, 2, ...);
p->v = tmp;

在接收端,您只需分两步接收结构:

polygon p;
MPI_Recv(&p, sizeof(struct polygon), MPI_BYTES, src, 1, ...);
p.vertex = malloc(sizeof(struct vertex));
MPI_Recv(p.vertex, sizeof(struct vertex), MPI_BYTES, src, 2, ...);

显然这不是很好,所以如果你保持你的结构指针较少,那么你可以立即发送它会更容易。

关于c - 如何使用 C 在 MPI 中发送(MPI_Send)具有指针字段的嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972018/

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