文章目录

  • 一、实验目的
  • 二、实验要求
  • 三、华为云平台的功能特性和实践关键步骤
  • 四、高性能MPI编程开发关键过程
  • 五、WordCount算法的MPI实现关键点
  • 六、MPI编程与MapReduce的比较分析
  • 七、小结

一、实验目的

通过华为云上的计算资源开展实践,认识华为鲲鹏高性能计算开发技术体系,进一步学习掌握云平台的功能特性和实践步骤,熟悉大数据系统云上开发部署的方式方法。通过高性能MPI编程与大数据MapReduce框架验证分析实验,掌握多节点高性能编程方法和基本原理,分析大数据开发框架中并行计算的实现方法。为开展大数据系统研发和云上部署打下基础。

二、实验要求

1.掌握云平台的功能特性和实践步骤;
2.掌握高性能MPI编程开发方法;
3.运用MPI编程实现WordCount算法;
4.分析高性能MPI编程与大数据MapReduce异同。

三、华为云平台的功能特性和实践关键步骤

1.功能特性:华为云平台提供可视化、一键式部署服务,支持并行部署,在部署好一台主机之后,可以编写脚本,分发到各个脚本,然后在另外几台主机上直接执行这个脚本,可以完成软件的安装;同时支持自定义镜像,通过华为云提供的“桶”容器,可以将已经部署好的一台主机打包成镜像,上传到“桶列表”,之后选择另外几台主机的时候直接选择列表里的私有镜像,便可以省去重复的部署过程;CloudIDE对接Git仓库,从而在安装软件OpenBlas的时候可以直接从GitHub拉下来,而不受墙内网络的影响,同时支持40多种语言的语法高亮以及缩进,在编写cpp文件的时候很方便。
2.实践关键步骤:在安装mpich的时候,进行配置(./configure……)之前,需要先安装好gcc、gfortran、g++等编译器,如果在configure和make 过程中不需要gfortran可以在命令里面加上 - -disable gfortran;因为mpich目前绑定的语言只有C/C++、fortran,这个实验中,我们使用C++,所以其实不需要fortran编译器;之后,安装OpenBlas的时候,要从Git仓库直接拉取软件源,然后是和安装mpich类似的步骤;安装好环境之后,编写代码以及保障多节点间免密登录是非常重要的一步。
3.关键图:
1).节点间免密登录

2).单节点执行WordCount程序:
节点1上执行:

节点2上执行:

节点3上执行:

节点4上执行:

3).在ecs-hw-0001(节点1)上使用分布式多节点资源并行执行:
2节点,4进程:

3节点,6进程:

4节点,8进程:

四、高性能MPI编程开发关键过程

  1. MPI的消息传递过程可以分为三个阶段:
    (1)消息装配,将发送数据从发送缓冲区中取出,加上消息信封等形成一个完整的消息。
    (2)消息传递,将装配好的消息从发送端传递到接收端。
    (3)消息拆卸,从接收到的消息中取出数据送入接收缓冲区。
    在这三个阶段,都需要类型匹配:
    (1)在消息装配时,发送缓冲区中变量的类型必须和相应的发送操作指定的类
    型相匹配;
    (2)在消息传递时,发送操作指定的类型必须和相应的接收操作指定的类型相
    互匹配;
    (3)在消息拆卸时,接收缓冲区中变量的类型必须和接收操作指定的类型相匹配。归纳起来,类型匹配规则可以概括为: 有类型数据的通信,发送方和接收方均使用相同的数据类型。 无类型数据的通信,发送方和接收方均以MPI_BYTE作为数据类型。打包数据的通信, 发送方和接收方均使用MPI_PACKED。
  2. MPI是一种在多节点的情况下能快速进行数据交流的标准。在MPI这种标准下的并行编程中,用户必须通过显式地发送和接收消息来实现处理机间的数据交换,每个并行进程都有自己独立的地址空间,相互之间不能直接访问;有了通信标准,之后必须要定义要传递的消息并确定消息的数据类型(MPI对象);使用常用的基本函数,完成不同主机、不同进程之间的消息通信;

