【问题标题】:How to send(MPI_Send) nested structure having pointer fields in MPI using C如何使用 C 在 MPI 中发送(MPI_Send)具有指针字段的嵌套结构
【发布时间】:2011-08-23 17:48:20
【问题描述】:

我有一个结构:

    struct vertex 
    {  
     double a; double b;
    }      

    struct polygon
    {
     int numofVertex;
     vertex *v;
    }

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

【问题讨论】:

  • 你说得对,C 没有提供序列化任意结构的实现。是什么阻止你为这些结构写一个?
  • @Carl 我认为这样做很难,如果有一些现有的实现,我不想重新发明轮子。 @CarlNorum
  • 我认为你将不得不写它......它不应该那么难。如果您的实施有问题,请回来询问具体问题。

标签: c serialization mpi distributed-computing


【解决方案1】:

您必须通过两条消息发送它:

// '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, ...);

显然这不是很好,所以如果你保持你的结构指针少,这样你就可以一次发送它会更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2011-08-23
    • 2021-02-13
    • 2022-11-25
    • 2011-08-23
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多