作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了相当多的时间试图解决这个问题,所以我终于来这里寻求帮助。我正在学习 mpi,问题是因为我是新人,所以我不知道为什么会发生一些奇怪的行为。我想做的是我有 8 个数字分布在 8 个处理器上,如下所示。然后我拆分通信器,然后从子通信器交换元素,如下所示:
0 1 2 3 4 5 6 7
分割
0 1 2 3 | 4 5 6 7
交换
2 3 0 1 | 6 7 4 5
输出是 4 5 6 7 0 1 2 3 但输出应该是 2 3 0 1 6 7 4 5。我可以得到一些帮助来了解为什么它给我这个奇怪的结果吗?
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <math.h>
int main(argc,argv)
int argc;
char *argv[];
{
int myid, numprocs;
int color,Zero_one,new_id,new_nodes;
MPI_Comm NEW_COMM;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
int my_num, my_received;
int old_id;
switch(myid){
case 0:
my_num = 0;
old_id = 0;
break;
case 1:
my_num = 1;
old_id = 1;
break;
case 2:
my_num = 2;
old_id = 2;
break;
case 3:
my_num = 3;
old_id = 3;
break;
case 4:
my_num = 4;
old_id = 4;
break;
case 5:
my_num = 5;
old_id = 5;
break;
case 6:
my_num = 6;
old_id = 6;
break;
case 7:
my_num = 7;
old_id = 7;
break;
}
//here i split
color=myid % 2;
MPI_Comm_split(MPI_COMM_WORLD,color,myid,&NEW_COMM);
MPI_Comm_rank( NEW_COMM, &new_id);
MPI_Comm_rank( NEW_COMM, &new_nodes);
//here i exchange in the sub list or communicator
if(new_id < 2){
MPI_Send(&my_num, 1, MPI_INT, 2 + new_id, 0, NEW_COMM);
MPI_Recv(&my_received, 1, MPI_INT, 2 + new_id, 0, NEW_COMM, MPI_STATUS_IGNORE);
}
else
{
MPI_Recv(&my_received, 1, MPI_INT, new_id - 2, 0, NEW_COMM, MPI_STATUS_IGNORE);
MPI_Send(&my_num, 1, MPI_INT, new_id - 2 , 0, NEW_COMM);
}
printf("old_id= %d received num= %d\n", old_id, my_received);
MPI_Finalize();
}
最佳答案
运行你的程序我得到:
old_id= 4 received num= 0
old_id= 5 received num= 1
old_id= 1 received num= 5
old_id= 3 received num= 7
old_id= 6 received num= 2
old_id= 7 received num= 3
old_id= 0 received num= 4
old_id= 2 received num= 6
根据您的分配,所有偶数排名均收集在一个通信器中,所有赔率收集在另一个通信器中:
old_id= 0 received num= 4
old_id= 2 received num= 6
old_id= 4 received num= 0
old_id= 6 received num= 2
和:
old_id= 1 received num= 5
old_id= 3 received num= 7
old_id= 5 received num= 1
old_id= 7 received num= 3
这看起来像你要求的东西。要么我无法重现您的问题,要么误解了它,要么没有任何问题?
关于comm_split 奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626150/
我花了相当多的时间试图解决这个问题,所以我终于来这里寻求帮助。我正在学习 mpi,问题是因为我是新人,所以我不知道为什么会发生一些奇怪的行为。我想做的是我有 8 个数字分布在 8 个处理器上,如下所示
我是一名优秀的程序员,十分优秀!