五、WordCount算法的MPI实现关键点

1.使用并行I/O读取,并行I/O可以避免读取再Scatter的过程,这样减少了消息传递时间,但是同时也消耗了更多的内存。
2.使用虚拟进程,虚拟进程(MPI_ PROC_ NULL)是不存在的假想进程,在MPI中的主要作用是充当真实进程通信的目或源,引入虚拟进程的目的是为了在某些情况下编写通信语句的方便。当一个真实进程向一个虚拟进程发送数据或从一个虚拟进程接收数据时,该真实进程会立即正确返回,如同执行了一个空操作。在很多情况下为通信指定一个虚拟的源或目标是非常方便的,这不仅可以大大简化处理边界的代码,而且使程序显得简洁易懂。在捆绑发送接收操作中经常用到这种通信手段。一个真实进程向虚拟进程MPI PROC NULL发送消息时会立即成功返回; 一个真实进程从虚拟进程MPI _PROC NULL的接收消息时也会立即成功返回,并且对接收缓冲区没有任何改变。

MPI_File fh;
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
bufsize = FILESIZE/nprocs;
nints = bufsize/sizeof(int);
MPI_File_open(MPI_COMM_WORLD, “./project_file”, MPI_MODE_ RDONLY, MPI_INFO_NULL, &fh);
MPI_File_seek(fh, rank * bufsize, MPI_SEEK_SET); MPI_File_read(fh, buf, nints, MPI_INT, &status); MPI_File_close(&fh);

六、MPI编程与MapReduce的比较分析

MPI是基于消息传递的经典代表,是消息传递并行程序设计的标准,用于构建高可靠的、可伸缩的、灵活的分布式应用程。消息传递并行处理开销比较大,适合于大粒度的进程级并行计算,相对其他并行编程环境,它具有很好的可移植性,几乎能被所有的并行环境支持;还具有很好的可扩展性,具有完备的异步通信功能,能按照用户的要求很好地分解问题,组织不同进程之间进行数据交换,适合大规模可扩展性的并行算法。
MapReduce这种编程模型不仅适用于云计算,在多核和多处理器、Cell processor以及异构机群上同样有良好的性能。利用MapReduce,程序员能够轻松地编写紧耦合的程序,在运行时能高效地调度和执行任务,在实现时,在Map函数中指定对各分块数据的处理过程,在Reduce函数中指定如何对分块数据处理的中间结果进行归约。用户只需要指定Map和Reduce函数来编写分布式的并行程序,不需要关心如何将输入的数据分块、分配和调度,同时系统还将处理集群内节点失败及节点间通信的管理等。而MPI仅仅是一个并行计算标准,没有相应的分布式文件系统的支撑,在大数据场景下大文件的存储及访问都会成为一个问题,同时用户还需要考虑集群节点之间的通信协调、容错等问题,这些使得MPI的编程难度比较大,集群本身的规模也很难做到像MapReduce那样的超大规模。
MPI模式在学术研究领域应用较多,而在商业领域,云计算系统大多采用的是Google云计算系统中的MapReduce并行编程模型。云计算强调的就是简单的编程模型,而MapReduce就是一种高效的、简单的并行编程模式,也是一种高效的任务调度器。

七、小结

MPI是一种基于消息传递的并行编程技术,而不是一种具体的编程语言。MPI程序不仅可以适用于多线程的方式并行计算还可以让程序以多进程的方式执行,以这种方式执行的程序并不共享存储,各进程通过消息传递来进行通信。这样的好处是完成某一计算任务的不同进程可以运行在不同处理器上,甚至是在不同节点的计算机上,方便分布式计算系统。

