Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个并行MPI_Bcast以传递数组结构_C_Mpi - Fatal编程技术网

多个并行MPI_Bcast以传递数组结构

多个并行MPI_Bcast以传递数组结构,c,mpi,C,Mpi,从根列组向所有其他列组广播数组结构的高效、清晰且正确的方法是什么?下面的代码能否实现这一点?我希望广播同时利用尽可能多的通信带宽 例如,我恐怕无法将数据重新构造为结构数组 float arr1[16]; int arr2[16]; char arr3[16]; //...fill arr1-3 with great data. Establish rank ID's, etc MPI_Request req[3]; MPI_Status status[3]; MPI_IBcast(arr1, 1

从根列组向所有其他列组广播数组结构的高效、清晰且正确的方法是什么?下面的代码能否实现这一点?我希望广播同时利用尽可能多的通信带宽

例如,我恐怕无法将数据重新构造为结构数组

float arr1[16];
int arr2[16];
char arr3[16];
//...fill arr1-3 with great data. Establish rank ID's, etc
MPI_Request req[3];
MPI_Status status[3];
MPI_IBcast(arr1, 16, MPI_FLOAT, root_rank_ID, MPI_COMM_WORLD, &req[0]);
MPI_IBcast(arr2, 16, MPI_INT, root_rank_ID, MPI_COMM_WORLD, &req[1]);
MPI_IBcast(arr3, 16, MPI_CHAR, root_rank_ID, MPI_COMM_WORLD, &req[2]);
MPI_Waitall(3,req,status);
//check status to ensure the outcome is OK
int importantData = importantFunction(arr1,arr2,arr3);

@HighPerformanceMark感谢您指出这一点。函数调用中有足够的信息,不需要我包含的if语句。您可以创建一个描述3个数组的派生数据类型,然后
MPI_Bcast()
it.@GillesGouaillardet,这难道不意味着将SoA复制到AoS中,传递它,然后转换回SoA吗?我想要好的表现。但是,如果您觉得这可能会在通信方面带来更好的性能,请说明我发布的代码片段为什么不会执行得那么好。您可以调用
MPI_Ibcast()
3次,如果派生数据类型描述SoA,那么这可以减少为一次调用。图片中没有AoS,不是显式的,也不是隐式的。@GillesGouaillardet,好的,arr1-3在内存中是否需要彼此相邻?我是MPI新手,所以我很难理解如何在不使用AoS的情况下构造派生数据类型。