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

📄 mpi653.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.3 通用(图)构造子</H2>
</TD>

<TD align=right><A HREF="mpi652.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi652.htm"><IMG SRC="backward.gif" tppabs="http://arch.cs.pku.edu.cn/image/backward.gif" ALT="BACKWARD" HEIGHT=32 WIDTH=32></A>
<A HREF="mpi654.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi654.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>MPI_GRAPH_CREATE(comm_old, nnodes, index, edges, reorder, comm_graph)</P>

<UL>
<P>IN comm_old 不带拓扑的输入通信子(句柄)</P>

<P>IN nnodes 图中节点数(整数)</P>

<P>IN index 整数矩阵描述节点度数(见下)</P>

<P>IN edges 整数矩阵描述图边数(见下)</P>

<P>IN reorder 标识数可以从排序(true)或不能(false)(logical)</P>

<P>OUT comm_graph 带有所加的图拓扑的通信子(句柄)</P>
</UL>

<P>int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int
*edges, </P>

<UL>
<UL>
<UL>
<UL>
<P>int reorder, MPI_Comm *comm_graph)</P>
</UL>
</UL>
</UL>
</UL>

<P>MPI_GRAPH_CREATE(COMM_OLD, NNODES, INDEX, EDGES, REORDER, COMM_GRAPH,
IERROR)</P>

<UL>
<P>INTEGER COMM_OLD, NNODES, INDEX(*), EDGES(*), COMM_GRAPH, IERROR</P>

<P>LOGICAL REORDER</P>
</UL>

<P>MPI_CART_CREATE返回一个指向新的通信子的句柄, 这个句柄与笛卡尔拓扑信息相联系。如果reorder
= false, 那么在新组中每一进程的标识数就与在旧组中的标识数相一致。否则, 函数会重新对进程编号。如果图的大小,
nnodes,小于comm组的大小, 那么有些进程返回MPI_COMM_NULL, 类似MPI_COMM_CREATE。如果说明的网格大于组的尺寸,
调用出错。</P>

<P>三个参数nnodes、index和edges定义了图的结构。nnodes 是图的结点数。结点编号从0到nnodes-1。数组第i号单元的index
存储了前i个图结点的邻居的总数。结点0、1、…、nnodes-1的邻居的列表被存储在数组edges连续的位置中。数组edges表示为一个展开的边列表。index中的单元总数是nnodes,并且edges中的单元总数等于图边的总数。</P>

<P>参数nnodes, INDES和edges的定义以下面的简单的例子说明。</P>

<P><IMG SRC="fig63.gif" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/fig63.gif" HEIGHT=171 WIDTH=437></P>

<P>那么, 输入参数为:</P>

<UL>
<P>nnodes = 4</P>

<P>index = 2, 3, 4, 6</P>

<P>edges = 1, 3, 0, 3, 0, 2</P>
</UL>

<P>因此, 在C语言中, index[0]是节点0的度数, index[i] - index[i-1] 是节点
i的度数, i=1, ..., nnodes-1; 节点0的邻居列表存储在edges[j]中, 其中0≤j
≤index[0]-1, 节点i的邻居列表, i &gt; 0, 存储在edges[j]中, 其中0≤j ≤index[i]-1。</P>

<P>在Fortran语言中, index(1)是节点0的度数, 并且index(i+1) - index(i)是节点i的度数,
i=1, ..., nnodes-1; 节点0的邻居列表存储在edges(j)中, 其中0≤j ≤index(0)-1,
节点i的邻居列表, i &gt; 0, 存储在edges(j)中, 其中0≤j ≤index(i)-1。</P>

<P>对实现者的建议: 下面的拓扑信息很可能与通信子一起存储:</P>

<UL>
<LI>拓扑类型(笛卡尔 / 图)</LI>

<LI>对于笛卡尔拓扑: </LI>

<OL>
<LI>NDIMS(维数) </LI>

<LI>DIMS(每一坐标方向的进程数) </LI>

<LI>PERIODS(周期性信息) </LI>

<LI>OWN_POSITION(在网格中拥有的位置, 可以从标识数和维中计算出) </LI>
</OL>

<LI>对于图拓扑:</LI>

<OL>
<LI>index,</LI>

<LI>edges, </LI>
</OL>

<P>这是定义图结构的向量</P>
</UL>

<P>对于图结构,结点数等于组中进程数。因此, 没有明显地存储结点数。在数组起始位置上的一个附加的零单元简化了对拓扑信息的访问。(对实现者建议的结束)</P>

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

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

<TD align=right><A HREF="mpi652.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi652.htm"><IMG SRC="backward.gif" tppabs="http://arch.cs.pku.edu.cn/image/backward.gif" ALT="BACKWARD" HEIGHT=32 WIDTH=32></A>
<A HREF="mpi654.htm" tppabs="http://arch.cs.pku.edu.cn/parallelprogramming/mpispec/mpi654.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 + -