【C语言】【MPI】MPI编程入门详解

      最后更新:2022-05-07 07:39:14 手机定位技术交流文章

      [MPI] [MPI] MPI编程概览

      MPI简介

      说到并行计算,MPI编程是一个不可避免的主题。MPI是多语种通信协议。为了准备平行的电脑。支持点对点和广播。MPI 是一个用于信息传输的应用界面。它包括协议以及语义主张。学生们展示了他们在若干情况下如何利用自己的素质。MPI的目标是取得良好的业绩。大规模性,和可移植性。如今,MPI仍然是高性能计算的主要范例。与OpenMP同时进行的程序相反,MPI是一种基于信息转让的平行方案拟订方法。信息接口是一种编程接口。而不是一种特定的方案编制语言。简而言之,MPI标准界定了一套便携式编程界面。
      笔者在上一篇文章 如何在 Windows 10 和 Windows 服务器上设置 MPI 平行编程环境 它描述了如何在双赢10环境的背景下配置MPI环境。一个尚未建立方案拟订环境的小伙伴建议阅读本文件。帮助继续学习(毕竟,平行机器不是你想要的)。

      MPI基本函数

      MPI电话总数庞大,但MPI电话数量根据实际的MPI撰写经验确实受到限制。 MPI的六项基本功能如下。

      我们在这里展示这六种MPI功能的基本价值 用一个简单的例子。

      函数介绍

      1.int MPI_Init (int* argc ,char** argv[] )

      在平行的背景下,该功能一般应是第一个需要初始化的MPI函数,其背后的代码将在MPI_Finalize()函数之前的每个过程中履行一次。

      • - 除MPI_启动()外,所有MPI功能都应在事后调用。
      • - MPI系统将通过Argc和argv(即主要功能必须提供论据或发生错误)获得指挥线参数。

      2.int MPI_Finalize (void)

      • - 退出MPI系统时,所有流程都必须正常退出,表示除初级流程之外的其他流程的完成和平行代码的终止。
      • - 序列码(排序=0)仍然可以运行在主要过程中,但无法运行MPI函数(包括 MPI_Init ()) 。

      3.int MPI_Comm_size (MPI_Comm comm ,int* size )

      • - 在程序进行期间获得所需数量的体积。
      • - 确定电信分机,并收集组成电信分机组(小组)的共享空间的方法。
      • - 确定通信子com中给定的小组程序数量。

      4.int MPI_Comm_rank (MPI_Comm comm ,int* rank)

      • - 确定通信空间流程的级别值, 即: 我不确定我在说什么。 该组的逻辑数字( 这个级别是 0 和 p-1 之间的整数, 与进程 ID 相对应 ) 。

      5.int MPI_Send( void *buff, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

      • - 免去 #buff: 要发送的变量 。
      • int 计数 : 您发送的信件数 (注: 不是长度; 例如, 如果您想要发送整数整数, 输入 1, 如果您想要发送“ ello” 字符串, 输入 6 ( C, 多一个字符串中没有结束) 。
      • - MPI_Datatype Datatype:您想要传送的数据类型(MPI要求提供的数据类型)可以在线获取,但此处没有说明。
      • 填入目的进程编号。 int dest: 目的进程编号, 您想要发送到哪个进程, 填入目的进程编号 。
      • 信件标签; 收件人必须有相同的信件标签来接收信件 。
      • - MPI_Commcom:通讯域域。这表示您正在向其中一个团体发送信息。
        参数说明

      6.int MPI_Recv( void *buff, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status)

      • - 免去 #buff: 您希望在哪个变量中保存收到的信件?
      • int 计数: 收到的信件总数 。例如,你发送了一个整数。这里就填写1,如果你传输的字符串 "ello,"这是六个。 (在C中,没有像弦结尾这样的东西。 )需要多一位))。这是所收到数据的最大长度。 MPI_ Get_ count 函数可用于确定所收到的特定数据长度 。
      • - MPI_Datatype数据pe:您想要接收的数据类型需要MPI数据类型,这些数据类型可以在线获取,但此处没有指定。
      • Int dest: 接收端的处理编号。 如果您需要一个程序来接收信件, 请填写接收进程编号 。
      • int 标签: 要接收信件, 信件标签必须与发送者标签值相同 。
      • - MPI_Commcom:通讯领域。
      • MPI_status * status: message status。当接收函数返回时,实际接收信件的状态信息,包括电文的源程序标识、电文标签、所含数据项目的数量等,将保存在此参数提供的变量中。

      示例

      已经解释了这些基本职能,现在我们将用一个例子来帮助你更好地掌握这些职能。

      运行结果如下图所示
      执行结果

      可以看到,当笔开始一个四行运行时,进程1-3发出信息,过程0收到信息并打印它;当笔打开一个八行运行,过程1-7发出信息,过程0收到信息并打印它。
      消息发送示意
      这项研究采用了一种常见的防止接收的方法。 信息传输是一个MPI特征,我们很难理解。 这是我们必须从MPI中学到的东西。

      报告介绍了电文发送和接收功能的若干关键参数。

      一. MPI识别信息中有四个领域:

      - 来源:发送过程是隐含决定的,过程等级是独特的。
      - 目标:确定 Sender 函数参数。
      - 标记:发送函数参数( 0, UB) 232- 1 已设置 。
      - 通信分机: MPI_COMM_WORLD 默认
      • 分类:有限/N,有秩序/兰克[0,1、2,.N-1]
      • Contex:超级名牌,用来表示通信空间。

      二. 使用缓冲

      缓冲必须能够至少持有数字图显示的数据类型。 如果收到的缓冲数量不足, 会导致溢出和错误 。

      3. 消息匹配

      - 参数匹配源、标签、逗号/天花板、标签、逗号/天花板、标签、逗号、逗号、逗号。
      - 资料来源 = MPI_ANY_SOURCE:接受任何来源的数据(任意处理器)。
      - 标记 = MPI_ANY_TAG: 任何标签信息( 信件与任何标签值匹配) 。

      四. 源 = 在干扰信息中不允许删除;否则,将产生一个死锁。

      五. 信息传输仅限于同一通信区域。

      六. 唯一接受者必须在发送函数中给予。

      参考链接:
      https://www.jianshu.com/p/2fd31665e816

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/23798.html

          热门文章

          文章分类