AMPI #952: update ROMIO to MPICH2-1.4.1p1
[charm.git] / src / libs / ck-libs / ampi / romio / README
blob42fe329a9fbda326b4767d56d59a3fab2eff3fb8
1           ROMIO: A High-Performance, Portable MPI-IO Implementation
3                       Version 2008-03-09
5 Major Changes in this version:
6 ------------------------------
7 * Fixed performance problems with the darray and subarray datatypes
8   when using MPICH2.
10 * Better support for building against existing MPICH and MPICH2 versions.
12   When building against an existing MPICH installation, use the
13   "--with-mpi=mpich" option to ROMIO configure.  For MPICH2, use the
14   "--with-mpi=mpich2" option.  These will allow ROMIO to take advantage
15   of internal features of these implementations.
17 * Deprecation of SFS, HFS, and PIOFS implementations.
19   These are no longer actively supported, although the code will continue
20   to be distributed for now.
22 * Initial support for the Panasas PanFS filesystem.
24   PanFS allows users to specify the layout of a file at file-creation time.
25   Layout information includes the number of StorageBlades (SB)
26   across which the data is stored, the number of SBs across which a 
27   parity stripe is written, and the number of consecutive stripes that 
28   are placed on the same set of SBs.   The panfs_layout_* hints are only 
29   used if supplied at file-creation time.
31   panfs_layout_type - Specifies the layout of a file:
32                       2 = RAID0
33                       3 = RAID5 Parity Stripes
34   panfs_layout_stripe_unit - The size of the stripe unit in bytes
35   panfs_layout_total_num_comps - The total number of StorageBlades a file
36                                  is striped across.
37   panfs_layout_parity_stripe_width - If the layout type is RAID5 Parity
38                                      Stripes, this hint specifies the 
39                                      number of StorageBlades in a parity
40                                      stripe.
41   panfs_layout_parity_stripe_depth - If the layout type is RAID5 Parity
42                                      Stripes, this hint specifies the
43                                      number of contiguous parity stripes written 
44                                      across the same set of SBs.
45   panfs_layout_visit_policy - If the layout type is RAID5 Parity Stripes, 
46                               the policy used to determine the parity 
47                               stripe a given file offset is written to:
48                               1 = Round Robin
50   PanFS supports the "concurrent write" (CW) mode, where groups of cooperating 
51   clients can disable the PanFS consistency mechanisms and use their own 
52   consistency protocol.  Clients participating in concurrent write mode use 
53   application specific information to improve performance while maintaining 
54   file consistency.  All clients accessing the file(s) must enable concurrent 
55   write mode.  If any client does not enable concurrent write mode, then the 
56   PanFS consistency protocol will be invoked.  Once a file is opened in CW mode 
57   on a machine, attempts to open a file in non-CW mode will fail with 
58   EACCES.  If a file is already opened in non-CW mode, attempts to open 
59   the file in CW mode will fail with EACCES.  The following hint is 
60   used to enable concurrent write mode.
62   panfs_concurrent_write - If set to 1 at file open time, the file 
63                            is opened using the PanFS concurrent write 
64                            mode flag.  Concurrent write mode is not a
65                            persistent attribute of the file.
67   Below is an example PanFS layout using the following parameters:
69   - panfs_layout_type                = 3
70   - panfs_layout_total_num_comps     = 100
71   - panfs_layout_parity_stripe_width = 10
72   - panfs_layout_parity_stripe_depth = 8
73   - panfs_layout_visit_policy        = 1
75    Parity Stripe Group 1     Parity Stripe Group 2  . . . Parity Stripe Group 10
76   ----------------------    ----------------------        --------------------
77    SB1    SB2  ... SB10     SB11    SB12 ...  SB20  ...   SB91   SB92 ... SB100
78   -----------------------   -----------------------       ---------------------
79    D1     D2   ...  D10      D91    D92  ...  D100        D181   D182  ... D190
80    D11    D12       D20      D101   D102      D110        D191   D192      D193
81    D21    D22       D30      . . .                        . . .
82    D31    D32       D40
83    D41    D42       D50
84    D51    D52       D60
85    D61    D62       D70
86    D71    D72       D80
87    D81    D82       D90      D171   D172      D180        D261   D262   D270
88    D271   D272      D273     . . .                        . . .
89    ...
91 * Initial support for the Globus GridFTP filesystem.  Work contributed by Troy
92   Baer (troy@osc.edu).  
94 Major Changes in Version 1.2.5:
95 ------------------------------
97 * Initial support for MPICH-2
99 * fix for a bug in which ROMIO would get confused for some permutations
100   of the aggregator list
102 * direct io on IRIX's XFS should work now
104 * fixed an issue with the Fortran bindings that would cause them to fail
105    when some compilers tried to build them.
107 * Initial support for deferred opens
109 Major Changes in Version 1.2.4:
110 ------------------------------
111 * Added section describing ROMIO MPI_FILE_SYNC and MPI_FILE_CLOSE behavior to 
112   User's Guide
114 * Bug removed from PVFS ADIO implementation regarding resize operations
116 * Added support for PVFS listio operations, including hints to control use
119 Major Changes in Version 1.2.3:
120 -------------------------------
121 * Enhanced aggregation control via cb_config_list, romio_cb_read,
122   and romio_cb_write hints
124 * Asynchronous IO can be enabled under Linux with the --enable-aio argument
125   to configure
127 * Additional PVFS support
129 * Additional control over data sieving with romio_ds_read hint
131 * NTFS ADIO implementation integrated into source tree
133 * testfs ADIO implementation added for debugging purposes
136 Major Changes in Version 1.0.3:
137 -------------------------------
139 * When used with MPICH 1.2.1, the MPI-IO functions return proper error codes 
140   and classes, and the status object is filled in.
142 * On SGI's XFS file system, ROMIO can use direct I/O even if the
143   user's request does not meet the various restrictions needed to use
144   direct I/O. ROMIO does this by doing part of the request with
145   buffered I/O (until all the restrictions are met) and doing the rest
146   with direct I/O. (This feature hasn't been tested rigorously. Please
147   check for errors.) 
149   By default, ROMIO will use only buffered I/O. Direct I/O can be
150   enabled either by setting the environment variables MPIO_DIRECT_READ
151   and/or MPIO_DIRECT_WRITE to TRUE, or on a per-file basis by using
152   the info keys "direct_read" and "direct_write". 
154   Direct I/O will result in higher performance only if you are
155   accessing a high-bandwidth disk system. Otherwise, buffered I/O is
156   better and is therefore used as the default.
158 * Miscellaneous bug fixes.
161 Major Changes Version 1.0.2:
162 ---------------------------
164 * Implemented the shared file pointer functions (Section 9.4.4 of MPI-2) and 
165   split collective I/O functions (Section 9.4.5). Therefore, the main
166    components of the MPI-2 I/O chapter not yet implemented are 
167   file interoperability and error handling.
169 * Added support for using "direct I/O" on SGI's XFS file system. 
170   Direct I/O is an optional feature of XFS in which data is moved
171   directly between the user's buffer and the storage devices, bypassing 
172   the file-system cache. This can improve performance significantly on 
173   systems with high disk bandwidth. Without high disk bandwidth,
174   regular I/O (that uses the file-system cache) perfoms better.
175   ROMIO, therefore, does not use direct I/O by default. The user can
176   turn on direct I/O (separately for reading and writing) either by
177   using environment variables or by using MPI's hints mechanism (info). 
178   To use the environment-variables method, do
179        setenv MPIO_DIRECT_READ TRUE
180        setenv MPIO_DIRECT_WRITE TRUE
181   To use the hints method, the two keys are "direct_read" and "direct_write". 
182   By default their values are "false". To turn on direct I/O, set the values 
183   to "true". The environment variables have priority over the info keys.
184   In other words, if the environment variables are set to TRUE, direct I/O
185   will be used even if the info keys say "false", and vice versa. 
186   Note that direct I/O must be turned on separately for reading 
187   and writing.
188   The environment-variables method assumes that the environment
189   variables can be read by each process in the MPI job. This is
190   not guaranteed by the MPI Standard, but it works with SGI's MPI
191   and the ch_shmem device of MPICH.
193 * Added support (new ADIO device, ad_pvfs) for the PVFS parallel 
194   file system for Linux clusters, developed at Clemson University
195   (see http://www.parl.clemson.edu/pvfs ). To use it, you must first install
196   PVFS and then when configuring ROMIO, specify "-file_system=pvfs" in 
197   addition to any other options to "configure". (As usual, you can configure
198   for multiple file systems by using "+"; for example, 
199   "-file_system=pvfs+ufs+nfs".)  You will need to specify the path 
200   to the PVFS include files via the "-cflags" option to configure, 
201   for example, "configure -cflags=-I/usr/pvfs/include". You
202   will also need to specify the full path name of the PVFS library.
203   The best way to do this is via the "-lib" option to MPICH's 
204   configure script (assuming you are using ROMIO from within MPICH). 
206 * Uses weak symbols (where available) for building the profiling version,
207   i.e., the PMPI routines. As a result, the size of the library is reduced
208   considerably. 
210 * The Makefiles use "virtual paths" if supported by the make utility. GNU make
211   supports it, for example. This feature allows you to untar the
212   distribution in some directory, say a slow NFS directory,
213   and compile the library (the .o files) in another 
214   directory, say on a faster local disk. For example, if the tar file
215   has been untarred in an NFS directory called /home/thakur/romio,
216   one can compile it in a different directory, say /tmp/thakur, as follows:
217         cd /tmp/thakur
218         /home/thakur/romio/configure
219         make
220   The .o files will be created in /tmp/thakur; the library will be created in
221   /home/thakur/romio/lib/$ARCH/libmpio.a .
222   This method works only if the make utility supports virtual paths.
223   If the default make does not, you can install GNU make which does,
224   and specify it to configure as
225        /home/thakur/romio/configure -make=/usr/gnu/bin/gmake (or whatever)
227 * Lots of miscellaneous bug fixes and other enhancements.
229 * This version is included in MPICH 1.2.0. If you are using MPICH, you
230   need not download ROMIO separately; it gets built as part of MPICH.
231   The previous version of ROMIO is included in LAM, HP MPI, SGI MPI, and 
232   NEC MPI. NEC has also implemented the MPI-IO functions missing 
233   in ROMIO, and therefore NEC MPI has a complete implementation
234   of MPI-IO.
237 Major Changes in Version 1.0.1:
238 ------------------------------
240 * This version is included in MPICH 1.1.1 and HP MPI 1.4.
242 * Added support for NEC SX-4 and created a new device ad_sfs for
243   NEC SFS file system.
245 * New devices ad_hfs for HP/Convex HFS file system and ad_xfs for 
246   SGI XFS file system.
248 * Users no longer need to prefix the filename with the type of 
249   file system; ROMIO determines the file-system type on its own.
251 * Added support for 64-bit file sizes on IBM PIOFS, SGI XFS,
252   HP/Convex HFS, and NEC SFS file systems.
254 * MPI_Offset is an 8-byte integer on machines that support 8-byte integers.
255   It is of type "long long" in C and "integer*8" in Fortran.
256   With a Fortran 90 compiler, you can use either integer*8 or
257   integer(kind=MPI_OFFSET_KIND). 
258   If you printf an MPI_Offset in C, remember to use %lld 
259   or %ld as required by your compiler. (See what is used in the test 
260   program romio/test/misc.c.)
262 * On some machines, ROMIO detects at configure time that "long long" is 
263   either not supported by the C compiler or it doesn't work properly.
264   In such cases, configure sets MPI_Offset to long in C and integer in
265   Fortran. This happens on Intel Paragon, Sun4, and FreeBSD.
267 * Added support for passing hints to the implementation via the MPI_Info 
268   parameter. ROMIO understands the following hints (keys in MPI_Info object):
270   /* on all file systems */ 
271      cb_buffer_size - buffer size for collective I/O
272      cb_nodes - no. of processes that actually perform I/O in collective I/O
273      ind_rd_buffer_size - buffer size for data sieving in independent reads
275   /* on all file systems except IBM PIOFS */
276      ind_wr_buffer_size - buffer size for data sieving in independent writes
277       /* ind_wr_buffer_size is ignored on PIOFS because data sieving 
278          cannot be done for writes since PIOFS doesn't support file locking */
280   /* on Intel PFS and IBM PIOFS only. These hints are understood only if
281      supplied at file-creation time. */
282      striping_factor - no. of I/O devices to stripe the file across
283      striping_unit - the striping unit in bytes
284      start_iodevice - the number of the I/O device from which to start
285                       striping (between 0 and (striping_factor-1))
287   /* on Intel PFS only. */
288      pfs_svr_buf - turn on or off PFS server buffering by setting the value 
289                to "true" or "false", case-sensitive.
290       
291   If ROMIO doesn't understand a hint, or if the value is invalid, the hint
292   will be ignored. The values of hints being used by ROMIO at any time 
293   can be obtained via MPI_File_get_info.
297 General Information 
298 -------------------
300 ROMIO is a high-performance, portable implementation of MPI-IO (the
301 I/O chapter in MPI-2). ROMIO's home page is at
302 http://www.mcs.anl.gov/romio .  The MPI-2 standard is available at
303 http://www.mpi-forum.org/docs/docs.html .
305 This version of ROMIO includes everything defined in the MPI-2 I/O
306 chapter except support for file interoperability (Sec. 9.5 of MPI-2) and
307 user-defined error handlers for files (Sec. 4.13.3).  The subarray and
308 distributed array datatype constructor functions from Chapter 4
309 (Sec. 4.14.4 & 4.14.5) have been implemented. They are useful for
310 accessing arrays stored in files. The functions MPI_File_f2c and
311 MPI_File_c2f (Sec. 4.12.4) are also implemented.
313 C, Fortran, and profiling interfaces are provided for all functions
314 that have been implemented. 
316 Please read the limitations of this version of ROMIO that are listed
317 below (e.g., MPIO_Request object, restriction to homogeneous
318 environments).
320 This version of ROMIO runs on at least the following machines: IBM SP;
321 Intel Paragon; HP Exemplar; SGI Origin2000; Cray T3E; NEC SX-4; other
322 symmetric multiprocessors from HP, SGI, DEC, Sun, and IBM; and networks of
323 workstations (Sun, SGI, HP, IBM, DEC, Linux, and FreeBSD).  Supported
324 file systems are IBM PIOFS, Intel PFS, HP/Convex HFS, SGI XFS, NEC
325 SFS, PVFS, NFS, and any Unix file system (UFS).
327 This version of ROMIO is included in MPICH 1.2.3; an earlier version
328 is included in at least the following MPI implementations: LAM, HP
329 MPI, SGI MPI, and NEC MPI.  
331 Note that proper I/O error codes and classes are returned and the
332 status variable is filled only when used with MPICH 1.2.1 or later.
334 You can open files on multiple file systems in the same program. The
335 only restriction is that the directory where the file is to be opened
336 must be accessible from the process opening the file. For example, a
337 process running on one workstation may not be able to access a
338 directory on the local disk of another workstation, and therefore
339 ROMIO will not be able to open a file in such a directory. NFS-mounted
340 files can be accessed.
342 An MPI-IO file created by ROMIO is no different than any other file
343 created by the underlying file system. Therefore, you may use any of
344 the commands provided by the file system to access the file, e.g., ls,
345 mv, cp, rm, ftp.
348 Using ROMIO on NFS
349 ------------------
351 To use ROMIO on NFS, file locking with fcntl must work correctly on
352 the NFS installation. On some installations, fcntl locks don't work.
353 To get them to work, you need to use Version 3 of NFS, ensure that the
354 lockd daemon is running on all the machines, and have the system
355 administrator mount the NFS file system with the "noac" option (no
356 attribute caching). Turning off attribute caching may reduce
357 performance, but it is necessary for correct behavior.
359 The following are some instructions we received from Ian Wells of HP
360 for setting the noac option on NFS. We have not tried them
361 ourselves. We are including them here because you may find 
362 them useful. Note that some of the steps may be specific to HP
363 systems, and you may need root permission to execute some of the
364 commands. 
365    
366    >1. first confirm you are running nfs version 3
367    >
368    >rpcnfo -p `hostname` | grep nfs
369    >
370    >ie 
371    >    goedel >rpcinfo -p goedel | grep nfs
372    >    100003    2   udp   2049  nfs
373    >    100003    3   udp   2049  nfs
374    >
375    >
376    >2. then edit /etc/fstab for each nfs directory read/written by MPIO
377    >   on each  machine used for multihost MPIO.
378    >
379    >    Here is an example of a correct fstab entry for /epm1:
380    >
381    >   ie grep epm1 /etc/fstab
382    > 
383    >      ROOOOT 11>grep epm1 /etc/fstab
384    >      gershwin:/epm1 /rmt/gershwin/epm1 nfs bg,intr,noac 0 0
385    >
386    >   if the noac option is not present, add it 
387    >   and then remount this directory
388    >   on each of the machines that will be used to share MPIO files
389    >
390    >ie
391    >
392    >ROOOOT >umount /rmt/gershwin/epm1
393    >ROOOOT >mount  /rmt/gershwin/epm1
394    >
395    >3. Confirm that the directory is mounted noac:
396    >
397    >ROOOOT >grep gershwin /etc/mnttab 
398    >gershwin:/epm1 /rmt/gershwin/epm1 nfs
399    >noac,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0 0 0 899911504
404 ROMIO Installation Instructions
405 -------------------------------
407 Since ROMIO is included in MPICH, LAM, HP MPI, SGI MPI, and NEC MPI,
408 you don't need to install it separately if you are using any of these
409 MPI implementations.  If you are using some other MPI, you can
410 configure and build ROMIO as follows:
412 Untar the tar file as
414     gunzip -c romio.tar.gz | tar xvf -
418     zcat romio.tar.Z | tar xvf -
420 THEN
422     cd romio
423     ./configure
424     make
426 Some example programs and a Makefile are provided in the romio/test directory.
427 Run the examples the way you would run any MPI program. Each program takes 
428 the filename as a command-line argument "-fname filename".  
430 The configure script by default configures ROMIO for the file systems
431 most likely to be used on the given machine. If you wish, you can
432 explicitly specify the file systems by using the "-file_system" option
433 to configure. Multiple file systems can be specified by using "+" as a
434 separator. For example,
436     ./configure -file_system=xfs+nfs
438 For the entire list of options to configure do
440     ./configure -h | more
442 After building a specific version as above, you can install it in a
443 particular directory with 
445     make install PREFIX=/usr/local/romio    (or whatever directory you like)
447 or just
449     make install           (if you used -prefix at configure time)
451 If you intend to leave ROMIO where you built it, you should NOT install it 
452 (install is used only to move the necessary parts of a built ROMIO to 
453 another location). The installed copy will have the include files,
454 libraries, man pages, and a few other odds and ends, but not the whole
455 source tree.  It will have a test directory for testing the
456 installation and a location-independent Makefile built during
457 installation, which users can copy and modify to compile and link
458 against the installed copy. 
460 To rebuild ROMIO with a different set of configure options, do
462     make distclean
464 to clean everything including the Makefiles created by configure.
465 Then run configure again with the new options, followed by make.
469 Testing ROMIO
470 -------------
472 To test if the installation works, do
474      make testing 
476 in the romio/test directory. This calls a script that runs the test
477 programs and compares the results with what they should be. By
478 default, "make testing" causes the test programs to create files in
479 the current directory and use whatever file system that corresponds
480 to. To test with other file systems, you need to specify a filename in
481 a directory corresponding to that file system as follows:
483      make testing TESTARGS="-fname=/foo/piofs/test"
487 Compiling and Running MPI-IO Programs
488 -------------------------------------
490 If ROMIO is not already included in the MPI implementation, you need
491 to include the file mpio.h for C or mpiof.h for Fortran in your MPI-IO
492 program.  
494 Note that on HP machines running HPUX and on NEC SX-4, you need to
495 compile Fortran programs with mpif90, because the f77 compilers on
496 these machines don't support 8-byte integers. 
498 With MPICH, HP MPI, or NEC MPI, you can compile MPI-IO programs as 
499    mpicc foo.c
500 or 
501    mpif77 foo.f
503    mpif90 foo.f
505 As mentioned above, mpif90 is preferred over mpif77 on HPUX and NEC
506 because the f77 compilers on those machines do not support 8-byte integers.
508 With SGI MPI, you can compile MPI-IO programs as 
509    cc foo.c -lmpi
511    f77 foo.f -lmpi
513    f90 foo.f -lmpi
515 With LAM, you can compile MPI-IO programs as 
516    hcc foo.c -lmpi
518    hf77 foo.f -lmpi
520 If you have built ROMIO with some other MPI implementation, you can
521 compile MPI-IO programs by explicitly giving the path to the include
522 file mpio.h or mpiof.h and explicitly specifying the path to the
523 library libmpio.a, which is located in $(ROMIO_HOME)/lib/$(ARCH)/libmpio.a .
526 Run the program as you would run any MPI program on the machine. If
527 you use mpirun, make sure you use the correct mpirun for the MPI
528 implementation you are using. For example, if you are using MPICH on
529 an SGI machine, make sure that you use MPICH's mpirun and not SGI's
530 mpirun.
532 The Makefile in the romio/test directory illustrates how to compile
533 and link MPI-IO programs. 
537 Limitations of this version of ROMIO
538 ------------------------------------
540 * When used with any MPI implementation other than MPICH 1.2.1 (or later),
541 the "status" argument is not filled in any MPI-IO function. Consequently,
542 MPI_Get_count and MPI_Get_elements will not work when passed the status
543 object from an MPI-IO operation.
545 * All nonblocking I/O functions use a ROMIO-defined "MPIO_Request"
546 object instead of the usual "MPI_Request" object. Accordingly, two
547 functions, MPIO_Test and MPIO_Wait, are provided to wait and test on
548 these MPIO_Request objects. They have the same semantics as MPI_Test
549 and MPI_Wait.
551 int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status);
552 int MPIO_Wait(MPIO_Request *request, MPI_Status *status);
554 The usual functions MPI_Test, MPI_Wait, MPI_Testany, etc., will not
555 work for nonblocking I/O. 
557 * This version works only on a homogeneous cluster of machines,
558 and only the "native" file data representation is supported.
560 * When used with any MPI implementation other than MPICH 1.2.1 (or later),
561 all MPI-IO functions return only two possible error codes---MPI_SUCCESS
562 on success and MPI_ERR_UNKNOWN on failure.
564 * Shared file pointers are not supported on PVFS and IBM PIOFS file
565 systems because they don't support fcntl file locks, and ROMIO uses
566 that feature to implement shared file pointers.
568 * On HP machines running HPUX and on NEC SX-4, you need to compile
569 Fortran programs with mpif90 instead of mpif77, because the f77
570 compilers on these machines don't support 8-byte integers.
572 * The file-open mode MPI_MODE_EXCL does not work on Intel PFS file system,
573 due to a bug in PFS.
577 Usage Tips
578 ----------
580 * When using ROMIO with SGI MPI, you may sometimes get an error
581 message from SGI MPI: ``MPI has run out of internal datatype
582 entries. Please set the environment variable MPI_TYPE_MAX for
583 additional space.'' If you get this error message, add this line to
584 your .cshrc file:
585     setenv MPI_TYPE_MAX 65536 
586 Use a larger number if you still get the error message.
588 * If a Fortran program uses a file handle created using ROMIO's C
589 interface, or vice-versa, you must use the functions MPI_File_c2f 
590 or MPI_File_f2c (see MPI-2 Section 4.12.4). Such a situation occurs,
591 for example, if a Fortran program uses an I/O library written in C
592 with MPI-IO calls. Similar functions MPIO_Request_f2c and
593 MPIO_Request_c2f are also provided.
595 * For Fortran programs on the Intel Paragon, you may need
596 to provide the complete path to mpif.h in the include statement, e.g.,
597         include '/usr/local/mpich/include/mpif.h'
598 instead of 
599         include 'mpif.h'
600 This is because the -I option to the Paragon Fortran compiler if77
601 doesn't work correctly. It always looks in the default directories first 
602 and, therefore, picks up Intel's mpif.h, which is actually the
603 mpif.h of an older version of MPICH. 
607 ROMIO Users Mailing List
608 ------------------------
610 Please register your copy of ROMIO with us by sending email
611 to majordomo@mcs.anl.gov with the message
613 subscribe romio-users
615 This will enable us to notify you of new releases of ROMIO as well as
616 bug fixes.
620 Reporting Bugs
621 --------------
623 If you have trouble, first check the users guide (in
624 romio/doc/users-guide.ps.gz). Then check the on-line list of known
625 bugs and patches at http://www.mcs.anl.gov/romio .
626 Finally, if you still have problems, send a detailed message containing:
628    The type of system (often, uname -a)
629    The output of configure
630    The output of make
631    Any programs or tests
633 to romio-maint@mcs.anl.gov .
637 ROMIO Internals
638 ---------------
640 A key component of ROMIO that enables such a portable MPI-IO
641 implementation is an internal abstract I/O device layer called
642 ADIO. Most users of ROMIO will not need to deal with the ADIO layer at
643 all. However, ADIO is useful to those who want to port ROMIO to some
644 other file system. The ROMIO source code and the ADIO paper
645 (see doc/README) will help you get started.
647 MPI-IO implementation issues are discussed in our IOPADS '99 paper,
648 "On Implementing MPI-IO Portably and with High Performance."
649 All ROMIO-related papers are available online from
650 http://www.mcs.anl.gov/romio.
653 Learning MPI-IO
654 ---------------
656 The book "Using MPI-2: Advanced Features of the Message-Passing
657 Interface," published by MIT Press, provides a tutorial introduction to
658 all aspects of MPI-2, including parallel I/O. It has lots of example
659 programs. See http://www.mcs.anl.gov/mpi/usingmpi2 for further
660 information about the book.