📄 groups.cpp
字号:
# include <mpi.h>
# include <stdio.h>
# define NPROCS 8
int main(argc,argv)
int argc;
char *argv[]; {
int rank;
int group, group1, group2;
int ranks[128],rank1, rank2, rank3;
int i, size, size1;
int a[4], b[4];
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_group(MPI_COMM_WORLD, &group);
size1 = size/2;
for (i = 1; i<=size1;i++)
{
ranks[i] = i-1;
}
MPI_Group_incl(group,size1,ranks,&group1);
MPI_Group_excl(group, size1,ranks,&group2);
MPI_Group_rank(group1,&rank1);
MPI_Group_rank(group2,&rank2);
if (rank1 == MPI_UNDEFINED)
{
if(rank2 < size1)
//int MPI_Group_translate_ranks(MPI_Group group1, int n,
//int *ranks1, MPI_Group group2, int *ranks2)
MPI_Group_translate_ranks(group1,1,&rank2,group,&rank3);
else
rank3 = MPI_UNDEFINED;
}
else
{
MPI_Group_translate_ranks(group2, 1, &rank1, group, &rank3);
}
a[1] = rank;
a[2] = rank1;
a[3] = rank2;
a[4] = rank3;
if (rank3 != MPI_UNDEFINED)
{
MPI_Sendrecv(&a, 4, MPI_INTEGER, rank3, 1, &b, 4, MPI_INTEGER, rank3, 1,MPI_COMM_WORLD, &status);
}
MPI_Group_free(&group);
MPI_Group_free(&group1);
MPI_Group_free(&group2);
//printf("process %d a= %lf b= %lf",rank,a[4],b[4]);
MPI_Finalize();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -