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 中的结构散布数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 MPI_Type_create_struct() 在 C 中传输包含动态数组的结构