⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcomm.c

📁 MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程环境.
💻 C
字号:
/*     This file generates a few communicators for use in the test suite    THIS CODE IS FROM mpich/tsuite AND SHOULD BE CHANGED THERE ONLY */#include "mpi.h"#include "gcomm.h"void MakeComms( comms, maxn, n, make_intercomm )MPI_Comm *comms;int      *n, maxn, make_intercomm;{int cnt = 0;int rank, size;int dims[2];int periods[2], range[1][3];MPI_Group group, newgroup;MPI_Comm_rank( MPI_COMM_WORLD, &rank );MPI_Comm_size( MPI_COMM_WORLD, &size );comms[cnt++] = MPI_COMM_WORLD;if (cnt == maxn) {*n = cnt; return; }/* Construct a communicator with the ranks reversed */MPI_Comm_group( MPI_COMM_WORLD, &group );range[0][0] = size-1;range[0][1] = 0;range[0][2] = -1;MPI_Group_range_incl( group, 1, range, &newgroup );MPI_Comm_create( MPI_COMM_WORLD, newgroup, &comms[cnt] );cnt++;MPI_Group_free( &group );MPI_Group_free( &newgroup );if (cnt == maxn) {*n = cnt; return; }if (size > 3) {    /* Divide into odd and even processes */    MPI_Comm_split( MPI_COMM_WORLD, rank & 0x1, rank, comms + cnt );    cnt ++;    /* Use the cartesian constructors */    dims[0] = 0; dims[1] = 0;    MPI_Dims_create( size, 2, dims );    periods[0] = 0; periods[1] = 0;    MPI_Cart_create( MPI_COMM_WORLD, 2, dims, periods, 0, comms + cnt );    cnt ++;    if (cnt == maxn) {*n = cnt; return; }    /* Create an intercommunicator (point-to-point operations only)       Note that in this case, codes need to use MPI_Comm_remote_size to       (added to MPI_Comm_size) to get the size of the full group */    if (make_intercomm) {	/* The remote_leader is rank 1 in MPI_COMM_WORLD if we are even	   and 0 if we are odd (the remote_leader rank is relative to the	   peer communicator) 	 */	MPI_Intercomm_create( comms[2], 0, MPI_COMM_WORLD, !(rank&0x1), 			      37, comms + cnt );	cnt ++;	if (cnt == maxn) {*n = cnt; return; }	}    }*n = cnt;}void FreeComms( comms, n )MPI_Comm *comms;int      n;{int i;for (i=1; i<n; i++) {    if (comms[i] != MPI_COMM_NULL) 	MPI_Comm_free( comms + i );    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -