热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MPI编程

MPIMessagePassingInterface是一组由学术界和工业界联合发展的、面向主流并行计算机的、标准化和可移植的消息传递接口标准。定义了若干核心库函数的语法和涵义;

MPI = Message Passing Interface

是一组由学术界和工业界联合发展的、面向主流并行计算机的、标准化
和可移植的消息传递接口标准。

  1. 定义了若干核心库函数的语法和涵义;
  2. 独立于编程语言,支持 C/C++、Fortran 语言的绑定;
  3. 独立于平台,学术界和厂商发展了若干高效、可靠的实现版;
  4. 支撑和推动了高性能计算软硬件生态的发展。
    MPI的一个主要的实现版本:MPICH。

MPI 的主要理念


  1. 机器由若干可以相互传递消息的进程 (process) 构成;
  2. 每个进程拥有私有的存储空间,进程间无共享存储;
  3. 进程间的消息传递采用显式的发送/接受 (send/receive) 机制完成;
  4. 程序的运行模式主要有松散同步和完全异步两种;
  5. 程序往往采用 SPMD (single program multiple data) 方式编写。

MPI 程序的结构

在这里插入图片描述

常用的MPI函数


  1. MPI_Init 一般在主程序的开头,主要用于启动 MPI 环境;
  2. MPI_Finalize 一般在主程序末尾,主要用于终止 MPI 环境;
  3. MPI_Comm_size 函数用来获得目标通信器的总进程数;
  4. MPI_Comm_rank 函数用来获得当前进程在目标通信器的进程号;
  5. MPI_Send 函数用来发送消息;
  6. MPI_Recv 函数用来接收消息;

int MPI_Init(int *argc, char ***argv)
int MPI_Finalize()
int MPI_Comm_size(MPI_Comm comm, int *size)
int MPI_Comm_rank(MPI_Comm comm, int *rank)
int MPI_Send(void *buf, int count, MPI_Datatype datatype,int dest, int tag, MPI_Comm comm)
int MPI_Recv(void *buf, int count, MPI_Datatype datatype,int source, int tag, MPI_Comm comm, MPI_Status *status)

tag 表示消息标签 (非负整数),最大不超过常量 MPI_TAG_UB; buf 表示发送和接收的消息所对应的本地内存位置;
count 表示发送和接收的消息长度;
datatype 表示发送和接收的消息的数据类型。
dest 和 source 分别表示接收端和发送端的进程号;
接收函数比发送函数多一个参数:status;
它保存了函数返回的通信状态,可置为 MPI_STATUS_IGNORE;
其类型 MPI_Status 是一个 MPI 预定义的结构体:

typedef struct MPI_Status {
int MPI_SOURCE;
int MPI_TAG;
int MPI_ERROR;

};



通信器 (communicator)变量


  1. 定义了所有参与通信的进程的集合;
  2. 几乎所有的 MPI 函数都需要指定该函数所作用的通信器;
  3. 通信器变量的数据类型是 MPI_Comm;
  4. 默认通信器是 MPI_COMM_WORLD (所有进程)。

MPI 数据类型

在这里插入图片描述

阻塞与非阻塞通信

在这里插入图片描述


推荐阅读
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文探讨了如何在 F# Interactive (FSI) 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
author-avatar
DaybreakCP
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有