- •Contents
- •List of Figures
- •List of Tables
- •Acknowledgments
- •Introduction to MPI
- •Overview and Goals
- •Background of MPI-1.0
- •Background of MPI-1.1, MPI-1.2, and MPI-2.0
- •Background of MPI-1.3 and MPI-2.1
- •Background of MPI-2.2
- •Who Should Use This Standard?
- •What Platforms Are Targets For Implementation?
- •What Is Included In The Standard?
- •What Is Not Included In The Standard?
- •Organization of this Document
- •MPI Terms and Conventions
- •Document Notation
- •Naming Conventions
- •Semantic Terms
- •Data Types
- •Opaque Objects
- •Array Arguments
- •State
- •Named Constants
- •Choice
- •Addresses
- •Language Binding
- •Deprecated Names and Functions
- •Fortran Binding Issues
- •C Binding Issues
- •C++ Binding Issues
- •Functions and Macros
- •Processes
- •Error Handling
- •Implementation Issues
- •Independence of Basic Runtime Routines
- •Interaction with Signals
- •Examples
- •Point-to-Point Communication
- •Introduction
- •Blocking Send and Receive Operations
- •Blocking Send
- •Message Data
- •Message Envelope
- •Blocking Receive
- •Return Status
- •Passing MPI_STATUS_IGNORE for Status
- •Data Type Matching and Data Conversion
- •Type Matching Rules
- •Type MPI_CHARACTER
- •Data Conversion
- •Communication Modes
- •Semantics of Point-to-Point Communication
- •Buffer Allocation and Usage
- •Nonblocking Communication
- •Communication Request Objects
- •Communication Initiation
- •Communication Completion
- •Semantics of Nonblocking Communications
- •Multiple Completions
- •Non-destructive Test of status
- •Probe and Cancel
- •Persistent Communication Requests
- •Send-Receive
- •Null Processes
- •Datatypes
- •Derived Datatypes
- •Type Constructors with Explicit Addresses
- •Datatype Constructors
- •Subarray Datatype Constructor
- •Distributed Array Datatype Constructor
- •Address and Size Functions
- •Lower-Bound and Upper-Bound Markers
- •Extent and Bounds of Datatypes
- •True Extent of Datatypes
- •Commit and Free
- •Duplicating a Datatype
- •Use of General Datatypes in Communication
- •Correct Use of Addresses
- •Decoding a Datatype
- •Examples
- •Pack and Unpack
- •Canonical MPI_PACK and MPI_UNPACK
- •Collective Communication
- •Introduction and Overview
- •Communicator Argument
- •Applying Collective Operations to Intercommunicators
- •Barrier Synchronization
- •Broadcast
- •Example using MPI_BCAST
- •Gather
- •Examples using MPI_GATHER, MPI_GATHERV
- •Scatter
- •Examples using MPI_SCATTER, MPI_SCATTERV
- •Example using MPI_ALLGATHER
- •All-to-All Scatter/Gather
- •Global Reduction Operations
- •Reduce
- •Signed Characters and Reductions
- •MINLOC and MAXLOC
- •All-Reduce
- •Process-local reduction
- •Reduce-Scatter
- •MPI_REDUCE_SCATTER_BLOCK
- •MPI_REDUCE_SCATTER
- •Scan
- •Inclusive Scan
- •Exclusive Scan
- •Example using MPI_SCAN
- •Correctness
- •Introduction
- •Features Needed to Support Libraries
- •MPI's Support for Libraries
- •Basic Concepts
- •Groups
- •Contexts
- •Intra-Communicators
- •Group Management
- •Group Accessors
- •Group Constructors
- •Group Destructors
- •Communicator Management
- •Communicator Accessors
- •Communicator Constructors
- •Communicator Destructors
- •Motivating Examples
- •Current Practice #1
- •Current Practice #2
- •(Approximate) Current Practice #3
- •Example #4
- •Library Example #1
- •Library Example #2
- •Inter-Communication
- •Inter-communicator Accessors
- •Inter-communicator Operations
- •Inter-Communication Examples
- •Caching
- •Functionality
- •Communicators
- •Windows
- •Datatypes
- •Error Class for Invalid Keyval
- •Attributes Example
- •Naming Objects
- •Formalizing the Loosely Synchronous Model
- •Basic Statements
- •Models of Execution
- •Static communicator allocation
- •Dynamic communicator allocation
- •The General case
- •Process Topologies
- •Introduction
- •Virtual Topologies
- •Embedding in MPI
- •Overview of the Functions
- •Topology Constructors
- •Cartesian Constructor
- •Cartesian Convenience Function: MPI_DIMS_CREATE
- •General (Graph) Constructor
- •Distributed (Graph) Constructor
- •Topology Inquiry Functions
- •Cartesian Shift Coordinates
- •Partitioning of Cartesian structures
- •Low-Level Topology Functions
- •An Application Example
- •MPI Environmental Management
- •Implementation Information
- •Version Inquiries
- •Environmental Inquiries
- •Tag Values
- •Host Rank
- •IO Rank
- •Clock Synchronization
- •Memory Allocation
- •Error Handling
- •Error Handlers for Communicators
- •Error Handlers for Windows
- •Error Handlers for Files
- •Freeing Errorhandlers and Retrieving Error Strings
- •Error Codes and Classes
- •Error Classes, Error Codes, and Error Handlers
- •Timers and Synchronization
- •Startup
- •Allowing User Functions at Process Termination
- •Determining Whether MPI Has Finished
- •Portable MPI Process Startup
- •The Info Object
- •Process Creation and Management
- •Introduction
- •The Dynamic Process Model
- •Starting Processes
- •The Runtime Environment
- •Process Manager Interface
- •Processes in MPI
- •Starting Processes and Establishing Communication
- •Reserved Keys
- •Spawn Example
- •Manager-worker Example, Using MPI_COMM_SPAWN.
- •Establishing Communication
- •Names, Addresses, Ports, and All That
- •Server Routines
- •Client Routines
- •Name Publishing
- •Reserved Key Values
- •Client/Server Examples
- •Ocean/Atmosphere - Relies on Name Publishing
- •Simple Client-Server Example.
- •Other Functionality
- •Universe Size
- •Singleton MPI_INIT
- •MPI_APPNUM
- •Releasing Connections
- •Another Way to Establish MPI Communication
- •One-Sided Communications
- •Introduction
- •Initialization
- •Window Creation
- •Window Attributes
- •Communication Calls
- •Examples
- •Accumulate Functions
- •Synchronization Calls
- •Fence
- •General Active Target Synchronization
- •Lock
- •Assertions
- •Examples
- •Error Handling
- •Error Handlers
- •Error Classes
- •Semantics and Correctness
- •Atomicity
- •Progress
- •Registers and Compiler Optimizations
- •External Interfaces
- •Introduction
- •Generalized Requests
- •Examples
- •Associating Information with Status
- •MPI and Threads
- •General
- •Initialization
- •Introduction
- •File Manipulation
- •Opening a File
- •Closing a File
- •Deleting a File
- •Resizing a File
- •Preallocating Space for a File
- •Querying the Size of a File
- •Querying File Parameters
- •File Info
- •Reserved File Hints
- •File Views
- •Data Access
- •Data Access Routines
- •Positioning
- •Synchronism
- •Coordination
- •Data Access Conventions
- •Data Access with Individual File Pointers
- •Data Access with Shared File Pointers
- •Noncollective Operations
- •Collective Operations
- •Seek
- •Split Collective Data Access Routines
- •File Interoperability
- •Datatypes for File Interoperability
- •Extent Callback
- •Datarep Conversion Functions
- •Matching Data Representations
- •Consistency and Semantics
- •File Consistency
- •Random Access vs. Sequential Files
- •Progress
- •Collective File Operations
- •Type Matching
- •Logical vs. Physical File Layout
- •File Size
- •Examples
- •Asynchronous I/O
- •I/O Error Handling
- •I/O Error Classes
- •Examples
- •Subarray Filetype Constructor
- •Requirements
- •Discussion
- •Logic of the Design
- •Examples
- •MPI Library Implementation
- •Systems with Weak Symbols
- •Systems Without Weak Symbols
- •Complications
- •Multiple Counting
- •Linker Oddities
- •Multiple Levels of Interception
- •Deprecated Functions
- •Deprecated since MPI-2.0
- •Deprecated since MPI-2.2
- •Language Bindings
- •Overview
- •Design
- •C++ Classes for MPI
- •Class Member Functions for MPI
- •Semantics
- •C++ Datatypes
- •Communicators
- •Exceptions
- •Mixed-Language Operability
- •Problems With Fortran Bindings for MPI
- •Problems Due to Strong Typing
- •Problems Due to Data Copying and Sequence Association
- •Special Constants
- •Fortran 90 Derived Types
- •A Problem with Register Optimization
- •Basic Fortran Support
- •Extended Fortran Support
- •The mpi Module
- •No Type Mismatch Problems for Subroutines with Choice Arguments
- •Additional Support for Fortran Numeric Intrinsic Types
- •Language Interoperability
- •Introduction
- •Assumptions
- •Initialization
- •Transfer of Handles
- •Status
- •MPI Opaque Objects
- •Datatypes
- •Callback Functions
- •Error Handlers
- •Reduce Operations
- •Addresses
- •Attributes
- •Extra State
- •Constants
- •Interlanguage Communication
- •Language Bindings Summary
- •Groups, Contexts, Communicators, and Caching Fortran Bindings
- •External Interfaces C++ Bindings
- •Change-Log
- •Bibliography
- •Examples Index
- •MPI Declarations Index
- •MPI Function Index
1
2
3
4
5
6
398 |
CHAPTER 13. I/O |
|
IF (CP_AMODE .GE. MATCHER .AND. HIFOUND .EQ. 0) THEN |
|
HIFOUND = 1 |
|
LBIT = MATCHER |
|
CP_AMODE = CP_AMODE - MATCHER |
|
END IF |
20 |
CONTINUE |
7IF (HIFOUND .EQ. 1 .AND. LBIT .EQ. TEST_BIT) BIT_FOUND = 1
8
9
10
11
IF (BIT_FOUND .EQ. 0 .AND. HIFOUND .EQ. 1 .AND. &
CP_AMODE .GT. 0) GO TO 100
END
12This routine could be called successively to decode amode, one bit at a time. For
13example, the following code fragment would check for MPI_MODE_RDONLY.
14
15CALL BIT_QUERY(MPI_MODE_RDONLY, 30, AMODE, BIT_FOUND)
16IF (BIT_FOUND .EQ. 1) THEN
17PRINT *, ' FOUND READ-ONLY BIT IN AMODE=', AMODE
18ELSE
19PRINT *, ' READ-ONLY BIT NOT FOUND IN AMODE=', AMODE
20END IF
21 |
|
22 |
13.2.8 File Info |
23
Hints speci ed via info (see Section 9, page 299) allow a user to provide information such
24
as le access patterns and le system speci cs to direct optimization. Providing hints may
25
enable an implementation to deliver increased I/O performance or minimize the use of
26
system resources. However, hints do not change the semantics of any of the I/O interfaces.
27
In other words, an implementation is free to ignore all hints. Hints are speci ed on a per
28
le basis, in MPI_FILE_OPEN, MPI_FILE_DELETE, MPI_FILE_SET_VIEW, and
29
MPI_FILE_SET_INFO, via the opaque info object. When an info object that speci es a
30
subset of valid hints is passed to MPI_FILE_SET_VIEW or MPI_FILE_SET_INFO, there will
31
be no e ect on previously set or defaulted hints that the info does not specify.
32
33Advice to implementors. It may happen that a program is coded with hints for one
34system, and later executes on another system that does not support these hints. In
35general, unsupported hints should simply be ignored. Needless to say, no hint can be
36mandatory. However, for each hint used by a speci c implementation, a default value
37must be provided when the user does not specify a value for this hint. (End of advice
38to implementors.)
39
40
41
42
43
44
45
46
MPI_FILE_SET_INFO(fh, info)
INOUT |
fh |
le handle (handle) |
IN |
info |
info object (handle) |
47 |
int MPI_File_set_info(MPI_File fh, MPI_Info info) |
48 |
MPI_FILE_SET_INFO(FH, INFO, IERROR) |
|
13.2. FILE MANIPULATION |
399 |
INTEGER FH, INFO, IERROR
fvoid MPI::File::Set_info(const MPI::Info& info) (binding deprecated, see Section 15.2) g
MPI_FILE_SET_INFO sets new values for the hints of the le associated with
fh. MPI_FILE_SET_INFO is a collective routine. The info object may be di erent on each process, but any info entries that an implementation requires to be the same on all processes must appear with the same value in each process's info object.
Advice to users. Many info items that an implementation can use when it creates or opens a le cannot easily be changed once the le has been created or opened. Thus, an implementation may ignore hints issued in this call that it would have accepted in an open call. (End of advice to users.)
MPI_FILE_GET_INFO(fh, info_used)
IN |
fh |
le handle (handle) |
OUT |
info_used |
new info object (handle) |
int MPI_File_get_info(MPI_File fh, MPI_Info *info_used)
MPI_FILE_GET_INFO(FH, INFO_USED, IERROR)
INTEGER FH, INFO_USED, IERROR
fMPI::Info MPI::File::Get_info() const (binding deprecated, see Section 15.2) g
MPI_FILE_GET_INFO returns a new info object containing the hints of the le associated with fh. The current setting of all hints actually used by the system related to this openle is returned in info_used. If no such hints exist, a handle to a newly created info object is returned that contains no key/value pair. The user is responsible for freeing info_used via MPI_INFO_FREE.
Advice to users. The info object returned in info_used will contain all hints currently active for this le. This set of hints may be greater or smaller than the set of hints passed in to MPI_FILE_OPEN, MPI_FILE_SET_VIEW, and MPI_FILE_SET_INFO, as the system may not recognize some hints set by the user, and may recognize other hints that the user has not set. (End of advice to users.)
Reserved File Hints
Some potentially useful hints (info key values) are outlined below. The following key values are reserved. An implementation is not required to interpret these key values, but if it does interpret the key value, it must provide the functionality described. (For more details on \info," see Section 9, page 299.)
These hints mainly a ect access patterns and the layout of data on parallel I/O devices. For each hint name introduced, we describe the purpose of the hint, and the type of the hint value. The \[SAME]" annotation speci es that the hint values provided by all participating processes must be identical; otherwise the program is erroneous. In addition, some hints are
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
400 |
CHAPTER 13. I/O |
1context dependent, and are only used by an implementation at speci c times (e.g., le_perm
2
3
is only useful during le creation).
4access_style (comma separated list of strings): This hint speci es the manner in which
5the le will be accessed until the le is closed or until the access_style key value is
6altered. The hint value is a comma separated list of the following: read_once, write_once,
7read_mostly, write_mostly, sequential, reverse_sequential, and random.
8
9
collective_bu ering (boolean) [SAME]: This hint speci es whether the application may
10bene t from collective bu ering. Collective bu ering is an optimization performed
11on collective accesses. Accesses to the le are performed on behalf of all processes in
12the group by a number of target nodes. These target nodes coalesce small requests
13into large disk accesses. Legal values for this key are true and false. Collective bu ering
14parameters are further directed via additional hints: cb_block_size, cb_bu er_size, and
15cb_nodes.
16
17
18
19
cb_block_size (integer) [SAME]: This hint speci es the block size to be used for collective bu ering le access. Target nodes access data in chunks of this size. The chunks are distributed among target nodes in a round-robin (CYCLIC) pattern.
20cb_bu er_size (integer) [SAME]: This hint speci es the total bu er space that can be used
21for collective bu ering on each target node, usually a multiple of cb_block_size.
22
23cb_nodes (integer) [SAME]: This hint speci es the number of target nodes to be used for
24collective bu ering.
25
chunked (comma separated list of integers) [SAME]: This hint speci es that the le
26
consists of a multidimentional array that is often accessed by subarrays. The value
27
for this hint is a comma separated list of array dimensions, starting from the most
28
signi cant one (for an array stored in row-major order, as in C, the most signi cant
29
dimension is the rst one; for an array stored in column-major order, as in Fortran, the
30
most signi cant dimension is the last one, and array dimensions should be reversed).
31
32chunked_item (comma separated list of integers) [SAME]: This hint speci es the size
33of each array entry, in bytes.
34
chunked_size (comma separated list of integers) [SAME]: This hint speci es the di-
35
mensions of the subarrays. This is a comma separated list of array dimensions, starting
36
from the most signi cant one.
37
38
lename (string): This hint speci es the le name used when the le was opened. If the
39
implementation is capable of returning the le name of an open le, it will be returned
40
using this key by MPI_FILE_GET_INFO. This key is ignored when passed to
41
MPI_FILE_OPEN, MPI_FILE_SET_VIEW, MPI_FILE_SET_INFO, and
42
MPI_FILE_DELETE.
43
44le_perm (string) [SAME]: This hint speci es the le permissions to use for le creation.
45Setting this hint is only useful when passed to MPI_FILE_OPEN with an amode that
46includes MPI_MODE_CREATE. The set of legal values for this key is implementation
47dependent.
48