进程组与通信域
进程组
进程组是通信域的重要组成部分,一个进程组是一组不同进程的有序集合。同一进程可以属于不同的进程组,编号也不一定相同。
在这里练习了进程组管理中的常用调用函数。使用不同函数定义了不同的进程组。在之前的MPI学习中一直使用的通信域MPI_COMM_WORLD所对应的进程组就是全体进程的集合。可以直接对MPI_COMM_WORLD通信域执行MPI_Comm_group来获得包含全体进程的进程组。
...
//打印某个进程组中进程在MPI_COMM_WORLD中的进程号
void printf_ranknumber_in_world(MPI_Group group,MPI_Group world_group)
{
int size;
int *rank1;
int *rank2;
MPI_Group_size(group,&size);
rank1=(int *)malloc(size*sizeof(int));
rank2=(int *)malloc(size*sizeof(int));
for(int i=0;i<size;i++){
rank1[i]=i;}
MPI_Group_translate_ranks(group,size,rank1,world_group,rank2);
for(int j=0;j<size;j++){
printf("%d,",rank2[j]);}
printf("\n");
MPI_Group_free(&group);
}
int main(int argc,char** argv)
{
int myrank,proc_nums;
MPI_Group WORLD_GROUP,MY_GROUP12345,MY_GROUP67,MY_GROUP54321,MY_GROUP13567;
MPI_Group MY_GROUP12345_,MY_GROUP1234567;
MPI_Comm MY_COMM;
int rank_operation[]={
0,6,7};
int *rank_resort;
int resort_size;
int ranges[2][3];
MPI_Init