gpt4 book ai didi

c - MPI_Gather C 中的结构数组

转载 作者:行者123 更新时间:2023-11-30 19:27:19 26 4
gpt4 key购买 nike

我正在尝试使用 MPI_Gather 收集结构数组。我使用 MPI_Type_contigulous 创建了一个结构“Final”的派生数据类型“mystruct”(每个元素都是 double )。然后,我在简单的 MPI_Send 和 MPI_Receive 中使用此派生数据类型来检查它是否正确且有效。现在,我想使用 MPI_Gather 收集整个结构数组,每个结构都具有派生数据类型“mystruct”。

使用发送和接收,我知道 MPI_Type_contigious 部分是正确的。 MPI_Gather 之后,MASTER 只是在应该从子进程收集信息的位置打印元素的零。

typedef struct{
double Angle;
double E_ODD;
double OD_KE;
double OD_L;
double D_E;
}Final;

int main(int argc, char** argv)
{
ierr = MPI_Init(&argc,&argv);
ierr = MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
ierr = MPI_Comm_rank(MPI_COMM_WORLD,&taskid);

int totalnum_trajectories = file_size/9 //File that has xyz cartesian
//coordinates for three atoms

int localnum_trajectories = totalnum_trajectories/numprocs;


Final worker_results[localnum_trajectory];
//Each processor does some analysis for its local number of trajectories
//and results go into worker_results buffer for each trajectory.

//Create a datatype for the nth worker_results[n] struct
MPI_Datatype mystruct;
MPI_Type_contiguous(5,MPI_DOUBLE,&mystruct);
MPI_Type_commit(&mystruct);

//MASTER buffer: should get all local struct arrays from
//children processors to one larger array of structs, equaling
//the total number of trajectories
Final master_results[totalnum_trajectories];

ierr = MPI_Gather(worker_results, localnum_trajectory, mystruct, \
master_results, totalnum_trajectories, \
mystruct, MASTER, MPI_COMM_World);

//Do some I/O with MASTER; everything should be in master_results buffer

MPI_Finalize();
return(0);
}

正确的 MPI_Gather 后,MASTER 应该拥有正确 I/O 的所有子结果。

最佳答案

我明白了。正如评论所暗示的,MASTER 的接收计数应该是来自每个处理器的项目数(因此 localnum_trajectoires),而不是来自所有处理器的计数总数。因此,除了 MPI_Gather MASTER 计数之外,一切都是正确的,它应该类似于

ierr = MPI_Gather(worker_results, localnum_trajectories, mystruct,\
master_results, localnum_trajectories, mystruct,\
MASTER, MPI_COMM_WORLD);

干杯!!!

关于c - MPI_Gather C 中的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55887103/

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