gpt4 book ai didi

arrays - 在 MPI 中将二维数组旋转 90 度

转载 作者:行者123 更新时间:2023-12-04 04:37:39 33 4
gpt4 key购买 nike

我需要做的是使用 MPI 中的派生数据类型将二维数组旋转 90 度(在 3 个处理器上为 3x3,在 4 个处理器上为 4x4 等)。 .我发现使用 Alltoall C 中的函数在数组上:

[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][16]

我会像这样分发数据:
1:[ 1][ 5][ 9][13]
2:[ 2][ 6][10][14]
3:[ 3][ 7][11][15]
4:[ 4][ 8][12][16]

接下来我应该做什么(我应该采取哪些步骤)以正确的顺序(反射(reflect) 90 度旋转的顺序)在一个处理器(根)上收集这些向量作为数组?
提前致谢。

最佳答案

所以我终于知道应该如何使用 Alltoallv 来完成它和 Gather功能。Alltoallv让我以相反的顺序在进程之间分配数据:

0:[ 4][ 8][12][16]
1:[ 3][ 7][11][15]
2:[ 2][ 6][10][14]
3:[ 1][ 5][ 9][13]

然后我用了 Gatherrank 0 上收集数据处理成缓冲区:
...
//size is a number of processors
MPI_Type_vector(size, 1,1, MPI_INT, &vec );
MPI_Type_commit( &vec );

if(rank==0){
int buffer[size*size];
//recv is a name of an array with data on every processor
MPI_Gather(recv,1,vec, buffer, size, MPI_INT, 0, MPI_COMM_WORLD );
}else{
MPI_Gather(recv,1,vec,NULL,0,MPI_INT,0,MPI_COMM_WORLD);
}
...

结果我收到了:
[ 4][ 8][12][16]
[ 3][ 7][11][15]
[ 2][ 6][10][14]
[ 1][ 5][ 9][13]

关于arrays - 在 MPI 中将二维数组旋转 90 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454093/

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