C MPI 中的结构散布数组

Posted

技术标签:

【中文标题】C MPI 中的结构散布数组【英文标题】:Scatter Array of Strucuters in C MPI 【发布时间】:2016-09-16 16:37:18 【问题描述】:

我有一个名为 Department 的结构体,以及一个名为 Departments 的结构体数组,我想为特定数量的进程分散这个数组,这样每个进程都有一个名为 Current 的结构体包含一个元素(结构体)(部门)来自Departments 数组 `

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>


struct Department
int position;
int Department_Destinations[100];
;

struct Department Current,Departments[100];

int main(int argc, char** argv)

int rank, nprocess;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &nprocess);

if(rank==0)
for(i=0;i<n;i++)
    Departments[i].position=i+1;
    for(j=0;j<c1;j++)
        Departments[i].Department_Destinations[j]=0;
    


MPI_Scatter(Departments, sizeof(Current), MPI_BYTE, Current ,sizeof(Current), MPI_BYTE, 0,MPI_COMM_WORLD);

MPI_Finalize();
return 0;

假设进程数等于Departments元素数(部门)

当编译和运行这段代码时 它给了我错误:“‘MPI_Scatter’的参数 4 的类型不兼容”

谁能回答为什么这个错误以及如何在 MPI 中分散结构器(部门)数组?

感谢进阶

【问题讨论】:

这是一种糟糕且非常不便携的结构传递方式。在网站上搜索包含MPI_Type_create_struct 的问题和答案,以查找有关如何正确发送结构的信息。 【参考方案1】:

MPI_Scatter() 需要一个指向要分散的缓冲区的指针和一个指向将接收消息的缓冲区的指针。

如果struct Department Current,Departments[100];,你可以试试:

MPI_Scatter(Departments, sizeof(Current), MPI_BYTE, &Current ,sizeof(Current), MPI_BYTE, 0,MPI_COMM_WORLD);

【讨论】:

以上是关于C MPI 中的结构散布数组的主要内容,如果未能解决你的问题,请参考以下文章

C 中的 MPI_Scatter 结构

使用 MPI_Type_create_struct() 在 C 中传输包含动态数组的结构

C中的结构序列化并通过MPI传输

在 C 中的 MPI 中如何创建结构结构并将其发送到多个进程

使用 MPI 散布不同大小的矩阵块

将由所有进程传播的数组的不同部分放入单个最终数组中的更好方法,在 C 中使用 MPI