高性能MPI编程实验相关推荐

  1. MPI编程及性能优化

    第1节 MPI简介 1.1 MPI及其历史 与OpenMP相似,消息传递接口(Message Passing Interface,简称MPI)是一种编程接口标准,而不是一种具体的编程语言.该标准是由消 ...

  2. 182_赵陈雄_java核心编程实验

    Java-核心编程实验课笔记(一) 一:Java特性和优势 1:简单性 2:面向对象 3:可移植性 4:高性能 5:分布式 6:动态性 7:多线程 8:安全性 9:健壮性 二:Java程序运行机制 1 ...

  3. 专栏推介:《Hi3861网络编程实验》

    引言 本文是鸿蒙专栏<Hi3861网络编程实验>中的第一篇.从这个专栏的名称不难看出,这里面有三个关键词:鸿蒙(即:鸿蒙操作系统):Hi3861(海思生产的一款处理器):网络编程.也就是说 ...

  4. MPI编程实例(PI、AllGather、排序)

    1.MPI 简介 MPI(Message Passing Interface)是目前最重要的一个基于消息传递的并行编程工具,它具有移植性好.功能强大.效率高等许多优点,而且有多种不同的免费.高效.实用 ...

  5. 华中科技大学计算机通信与网络实验,华中科技大学计算机通信与网络实验报告Socket编程实验.docx...

    实验一 Socket编程实验 1.1环境 开发环境:Windows 10 64 位,Intel Core i5-7300HQ CPU, 8GB 内存 1.1. 1开发平台 Microsoft Visu ...

  6. 《Linux高性能服务器编程》——导读

    前 言 为什么要写这本书 目前国内计算机书籍的一个明显弊病就是内容宽泛而空洞.很多书籍长篇大论,恨不得囊括所有最新的技术,但连一个最基本的技术细节也无法解释清楚.有些书籍给读者展现的是网络上随处可见的 ...

  7. 【MPI编程】任意数节点的树形求和(高性能计算)

    简述 之前写过一个只能在2幂次数的节点环境下使用的树形结构求和 [MPI编程]2幂节点的树形求和(高性能计算) 稍微修改了一下对应代码,就可以使用了.其实就是在逻辑上扩充一下为2的幂数.也就是说接受节 ...

  8. 机器人焊枪动作与编程实验_机器人编程实验报告.pdf

    机器人编程实验报告 班级:工71 姓名:朱雯 学号:2007013133 指令说明 DL 1,2048 删除行号在 1 和2048 之间的内容,初始化 10 OB +0 设置0 位为ON 状态 30 ...

  9. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信

    <Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...

最新文章

  1. oracle添加分区语句_按照子分区模板添加子分区
  2. 特斯拉车主「作死」成真:炫耀「主驾无人」,自动驾驶导致车毁人亡
  3. [zz]struct epoll_event
  4. Netsclaer配置
  5. C/Cpp / string 截取、替换、查找
  6. 【C语言简单说】八:分支结构之if...else...(2)
  7. java 向父类_Java基础——面向对象(Object父类)
  8. Swans and ducks, Piešťany, Slovakia
  9. 《Redis官方文档》Redis简介
  10. c++ new操作符(new operator)、operator new、placement new 、operator new[] 及相对应的delete 操作符、operator delete
  11. 555定时器+74系列芯片搭建八路抢答器,30s倒计时,附Proteus仿真等
  12. 校园招聘的简历写作与面试技巧
  13. 基于Xposed开发微信云客服笔记
  14. 第9章第24节:制作商业计划书的盈利模式幻灯片 [PowerPoint精美幻灯片实战教程]
  15. K13252 [国王游戏2]
  16. android 动态修改dns,如何修改android手机上网DNS
  17. Unity视频播放的脚本控制
  18. Data structure you've never heard of(枚举+dp)
  19. android UVCCamera could not negotiate with camera:err=-51
  20. Hadoop Shell

热门文章

  1. ASIC/SOC的可测试性
  2. 计算机怎样辅助英语教学,英语教学的有效模式--计算机辅助教学
  3. 知识管理系统中的在线编辑,让共享协作更简便
  4. 对SVM中核函数的理解
  5. Apifox简单了解——WEB端测试的集大成者
  6. 文件或目录损坏且无法读取错误的恢复方法
  7. Day21logj4与sl4j的区别
  8. 把Boostnote内的数据在云平台同步的方法
  9. Cookie的传递流程
  10. java环境变量配置linux_14行脚本配置Linux下Java环境变量