mpi4py 中的并行 I/O

原创 2018年04月16日 22:29:48

本文从本人简书博客同步过来

上一篇中我们介绍了 mpi4py 中的单边通信的同步操作,下面我们将介绍并行 I/O。

简介

POSIX 定义的文件接口并不适合描述并行文件 I/O 以及相关的优化操作,为此,MPI-2 专门定义了用于并行 I/O 的工具——ROMIO,它使用派生数据类型的方式定义数据划分,这种定义比 POSIX 中的文件访问模式具有更大的灵活性和表达能力。

相关定义

下面给出 MPI 中并行 I/O 相关的一些术语定义。

基本类型(elementary datatype,etype)

存放或访问 I/O 数据的基本单位,可以是任何 MPI 预定义或派生的数据类型,但要求数据类型图(typemap)的偏移量必须保持单调递增。etype 是 MPI-2 中访问和操作 I/O 数据的基本单位,在文件流中的偏移量以 etype 为单位计数,文件指针总是指向 etype 的起始位置。根据使用上下文不同,etype 可能代表:特定的某个 MPI 类型,某类型的一个数据项,或者某类型的跨度。在进行文件操作之前,必须通过 MPI.Datatype.Commit 注册要使用的基本数据类型(etype)。

文件类型(filetype)

文件类型定义了文件在各个进程间的划分以及访问并行文件的模板,它可能是一个单独的 etype 或者通过类型构造函数由多个相同 etype 构造的派生数据类型,要求 filetype 中任何空洞的跨度都必须是相应 etype 跨度的整数倍。filetype 的类型图中各组成元素的偏移可以不同,但必须保持单调递增。在进行文件操作之前,必须通过 MPI.Datatype.Commit 注册要使用的文件数据类型(filetype)。

文件(file)

MPI 中的文件有其特殊性,它是由一组具有确定类型的有序数据项构成,MPI 允许以随机或顺序方式访问这些数据项的任意组合。MPI 中文件总是由一组进程集体打开,针对被打开文件的所有集合操作都会影响到文件进程组内的所有进程。

文件句柄(file handle)

由 MPI.File.Open 创建并由 MPI.File.Close 取消的透明对象,所有针对文件的操作都以该句柄为参数。

绝对偏移(displacement)

相对文件起始的绝对位置,以字节为单位计。绝对偏移还能定义视图(view)的起始位置。

视图(view)

某个进程对打开的文件都要其自己的视图,视图定义了处于打开状态的文件中的,以有序 etype 为类型的可访问数据集合。视图由 3 个元素定义:绝对偏移位置(displacement),元素基本类型(etype)和文件类型(filetype)。从绝对偏移位置处,利用多次重复文件类型的定义模式来定义视图。重复模式与利用 MPI.Datatype.Create_contiguous 以文件类型和某个计数为参数定义连续数据类型的过程类似。程序执行过程中可修改视图。MPI 定义了默认视图——字节流(byte stream),其绝对偏移为 0,etype 和 filetype 均为 MPI.BYTE。

一组进程之间可通过互补视图以发散/收集等方式实现数据分布。实际上,视图是利用抽象数据结构对文件的一个虚拟化描述,也称作文件的逻辑描述。MPI 指定数据在虚拟文件结构中的布局,而不考虑文件在物理介质上的存放细节,当需要关注数据存放的细节时,MPI 提供了 hint 机制并通过 info 对象作为文件操作的参数用来附加这些信息。

相对偏移(offset)

指相对当前视图的文件位置,以基本数据类型(etype)为单位计数。在计数时,不考虑视图文件类型中的空洞。offset = 0 指向视图中第一个基本数据类型。

文件指针(file pointer)

MPI 维护的文件指针,主要包括两个含义——私有文件指针(individual file pointer)和共享文件指针(shared file pointer)。私有文件指针主要是指每个进程本地打开并维护的文件位置,而共享文件指针则指由打开文件进程组内所有进程共同维护的文件位置。

文件大小(filesize)和文件结束(end-of-file)

文件大小以字节为单位衡量,新创建的文件大小为 0。如果令绝对偏移等于 filesize,则绝对偏移指向文件最后一个字节之后的位置(即文件末尾 end-of-file)。对某个视图而言,文件结束位置是指相应视图中能够访问的第一个基本数据类型相对文件最后字节的偏移量。

以上介绍了 mpi4py 中并行 I/O 的基本概念和相关术语,在下一篇中我们将介绍并行文件操作。

版权声明: https://blog.csdn.net/ZuoShifan/article/details/79967778

<<展现C#>> 第八章 用C#写组件(修订)

第八章    用C#写组件 这一章关于用C#写组件。你学到如何写一个组件,如何编译它,且如何在一个客户程序中使用它。更深入一步是运用名字空间来组织你的应用程序。这章由两个主要大节构成:。你的第一个组...
  • rainbow
  • rainbow
  • 2000-09-07 19:01:00
  • 1178

Python多核编程mpi4py实践

Python多核编程mpi4py实践zouxy09@qq.comhttp://blog.csdn.net/zouxy09 一、概述       CPU从三十多年前的8086,到十年前的奔腾,再到当下的...
  • zouxy09
  • zouxy09
  • 2015-10-10 22:58:38
  • 20683

mpi学习日志(10):mpi4py实现简单并行矩阵乘法

除了之前利用gather求π之外,我们就没有写过mpi程序的实例. 今天我们就尝试用mpi去写一个简单的并行矩阵乘法,虽说是并行,但不是使用经典的分治去处理,而只是简单地每个进程计算一个格子的值. ...
  • ljhandlwt
  • ljhandlwt
  • 2016-07-20 08:49:28
  • 913

跨平台Caffe及I/O模型与并行方案(一)

摘要 Caffe(Convolutional Architecture for Fast Feature Embedding)是一个清晰,模块化,速度快的深度学习框架。“跨平台Caffe及I/O模型与...
  • Solomon1558
  • Solomon1558
  • 2016-08-22 09:18:42
  • 1636

80c51单片机通用I/O口

80C51单片机并行输入/输出口         80C51单片机含有4 个8位并行I/O口P0、P1、P2和P3。每个口有8个引脚,如图2-1所示,共有32个I/O引脚,每一个并行I/O口都能用作...
  • FunkyFrog821951259
  • FunkyFrog821951259
  • 2017-01-18 18:21:29
  • 4475

单片机第7章不

  • 2013年12月09日 11:45
  • 838KB
  • 下载

AT89S52单片机并行IO口

  • 2018年04月20日 16:39
  • 1.98MB
  • 下载

8051单片机的I/O口

80C51单片机并行输入/输出口         80C51单片机含有4 个8位并行I/O口P0、P1、P2和P3。每个口有8个引脚,如图2-1所示,共有32个I/O引脚,每一个并行I/O口都能用作...
  • zjy1364503349
  • zjy1364503349
  • 2017-01-19 09:11:58
  • 2653

使用74系列芯片作为I/O并行扩展的方法以及总线驱动芯片的使用方法

2006-05-06 00:42:35 使用74系列芯片作为I/O并行扩展的方法以及总线驱动芯片的使用方法使用74系列芯片作为I/O并行扩展的常见于过去单片机I/O口不够的情况,而...
  • mybirdsky
  • mybirdsky
  • 2008-01-17 16:02:00
  • 1578

计算机组原理 实验报告 并行接口电路I O实验

  • 2011年02月20日 22:53
  • 320KB
  • 下载
收藏助手
不良信息举报
您举报文章:mpi4py 中的并行 I/O
举报原因:
原因补充:

(最多只允许输入30个字)