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

📄 mpi654.htm

📁 该文件为mpich2的开发文档
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
   <TITLE> ICPSEP Content
</TITLE>
   <META NAME="GENERATOR" CONTENT="Mozilla/3.0Gold (Win95; I) [Netscape]">
</HEAD>
<BODY BGCOLOR="#F0F8FF">

<TABLE WIDTH="100%" >
<TR>
<TD align=left>
<H2>6.5.4 拓扑查寻函数</H2>
</TD>

<TD align=right><A HREF="mpi653.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi653.htm"><IMG SRC="backward.gif" tppabs="http://arch.cs.pku.edu.cn/image/backward.gif" ALT="BACKWARD" HEIGHT=32 WIDTH=32></A>
<A HREF="mpi655.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi655.htm"><IMG SRC="forward.gif" tppabs="http://arch.cs.pku.edu.cn/image/forward.gif" ALT="FORWARD" HEIGHT=32 WIDTH=32></A></TD>
</TR>
</TABLE>

<P>
<HR WIDTH="100%"></P>

<P>如果一个拓扑已同前面的函数之一一起定义, 那么可以通过查寻函数查看拓扑信息。它们都是局域调用。</P>

<P>MPI_TOPO_TEST(comm, status)</P>

<UL>
<P>IN comm 通信子(句柄)</P>

<P>OUT status 通信子comm的拓扑类型(选择)</P>
</UL>

<P>int MPI_Topo_test(MPI_Comm comm, int *status)</P>

<P>MPI_TOPO_TEST(COMM, STATUS, IERROR)</P>

<UL>
<P>INTEGER COMM, STATUS, IERROR</P>
</UL>

<P>函数MPI_TOPO_TEST返回所赋给通信子的拓扑类型。</P>

<P>输出值STATUS是下面之一:</P>

<UL>
<P>MPI_GRAPH 图拓扑</P>

<P>MPI_CART 笛卡尔拓扑</P>

<P>MPI_UNDEFINED 没有拓扑</P>
</UL>

<P>MPI_GRAPHDIMS_GET(comm, nnodes, nedges)</P>

<UL>
<P>IN comm 带有图结构的组通信子(句柄)</P>

<P>OUT nnodes 图中节点数(整数)(同组中进程数相同)</P>

<P>OUT nedges 途中边数(整数)</P>
</UL>

<P>int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)</P>

<P>MPI_GRAPHDIMS_GET(COMM NNODES, NEDGES, IERROR)</P>

<UL>
<P>INTEGER COMM, NNODES, NEDGES, IERROR</P>
</UL>

<P>函数MPI_GRAPHDIMS_GET和MPI_GRAPH_GET返回图拓扑信息, 这个信息与由MPI_GRAPH_CREATE产生的通信子相联系。</P>

<P>由MPI_GRAPHDIMS_GET所提供的信息用于建立维向量INDEX和EDGES以正确地调用MPI_GRAPH_GET。</P>

<P>MPI_GRAPH_GET(comm, maxindex, maxedges, index, edges)</P>

<UL>
<P>IN comm 带有图结构的通信子(句柄)</P>

<P>IN maxindex 在调用程序中向量index的长度(整数)</P>

<P>IN maxedges 在调用程序中向量edges的长度(整数)</P>

<P>OUT index 包含图结构的整数矩阵(详细见MPI_GRAPH_CREATE的定 义)</P>

<P>OUT edges 包含图结构的整数矩阵</P>
</UL>

<P>int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int *index,
int *edges)</P>

<P>MPI_GRAPH_GET(COMM, MAXINDEX, MAXEDGES, INDEX, EDGES, IERROR)</P>

<UL>
<P>INTEGER COMM, MAXINDEX, MAXEDGES, INDEX(*),EDGES(*), IERROR</P>
</UL>

<P>MPI_CARTDIM_GET(comm, ndims)</P>

<UL>
<P>IN comm 带有笛卡尔结构的通信子(句柄)</P>

<P>OUT ndims 笛卡尔网格的维数(整数)</P>
</UL>

<P>int MPI_Cartdim_get(MPI_Comm comm, int *ndims)</P>

<P>MPI_CARTDIM_GET(COMM, NDIMS, IERROR)</P>

<UL>
<P>INTEGER COMM, NDIMS, IERROR</P>
</UL>

<P>函数MPI_CARTDIM_GET和MPI_CART_GET返回笛卡尔拓扑信息, 这个信息与由MPI_CART_CREATE产生的通信子相联系。</P>

<P>MPI_CART_GET(comm, maxdims, dims, periods, coords)</P>

<UL>
<P>IN comm 带有笛卡尔结构的通信子(句柄)</P>

<P>IN maxdims 在调用程序中向量dims, period,和coords的长度</P>

<P>OUT dims 每一笛卡尔维的进程数(整数矩阵)</P>

<P>OUT periods 每一笛卡尔维的周期性(true/false)(逻辑矩阵)</P>

<P>OUT coords 笛卡尔维中调用进程的坐标(整数矩阵)</P>
</UL>

<P>int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods,
int *coords)</P>

<P>MPI_CART_GET(COMM, MAXDIMS, DIMS, PERIODS, COORDS, IERROR)</P>

<UL>
<P>INTEGER COMM, MAXDIMS, DIMS(*), COORDS(*), IERROR</P>

<P>LOGICAL PERIODS(*)</P>
</UL>

<P>MPI_CART_RANK(comm, coords, rank)</P>

<UL>
<P>IN comm 带有笛卡尔结构的通信子(句柄)</P>

<P>IN coords 说明一个进程的笛卡尔坐标的整数矩阵(大小为ndims)</P>

