<br><font size=2 face="sans-serif">What's the functional difference between
your new ADIOI_NOLOCK_WriteStrided and ADIOI_GEN_WriteStrided_naive? &nbsp;In
an earlier patch we enabled ADIOI_GEN_WriteStrided_naive when romio_ds_write
was disabled. &nbsp; Will using ADIOI_GEN_WriteStrided_naive in af_ufs
work well for you on pvfs?</font>
<br>
<br><font size=2 face="sans-serif">diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c
b/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c</font>
<br><font size=2 face="sans-serif">index ce0f6a5..bc65198 100755</font>
<br><font size=2 face="sans-serif">--- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c</font>
<br><font size=2 face="sans-serif">+++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c</font>
<br><font size=2 face="sans-serif">@@ -21,7 +21,7 @@ struct ADIOI_Fns_struct
ADIO_UFS_operations = {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;ADIOI_GEN_Fcntl,
/* Fcntl */</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;ADIOI_BGL_SetInfo,
/* SetInfo */</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;ADIOI_GEN_ReadStrided,
/* ReadStrided */</font>
<br><font size=2 face="sans-serif">- &nbsp; &nbsp;ADIOI_NOLOCK_WriteStrided,
/* WriteStrided */</font>
<br><font size=2 face="sans-serif">+ &nbsp; &nbsp;ADIOI_GEN_WriteStrided_naive,
/*ADIOI_NOLOCK_WriteStrided, * WriteStrided */</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;ADIOI_BGL_Close,
/* Close */</font>
<br><font size=2 face="sans-serif">&nbsp;#ifdef ROMIO_HAVE_WORKING_AIO</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;ADIOI_GEN_IreadContig,
/* IreadContig */</font>
<br>
<br><font size=2 face="sans-serif">The issue I'm having is romio noncontig
testcases fail on ufs:files on GPFS or NFS filesystems using ADIOI_NOLOCK_WriteStrided
but work using ADIOI_GEN_WriteStrided_naive. &nbsp; &nbsp;I'm wondering
if ADIOI_NOLOCK_WriteStrided works if pvfs is the underlying file system
but not for more generic af_ufs filesystems? &nbsp; I'm not comfortable
enabling af_ufs on bgl if it could be abused and cause failures on non-pvfs
filesystems. &nbsp; I suppose we could explicitly put in some checks to
disable it if the underlying file system wasn't pvfs... Thoughts?</font>
<br><font size=2 face="sans-serif"><br>
Bob Cernohous: &nbsp;(T/L 553) 507-253-6093<br>
<br>
BobC@us.ibm.com<br>
IBM Rochester, Building 030-2(C335), Department 61L<br>
3605 Hwy 52 North, Rochester, &nbsp;MN 55901-7829<br>
<br>
&gt; Chaos reigns within.<br>
&gt; Reflect, repent, and reboot.<br>
&gt; Order shall return.<br>
</font>
<br>
<br><tt><font size=2>dcmf-bounces@lists.anl-external.org wrote on 02/12/2008
02:22:03 PM:<br>
<br>
&gt; <br>
&gt; Signed-off-by: Rob Latham &lt;robl@mcs.anl.gov&gt;<br>
&gt; ---<br>
&gt; &nbsp;lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c &nbsp;| &nbsp;
&nbsp;2 +-<br>
&gt; &nbsp;.../mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs_open.c | &nbsp;
&nbsp;3 +<br>
&gt; &nbsp;.../mpich2/src/mpi/romio/adio/common/Makefile.in &nbsp; | &nbsp;
&nbsp;2 +-<br>
&gt; &nbsp;.../mpich2/src/mpi/romio/adio/common/ad_fstype.c &nbsp; | &nbsp;
23 ++<br>
&gt; &nbsp;.../src/mpi/romio/adio/common/ad_write_nolock.c &nbsp; &nbsp;|
&nbsp;331 <br>
&gt; ++++++++++++++++++++<br>
&gt; &nbsp;lib/mpi/mpich2/src/mpi/romio/adio/include/adioi.h &nbsp;| &nbsp;
&nbsp;4 +<br>
&gt; &nbsp;6 files changed, 363 insertions(+), 2 deletions(-)<br>
&gt; &nbsp;create mode 100644 lib/mpi/mpich2/src/mpi/romio/adio/common/ad_write_nolock.c<br>
&gt; <br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c <br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c<br>
&gt; index 3e016ab..f311afc 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs.c<br>
&gt; @@ -20,7 +20,7 @@ struct ADIOI_Fns_struct ADIO_UFS_operations = {<br>
&gt; &nbsp; &nbsp; &nbsp;ADIOI_GEN_Fcntl, /* Fcntl */<br>
&gt; &nbsp; &nbsp; &nbsp;ADIOI_GEN_SetInfo, /* SetInfo */<br>
&gt; &nbsp; &nbsp; &nbsp;ADIOI_GEN_ReadStrided, /* ReadStrided */<br>
&gt; - &nbsp; &nbsp;ADIOI_GEN_WriteStrided, /* WriteStrided */<br>
&gt; + &nbsp; &nbsp;ADIOI_NOLOCK_WriteStrided, /* WriteStrided */<br>
&gt; &nbsp; &nbsp; &nbsp;ADIOI_GEN_Close, /* Close */<br>
&gt; &nbsp; &nbsp; &nbsp;ADIOI_GEN_IreadContig, /* IreadContig */<br>
&gt; &nbsp; &nbsp; &nbsp;ADIOI_GEN_IwriteContig, /* IwriteContig */<br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs_open.c
<br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs_open.c<br>
&gt; index 4e91594..1a0dfb9 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs_open.c<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs_open.c<br>
&gt; @@ -12,6 +12,9 @@ void ADIOI_UFS_Open(ADIO_File fd, int *error_code)<br>
&gt; &nbsp; &nbsp; &nbsp;int perm, old_mask, amode;<br>
&gt; &nbsp; &nbsp; &nbsp;static char myname[] = &quot;ADIOI_UFS_OPEN&quot;;<br>
&gt; &nbsp;<br>
&gt; + &nbsp; &nbsp;/* set internal variables for tuning environment variables
*/<br>
&gt; + &nbsp; &nbsp;ad_bgl_get_env_vars(); &nbsp; &nbsp; &nbsp;<br>
&gt; +<br>
&gt; &nbsp; &nbsp; &nbsp;if (fd-&gt;perm == ADIO_PERM_NULL) {<br>
&gt; &nbsp; &nbsp; old_mask = umask(022);<br>
&gt; &nbsp; &nbsp; umask(old_mask);<br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/common/Makefile.in
<br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/common/Makefile.in<br>
&gt; index 627dc96..9e1d597 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/common/Makefile.in<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/common/Makefile.in<br>
&gt; @@ -28,7 +28,7 @@ AD_OBJECTS = ad_close.o ad_init.o ad_end.o <br>
&gt; ad_open.o flatten.o \<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;ad_write_str_naive.o ad_resize.o ad_read.o
ad_write.o ad_iread.o \<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;ad_iwrite.o ad_done.o ad_wait.o adi_close.o
ad_prealloc.o ad_fcntl.o \<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;ad_iread_fake.o ad_iwrite_fake.o ad_done_fake.o
ad_wait_fake.o \<br>
&gt; - &nbsp; &nbsp; &nbsp;ad_subarray.o ad_darray.o strfns.o<br>
&gt; + &nbsp; &nbsp; &nbsp;ad_subarray.o ad_darray.o strfns.o ad_write_nolock.o<br>
&gt; &nbsp;<br>
&gt; &nbsp;all: $(LIBNAME)<br>
&gt; &nbsp; &nbsp; @if [ &quot;@ENABLE_SHLIB@&quot; != &quot;none&quot;
] ; then \<br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_fstype.c
<br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_fstype.c<br>
&gt; index 452596f..e90332d 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_fstype.c<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_fstype.c<br>
&gt; @@ -187,6 +187,28 @@ static void ADIO_FileSysType_parentdir(char <br>
&gt; *filename, char **dirnamep)<br>
&gt; &nbsp;}<br>
&gt; &nbsp;#endif /* ROMIO_NTFS */<br>
&gt; &nbsp;<br>
&gt; +static void check_for_pvfs_exception(char *filename, int *fstype)<br>
&gt; +{<br>
&gt; + &nbsp; &nbsp;/* exception for lockless PVFS file system */<br>
&gt; + &nbsp; &nbsp;int err;<br>
&gt; + &nbsp; &nbsp;struct statfs fsbuf;<br>
&gt; + &nbsp; &nbsp;char *dir;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;do {<br>
&gt; + &nbsp; err = statfs(filename, &amp;fsbuf);<br>
&gt; + &nbsp; &nbsp;} while (err &amp;&amp; (errno == ESTALE));<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;if (err &amp;&amp; (errno == ENOENT)) {<br>
&gt; + &nbsp; ADIO_FileSysType_parentdir(filename, &amp;dir);<br>
&gt; + &nbsp; err = statfs(dir, &amp;fsbuf);<br>
&gt; + &nbsp; ADIOI_Free(dir);<br>
&gt; + &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp;/* 2030528: magic number for pvfs, but we might not
have pvfs <br>
&gt; header files<br>
&gt; + &nbsp; &nbsp; * in this environment */<br>
&gt; + &nbsp; &nbsp;if (fsbuf.f_type == 20030528) <br>
&gt; + &nbsp; &nbsp; &nbsp; *fstype = ADIO_UFS;<br>
&gt; +}<br>
&gt; +<br>
&gt; &nbsp;/*<br>
&gt; &nbsp; ADIO_FileSysType_fncall - determines the file system type for
a given file <br>
&gt; &nbsp; using a system-dependent function call<br>
&gt; @@ -212,6 +234,7 @@ static void ADIO_FileSysType_fncall(char <br>
&gt; *filename, int *fstype, int *error_code<br>
&gt; &nbsp; &nbsp;-------------------------------------------------------------*/<br>
&gt; &nbsp;#ifdef ROMIO_BGL<br>
&gt; &nbsp; &nbsp; &nbsp;*fstype = ADIO_BGL;<br>
&gt; + &nbsp; &nbsp;check_for_pvfs_exception(filename, fstype);<br>
&gt; &nbsp; &nbsp; &nbsp;*error_code = MPI_SUCCESS;<br>
&gt; &nbsp; &nbsp; &nbsp;return;<br>
&gt; &nbsp;#endif &nbsp;/* ROMIO_BGL */<br>
&gt; diff --git <br>
&gt; a/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_write_nolock.c <br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_write_nolock.c<br>
&gt; new file mode 100644<br>
&gt; index 0000000..79b11a7<br>
&gt; --- /dev/null<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/common/ad_write_nolock.c<br>
&gt; @@ -0,0 +1,331 @@<br>
&gt; +/* -*- Mode: C; c-basic-offset:4 ; -*- */<br>
&gt; +/* <br>
&gt; + *<br>
&gt; + * &nbsp; Copyright (C) 1997 University of Chicago. <br>
&gt; + * &nbsp; See COPYRIGHT notice in top-level directory.<br>
&gt; + */<br>
&gt; +<br>
&gt; +#include &quot;adio.h&quot;<br>
&gt; +#include &quot;adio_extern.h&quot;<br>
&gt; +<br>
&gt; +#ifdef HAVE_UNISTD_H<br>
&gt; +#include &lt;unistd.h&gt;<br>
&gt; +#endif<br>
&gt; +<br>
&gt; +void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, void *buf, int count,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MPI_Datatype datatype,
int file_ptr_type,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ADIO_Offset offset,
ADIO_Status *status, int<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*error_code)<br>
&gt; +{<br>
&gt; +/* borrowed from old-school PVFS (v1) code. A driver for file systems
that<br>
&gt; + * cannot or do not support client-side buffering<br>
&gt; + * Does not do data sieving optimization<br>
&gt; + * Does contain write-combining optimization for noncontig in <br>
&gt; memory, contig in<br>
&gt; + * file <br>
&gt; + */<br>
&gt; +<br>
&gt; +/* offset is in units of etype relative to the filetype. */<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;ADIOI_Flatlist_node *flat_buf, *flat_file;<br>
&gt; + &nbsp; &nbsp;int i, j, k, err=-1, bwr_size, fwr_size=0, st_index=0;<br>
&gt; + &nbsp; &nbsp;int bufsize, num, size, sum, n_etypes_in_filetype,
size_in_filetype;<br>
&gt; + &nbsp; &nbsp;int n_filetypes, etype_in_filetype;<br>
&gt; + &nbsp; &nbsp;ADIO_Offset abs_off_in_filetype=0;<br>
&gt; + &nbsp; &nbsp;int filetype_size, etype_size, buftype_size;<br>
&gt; + &nbsp; &nbsp;MPI_Aint filetype_extent, buftype_extent, indx;<br>
&gt; + &nbsp; &nbsp;int buf_count, buftype_is_contig, filetype_is_contig;<br>
&gt; + &nbsp; &nbsp;ADIO_Offset off, disp;<br>
&gt; + &nbsp; &nbsp;int flag, new_bwr_size, new_fwr_size, err_flag=0;<br>
&gt; + &nbsp; &nbsp;static char myname[] = &quot;ADIOI_PVFS_WRITESTRIDED&quot;;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;/* --BEGIN ERROR HANDLING-- */<br>
&gt; + &nbsp; &nbsp;if (fd-&gt;atomicity) {<br>
&gt; + &nbsp; *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;myname,
__LINE__,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MPI_ERR_INTERN,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;Atomic
mode set in I/O function&quot;, 0);<br>
&gt; + &nbsp; return;<br>
&gt; + &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp;/* --END ERROR HANDLING-- */<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;ADIOI_Datatype_iscontig(datatype, &amp;buftype_is_contig);<br>
&gt; + &nbsp; &nbsp;ADIOI_Datatype_iscontig(fd-&gt;filetype, &amp;filetype_is_contig);<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;MPI_Type_size(fd-&gt;filetype, &amp;filetype_size);<br>
&gt; + &nbsp; &nbsp;if ( ! filetype_size ) {<br>
&gt; + &nbsp; *error_code = MPI_SUCCESS; <br>
&gt; + &nbsp; return;<br>
&gt; + &nbsp; &nbsp;}<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;MPI_Type_extent(fd-&gt;filetype, &amp;filetype_extent);<br>
&gt; + &nbsp; &nbsp;MPI_Type_size(datatype, &amp;buftype_size);<br>
&gt; + &nbsp; &nbsp;MPI_Type_extent(datatype, &amp;buftype_extent);<br>
&gt; + &nbsp; &nbsp;etype_size = fd-&gt;etype_size;<br>
&gt; + &nbsp; &nbsp;<br>
&gt; + &nbsp; &nbsp;bufsize = buftype_size * count;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;if (!buftype_is_contig &amp;&amp; filetype_is_contig)
{<br>
&gt; + &nbsp; char *combine_buf, *combine_buf_ptr;<br>
&gt; + &nbsp; ADIO_Offset combine_buf_remain;<br>
&gt; +/* noncontiguous in memory, contiguous in file. use writev */<br>
&gt; +<br>
&gt; + &nbsp; ADIOI_Flatten_datatype(datatype);<br>
&gt; + &nbsp; flat_buf = ADIOI_Flatlist;<br>
&gt; + &nbsp; while (flat_buf-&gt;type != datatype) flat_buf = flat_buf-&gt;next;<br>
&gt; +<br>
&gt; + &nbsp; /* allocate our &quot;combine buffer&quot; to pack data into
before writing */<br>
&gt; + &nbsp; combine_buf = (char *) ADIOI_Malloc(fd-&gt;hints-&gt;ind_wr_buffer_size);<br>
&gt; + &nbsp; combine_buf_ptr = combine_buf;<br>
&gt; + &nbsp; combine_buf_remain = fd-&gt;hints-&gt;ind_wr_buffer_size;<br>
&gt; +<br>
&gt; + &nbsp; /* seek to the right spot in the file */<br>
&gt; + &nbsp; if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {<br>
&gt; + &nbsp; &nbsp; &nbsp; off = fd-&gt;disp + etype_size * offset;<br>
&gt; + &nbsp; &nbsp; &nbsp; lseek64(fd-&gt;fd_sys, off, SEEK_SET);<br>
&gt; + &nbsp; }<br>
&gt; + &nbsp; else off = lseek64(fd-&gt;fd_sys, fd-&gt;fp_ind, SEEK_SET);<br>
&gt; +<br>
&gt; + &nbsp; /* loop through all the flattened pieces. &nbsp;combine into
buffer until<br>
&gt; + &nbsp; &nbsp;* no more will fit, then write.<br>
&gt; + &nbsp; &nbsp;*<br>
&gt; + &nbsp; &nbsp;* special case of a given piece being bigger than the
combine buffer<br>
&gt; + &nbsp; &nbsp;* is also handled.<br>
&gt; + &nbsp; &nbsp;*/<br>
&gt; + &nbsp; for (j=0; j&lt;count; j++) {<br>
&gt; + &nbsp; &nbsp; &nbsp; for (i=0; i&lt;flat_buf-&gt;count; i++) {<br>
&gt; + &nbsp; &nbsp; &nbsp;if (flat_buf-&gt;blocklens[i] &gt; combine_buf_remain
&amp;&amp; <br>
&gt; combine_buf != combine_buf_ptr) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* there is data in the buffer;
write out the buffer so far */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;err = write(fd-&gt;fd_sys,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; combine_buf,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fd-&gt;hints-&gt;ind_wr_buffer_size
- combine_buf_remain);<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (err == -1) err_flag = 1;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* reset our buffer info */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;combine_buf_ptr = combine_buf;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;combine_buf_remain = fd-&gt;hints-&gt;ind_wr_buffer_size;<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp;/* TODO: heuristic for when to not bother to
use combine buffer? */<br>
&gt; + &nbsp; &nbsp; &nbsp;if (flat_buf-&gt;blocklens[i] &gt;= combine_buf_remain)
{<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* special case: blocklen is as
big as or bigger than the<br>
&gt; combine buf;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * write directly<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;err = write(fd-&gt;fd_sys,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((char *)
buf) + j*buftype_extent + flat_buf-&gt;indices[i],<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flat_buf-&gt;blocklens[i]);<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (err == -1) err_flag = 1;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;off += flat_buf-&gt;blocklens[i];
/* keep up with the final <br>
&gt; file offset too */<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp;else {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* copy more data into combine
buffer */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;memcpy(combine_buf_ptr,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;((char *) buf) + j*buftype_extent
+ flat_buf-&gt;indices[i],<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;flat_buf-&gt;blocklens[i]);<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;combine_buf_ptr += flat_buf-&gt;blocklens[i];<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;combine_buf_remain -= flat_buf-&gt;blocklens[i];<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;off += flat_buf-&gt;blocklens[i];
/* keep up with the final <br>
&gt; file offset too */<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp; }<br>
&gt; + &nbsp; }<br>
&gt; +<br>
&gt; + &nbsp; if (combine_buf_ptr != combine_buf) {<br>
&gt; + &nbsp; &nbsp; &nbsp; /* data left in buffer to write */<br>
&gt; + &nbsp; &nbsp; &nbsp; err = write(fd-&gt;fd_sys,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;combine_buf,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fd-&gt;hints-&gt;ind_wr_buffer_size
- combine_buf_remain);<br>
&gt; + &nbsp; &nbsp; &nbsp; if (err == -1) err_flag = 1;<br>
&gt; + &nbsp; }<br>
&gt; +<br>
&gt; + &nbsp; if (file_ptr_type == ADIO_INDIVIDUAL) fd-&gt;fp_ind = off;<br>
&gt; +<br>
&gt; + &nbsp; ADIOI_Free(combine_buf);<br>
&gt; +<br>
&gt; + &nbsp; if (err_flag) {<br>
&gt; + &nbsp; &nbsp; &nbsp; *error_code = MPIO_Err_create_code(MPI_SUCCESS,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;MPIR_ERR_RECOVERABLE, myname,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;__LINE__, MPI_ERR_IO, &quot;**io&quot;,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;&quot;**io %s&quot;, strerror(errno));<br>
&gt; + &nbsp; }<br>
&gt; + &nbsp; else *error_code = MPI_SUCCESS;<br>
&gt; + &nbsp; &nbsp;} /* if (!buftype_is_contig &amp;&amp; filetype_is_contig)
&nbsp;... */<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;else { &nbsp;/* noncontiguous in file */<br>
&gt; +<br>
&gt; +/* split up into several contiguous writes */<br>
&gt; +<br>
&gt; +/* find starting location in the file */<br>
&gt; +<br>
&gt; +/* filetype already flattened in ADIO_Open */<br>
&gt; + &nbsp; flat_file = ADIOI_Flatlist;<br>
&gt; + &nbsp; while (flat_file-&gt;type != fd-&gt;filetype) flat_file =
flat_file-&gt;next;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp;disp = fd-&gt;disp;<br>
&gt; +<br>
&gt; + &nbsp; if (file_ptr_type == ADIO_INDIVIDUAL) {<br>
&gt; + &nbsp; &nbsp; &nbsp; offset = fd-&gt;fp_ind; /* in bytes */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;n_filetypes = -1;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;flag = 0;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (!flag) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;n_filetypes++;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i=0;
i&lt;flat_file-&gt;count; i++) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if
(disp + flat_file-&gt;indices[i] + <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;(ADIO_Offset) n_filetypes*filetype_extent +<br>
&gt; flat_file-&gt;blocklens[i] <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;&gt;= offset) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;st_index = i;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;fwr_size = disp + flat_file-&gt;indices[i] + <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(ADIO_Offset) n_filetypes*filetype_extent<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + flat_file-&gt;blocklens[i]
- offset;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;flag = 1;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;break;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; }<br>
&gt; + &nbsp; else {<br>
&gt; + &nbsp; &nbsp; &nbsp; n_etypes_in_filetype = filetype_size/etype_size;<br>
&gt; + &nbsp; &nbsp; &nbsp; n_filetypes = (int) (offset / n_etypes_in_filetype);<br>
&gt; + &nbsp; &nbsp; &nbsp; etype_in_filetype = (int) (offset % n_etypes_in_filetype);<br>
&gt; + &nbsp; &nbsp; &nbsp; size_in_filetype = etype_in_filetype * etype_size;<br>
&gt; + <br>
&gt; + &nbsp; &nbsp; &nbsp; sum = 0;<br>
&gt; + &nbsp; &nbsp; &nbsp; for (i=0; i&lt;flat_file-&gt;count; i++) {<br>
&gt; + &nbsp; &nbsp; &nbsp;sum += flat_file-&gt;blocklens[i];<br>
&gt; + &nbsp; &nbsp; &nbsp;if (sum &gt; size_in_filetype) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;st_index = i;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fwr_size = sum - size_in_filetype;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;abs_off_in_filetype = flat_file-&gt;indices[i]
+<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; size_in_filetype - (sum - flat_file-&gt;blocklens[i]);<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp; }<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; /* abs. offset in bytes in the file */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;offset = disp + (ADIO_Offset)
<br>
&gt; n_filetypes*filetype_extent + abs_off_in_filetype;<br>
&gt; + &nbsp; }<br>
&gt; +<br>
&gt; + &nbsp; if (buftype_is_contig &amp;&amp; !filetype_is_contig) {<br>
&gt; +<br>
&gt; +/* contiguous in memory, noncontiguous in file. should be the most<br>
&gt; + &nbsp; common case. */<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; i = 0;<br>
&gt; + &nbsp; &nbsp; &nbsp; j = st_index;<br>
&gt; + &nbsp; &nbsp; &nbsp; off = offset;<br>
&gt; + &nbsp; &nbsp; &nbsp; fwr_size = ADIOI_MIN(fwr_size, bufsize);<br>
&gt; + &nbsp; &nbsp; &nbsp; while (i &lt; bufsize) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (fwr_size)
{ <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*
TYPE_UB and TYPE_LB can result in <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; fwr_size = 0. save system call in such cases */ <br>
&gt; +#ifdef PROFILE<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MPE_Log_event(5, 0, &quot;start
write&quot;);<br>
&gt; +#endif<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;err = pwrite(fd-&gt;fd_sys, ((char
*) buf) + i, fwr_size, off);<br>
&gt; +#ifdef PROFILE<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MPE_Log_event(6, 0, &quot;end
write&quot;);<br>
&gt; +#endif<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (err == -1) err_flag = 1;<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp;i += fwr_size;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (off +
fwr_size &lt; disp + flat_file-&gt;indices[j] +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flat_file-&gt;blocklens[j]
+ (ADIO_Offset) <br>
&gt; n_filetypes*filetype_extent)<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; off += fwr_size;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* did not
reach end of contiguous block in filetype.<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; no
more I/O needed. off is incremented by fwr_size. */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (j &lt; (flat_file-&gt;count
- 1)) j++;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; j = 0;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; n_filetypes++;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;off = disp + flat_file-&gt;indices[j]
+ <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(ADIO_Offset)
<br>
&gt; n_filetypes*filetype_extent;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fwr_size = ADIOI_MIN(flat_file-&gt;blocklens[j],
bufsize-i);<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp; }<br>
&gt; + &nbsp; }<br>
&gt; + &nbsp; else {<br>
&gt; +/* noncontiguous in memory as well as in file */<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; ADIOI_Flatten_datatype(datatype);<br>
&gt; + &nbsp; &nbsp; &nbsp; flat_buf = ADIOI_Flatlist;<br>
&gt; + &nbsp; &nbsp; &nbsp; while (flat_buf-&gt;type != datatype) flat_buf
= flat_buf-&gt;next;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; k = num = buf_count = 0;<br>
&gt; + &nbsp; &nbsp; &nbsp; indx = flat_buf-&gt;indices[0];<br>
&gt; + &nbsp; &nbsp; &nbsp; j = st_index;<br>
&gt; + &nbsp; &nbsp; &nbsp; off = offset;<br>
&gt; + &nbsp; &nbsp; &nbsp; bwr_size = flat_buf-&gt;blocklens[0];<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; while (num &lt; bufsize) {<br>
&gt; + &nbsp; &nbsp; &nbsp;size = ADIOI_MIN(fwr_size, bwr_size);<br>
&gt; + &nbsp; &nbsp; &nbsp;if (size) {<br>
&gt; +#ifdef PROFILE<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MPE_Log_event(5, 0, &quot;start
write&quot;);<br>
&gt; +#endif<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;err = pwrite(fd-&gt;fd_sys, ((char
*) buf) + indx, size, off);<br>
&gt; +#ifdef PROFILE<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MPE_Log_event(6, 0, &quot;end
write&quot;);<br>
&gt; +#endif<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (err == -1) err_flag = 1;<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp;new_fwr_size = fwr_size;<br>
&gt; + &nbsp; &nbsp; &nbsp;new_bwr_size = bwr_size;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp;if (size == fwr_size) {<br>
&gt; +/* reached end of contiguous block in file */<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if
(j &lt; (flat_file-&gt;count - 1)) j++;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else
{<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;j = 0;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;n_filetypes++;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;off
= disp + flat_file-&gt;indices[j] + <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (ADIO_Offset) n_filetypes*filetype_extent;<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new_fwr_size = flat_file-&gt;blocklens[j];<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (size != bwr_size) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; indx += size;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; new_bwr_size -= size;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp;if (size == bwr_size) {<br>
&gt; +/* reached end of contiguous block in memory */<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k = (k + 1)%flat_buf-&gt;count;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;buf_count++;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;indx = buftype_extent*(buf_count/flat_buf-&gt;count)
+<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; flat_buf-&gt;indices[k]; <br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new_bwr_size = flat_buf-&gt;blocklens[k];<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (size != fwr_size) {<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; off += size;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; new_fwr_size -= size;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp; &nbsp;num += size;<br>
&gt; + &nbsp; &nbsp; &nbsp;fwr_size = new_fwr_size;<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bwr_size
= new_bwr_size;<br>
&gt; + &nbsp; &nbsp; &nbsp; }<br>
&gt; + &nbsp; }<br>
&gt; +<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp;if (file_ptr_type == ADIO_INDIVIDUAL)
fd-&gt;fp_ind = off;<br>
&gt; + &nbsp; if (err_flag) {<br>
&gt; + &nbsp; &nbsp; &nbsp; *error_code = MPIO_Err_create_code(MPI_SUCCESS,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;MPIR_ERR_RECOVERABLE, myname,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;__LINE__, MPI_ERR_IO, &quot;**io&quot;,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;&quot;**io %s&quot;, strerror(errno));<br>
&gt; + &nbsp; }<br>
&gt; + &nbsp; else *error_code = MPI_SUCCESS;<br>
&gt; + &nbsp; &nbsp;}<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;fd-&gt;fp_sys_posn = -1; &nbsp; /* set it to null.
*/<br>
&gt; +<br>
&gt; +#ifdef HAVE_STATUS_SET_BYTES<br>
&gt; + &nbsp; &nbsp;MPIR_Status_set_bytes(status, datatype, bufsize);<br>
&gt; +/* This is a temporary way of filling in status. The right way is
to <br>
&gt; + &nbsp; keep track of how much data was actually written by <br>
&gt; ADIOI_BUFFERED_WRITE. */<br>
&gt; +#endif<br>
&gt; +<br>
&gt; + &nbsp; &nbsp;if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);<br>
&gt; +}<br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/include/adioi.h <br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/include/adioi.h<br>
&gt; index c09a586..f6e58cf 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/include/adioi.h<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/include/adioi.h<br>
&gt; @@ -359,6 +359,10 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd,<br>
&gt; void *buf, int count,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; MPI_Datatype datatype, int file_ptr_type,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; ADIO_Offset offset, ADIO_Status *status, int<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; *error_code);<br>
&gt; +void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, void *buf, int count,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; MPI_Datatype datatype, int file_ptr_type,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; ADIO_Offset offset, ADIO_Status *status, int<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; *error_code);<br>
&gt; &nbsp;void ADIOI_GEN_ReadStridedColl(ADIO_File fd, void *buf, int
count,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; MPI_Datatype datatype, int file_ptr_type,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; ADIO_Offset offset, ADIO_Status *status, int<br>
&gt; -- <br>
&gt; 1.5.3.8<br>
&gt; <br>
&gt; _______________________________________________<br>
&gt; dcmf mailing list<br>
&gt; dcmf@lists.anl-external.org<br>
&gt; http://lists.anl-external.org/cgi-bin/mailman/listinfo/dcmf<br>
&gt; http://dcmf.anl-external.org/wiki<br>
</font></tt>