<P>OUT rank 被说明进程的标识数(整数)</P>
</UL>

<P>int MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank)</P>

<P>MPI_CART_RANK(COMM, COORDS, RANK, IERROR)</P>

<UL>
<P>INTEGER COMM, COORDS(*), RANK, IERROR</P>
</UL>

<P>对于与笛卡尔结构同组的进程, 函数MPI_CART_RANK将逻辑进程坐标翻译成用于点对点例程的进程标识数。</P>

<P>对于periods(i)= true 的第i 维, 如果坐标coords(i)超出范围,即,coords(i)〈
0 或者 coords(i)≥dims(i),那么它会自动切换回间隔0≤coords(i)〈 dims(i)。
对于非周期维,超出范围的坐标是错误的。 </P>

<P>MPI_CART_COORDS(comm, rank, maxdims, coords)</P>

<UL>
<P>IN comm 带有笛卡尔结构的通信子(句柄)</P>

<P>IN rank comm组中一个进程的标识数(整数)</P>

<P>IN maxdims 在调用程序中向量coords的长度</P>

<P>OUT coords 包含被说明进程的笛卡尔坐标的整数矩阵(大小为ndims)</P>
</UL>

<P>int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords)</P>

<P>MPI_CART_COORDS(COMM, RANK, MAXDIMS, COORDS, IERROR)</P>

<UL>
<P>INTEGER COMM, RANK, MAXDIMS, COORDS(*), IERROR </P>
</UL>

<P>MPI-CART-COORDS提供反向映射,标识数到坐标的转换。 </P>

<P>MPI_GRAPH_NEIGHBORS_COUNT(comm, rank, nneighbors)</P>

<UL>
<P>IN comm 带有图结构的通信子(句柄)</P>

<P>IN rank comm组中一个进程的标识数(整数)</P>

<P>OUT nneighbors 被说明进程的邻居数(整数)</P>
</UL>

<P>int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)</P>

<P>MPI_GRAPH_NEIGHBORS_COUNT(COMM, RANK, NNEIGHBORS, IERROR)</P>

<UL>
<P>INTEGER COMM, RANK, NNEIGHBORS, IERROR</P>
</UL>

<P>MPI-GRAPH-NEIGHBORS-COUNT和MPI-GRAPH-NEIGHBORS提供通用的图拓扑的连接信息。
</P>

<P>MPI_GRAPH_NEIGHBORS(comm, rank, maxneighbors, neighbors)</P>

<UL>
<P>IN comm 带有图结构的通信子(句柄)</P>

<P>IN rank comm组中一个进程的标识数(整数)</P>

<P>IN maxneighbors 矩阵neighbors的大小(整数)</P>

<P>OUT neighbors 邻接于被说明进程的进程的标识数(整数矩阵)</P>
</UL>

<P>int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int maxneighbors,
int *neighbors)</P>

<P>MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERROR)</P>

<UL>
<P>INTEGER COMM, RANK, MAXNEIGHBORS, NEIGHBORS(*), IERROR</P>
</UL>

<P>例6.3 假设comm是一个带有混洗交换拓扑的通信子。组有2<SUP>n</SUP>个成员。每一进程标号为<IMG SRC="fig65.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig65.gif" HEIGHT=18 WIDTH=65>,其中<IMG SRC="fig66.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig66.gif" HEIGHT=21 WIDTH=82>而且有三个邻居:exchange<IMG SRC="fig67.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig67.gif" HEIGHT=20 WIDTH=277>shuffle(<IMG SRC="file:///E|/user/weigang/icpsep/mpi/1/fig65.gif" HEIGHT=18 WIDTH=65>)=<IMG SRC="fig68.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig68.gif" HEIGHT=19 WIDTH=96>unshuffle<IMG SRC="fig69.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig69.gif" HEIGHT=19 WIDTH=200>。图相连表解释如下,n=3</P>

<P><IMG SRC="fig64.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig64.gif" HEIGHT=270 WIDTH=586></P>

<P>假设通信子comm存在与其相连的拓扑。下面的代码片断在三种邻居类型中循环,并且每一个执行合适的交换。
</P>

<P>C asssume: each process has stored a real number A。</P>

<P>C extract neighborhood information</P>

<UL>
<P>CALL MPI_COMM_RANK(comm, myrank, ierr)</P>

<P>CALL MPI_GRAPH_NEIGHBORS(comm, myrank, 3, neighbors, ierr)</P>
</UL>

<P>C perform exchange permutation</P>

<UL>
<P>CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(1), 0, </P>

<P>+ neighbors(1), 0, comm, status, ierr)</P>

<P>CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(2), 0, </P>

<P>+ neighbors(3), 0, comm, status, ierr)</P>

<P>CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(3), 0, </P>

<P>+ neighbors(2), 0, comm, status, ierr)</P>
</UL>

<P>
<HR WIDTH="100%"></P>

<TABLE WIDTH="100%" >
<TR>
<TD align=left>Copyright: NPACT </TD>

<TD align=right><A HREF="mpi653.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi653.htm"><IMG SRC="backward.gif" tppabs="http://arch.cs.pku.edu.cn/image/backward.gif" ALT="BACKWARD" HEIGHT=32 WIDTH=32></A>
<A HREF="mpi655.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi655.htm"><IMG SRC="forward.gif" tppabs="http://arch.cs.pku.edu.cn/image/forward.gif" ALT="FORWARD" HEIGHT=32 WIDTH=32></A></TD>
</TR>
</TABLE>

</BODY>
</HTML>

⌨️ 快捷键说明

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