Hi,
I attached a MPE patch which attaches the request ID to most calls for pvfs2.
The patch has to be applied in the directory mpich/src/mpe2
The example output of the hacked create and io.sm returns the following when
running with a mpi-io-test of 20000 bytes:
Create request ID received:
host:thunderclaw,comm:1140850689,rank:0,id:0,op:open
I/O request ID received: host:thunderclaw,comm:0,rank:0,id:2,op:write
I/O request ID received: host:thunderclaw,comm:0,rank:0,id:6,op:read
Note that the advantage of this method is that the operation type in this case
read and write can be set in the MPE wrapper thus the type of the request
like read, iread, etc are possible to sent to the pvfs2-server which is neat
I think.
Missing pieces of the request ID and PVFS_hint are only the way how to give
the request ID to the lower layers. The mapping is not implemented, yet.
Also the inclusion of a new configure option for MPE is not done, but I will
do so later.
Thanks,
Julian
diff -r 9e1df1d6fa98 src/wrappers/src/log_mpi_io.c
--- a/src/wrappers/src/log_mpi_io.c Mon Aug 21 12:37:31 2006 +0200
+++ b/src/wrappers/src/log_mpi_io.c Mon Aug 21 14:39:17 2006 +0200
@@ -8,7 +8,6 @@
Also set MPE_MAX_KNOWN_STATES to 180
*/
-
#define MPE_FILE_OPEN_ID 128
#define MPE_FILE_CLOSE_ID 129
#define MPE_FILE_DELETE_ID 130
@@ -66,6 +65,94 @@
#define MPIO_Request MPI_Request
#endif
+#define PVFS2_REQUEST_ID
+
+#ifdef PVFS2_REQUEST_ID
+#include <unistd.h>
+#include <stdio.h>
+#define PVFS2_MAX_HINT 100
+
+static int pvfs2_increment_id = 0;
+static char hostname[PVFS2_MAX_HINT] = "\0";
+
+static int pvfs2_set_request_ID (MPI_Comm comm, MPI_Info * info, const char * io_type, int * added_info){
+ char value[PVFS2_MAX_HINT];
+ int rank;
+
+ if( hostname[0] == 0 )
+ {
+ int ret;
+ ret = gethostname(hostname, PVFS2_MAX_HINT);
+ if(ret < 0)
+ {
+ fprintf(stderr, "gethostname could not determine hostname ! "
+ "Request ID can not transfer hostname to server \n");
+ hostname[0] = 0;
+ }
+ }
+
+ if( comm != 0 )
+ {
+ MPI_Comm_rank(comm, &rank);
+ snprintf(value, PVFS2_MAX_HINT, "host:%s,comm:%d,rank:%d,id:%d,op:%s",
+ hostname, comm, rank, pvfs2_increment_id++,io_type);
+ }
+ else
+ {
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ snprintf(value, PVFS2_MAX_HINT, "host:%s,comm:%d,rank:%d,id:%d,op:%s",
+ hostname,comm, rank,pvfs2_increment_id++,io_type);
+ }
+
+ if (* info == MPI_INFO_NULL)
+ {
+ /*
+ * Create new info object ! This object has to be freed later with wipe_request_id
+ */
+ *added_info = 1;
+ MPI_Info_create(info);
+ }
+ else
+ {
+ *added_info = 0;
+ }
+ MPI_Info_set(*info, "REQUEST_ID", value);
+
+ return 0;
+}
+
+
+static int pvfs2_set_request_ID_single_shot(MPI_File fh, MPI_Comm comm, const char * io_type){
+ int added_info;
+ MPI_Info info = MPI_INFO_NULL;
+ pvfs2_set_request_ID(comm, & info, io_type, & added_info);
+ MPI_File_set_info(fh, info);
+ MPI_Info_free(& info);
+ return 0;
+}
+
+
+static int pvfs2_wipe_request_ID (MPI_Info * info, int added_info){
+ if( added_info)
+ {
+ MPI_Info_free(info);
+ }
+ return 0;
+}
+
+#define pvfs2_set_request_ID_wrapper(comm, info, io_type, added_info) \
+ pvfs2_set_request_ID(comm, info, io_type, added_info)
+#define pvfs2_wipe_request_ID_wrapper(info, added_info) \
+ pvfs2_wipe_request_ID(info, added_info)
+#define pvfs2_set_request_ID_single_shot_wrapper(fh, comm, io_type) \
+ pvfs2_set_request_ID_single_shot(fh, comm, io_type)
+
+#else
+ #define pvfs2_set_request_ID_wrapper(comm, info, io_type, added_info)
+ #define pvfs2_wipe_request_ID_wrapper(info, added_info)
+ #define pvfs2_set_request_ID_single_shot_wrapper(fh, comm, io_type)
+#endif
+
void MPE_Init_mpi_io( void )
{
@@ -336,6 +423,8 @@ int MPI_File_open( MPI_Comm comm,char *
int MPI_File_open( MPI_Comm comm,char * filename,int amode,MPI_Info info,MPI_File * fh )
{
int returnVal;
+ int added_info;
+ pvfs2_set_request_ID_wrapper (comm, & info, "open", & added_info);
/*
MPI_File_open - prototyping replacement for MPI_File_open
@@ -349,6 +438,8 @@ int MPI_File_open( MPI_Comm comm,char *
MPE_LOG_OFF
#endif
returnVal = PMPI_File_open( comm, filename, amode, info, fh );
+ pvfs2_wipe_request_ID_wrapper(& info, added_info);
+
#if defined( MAKE_SAFE_PMPI_CALL )
MPE_LOG_ON
#endif
@@ -362,7 +453,10 @@ int MPI_File_close( MPI_File * fh )
int MPI_File_close( MPI_File * fh )
{
int returnVal;
-
+ /* Not really necessary right now, but maybe in the future, pvfs2 close is
+ empty right now */
+ pvfs2_set_request_ID_single_shot_wrapper (*fh, 0, "close");
+
/*
MPI_File_close - prototyping replacement for MPI_File_close
Log the beginning and ending of the time spent in MPI_File_close calls.
@@ -375,6 +469,7 @@ int MPI_File_close( MPI_File * fh )
MPE_LOG_OFF
#endif
returnVal = PMPI_File_close( fh );
+
#if defined( MAKE_SAFE_PMPI_CALL )
MPE_LOG_ON
#endif
@@ -388,7 +483,9 @@ int MPI_File_delete( char * filename,MPI
int MPI_File_delete( char * filename,MPI_Info info )
{
int returnVal;
-
+ int added_info;
+ pvfs2_set_request_ID_wrapper (0, & info, "delete", & added_info);
+
/*
MPI_File_delete - prototyping replacement for MPI_File_delete
Log the beginning and ending of the time spent in MPI_File_delete calls.
@@ -401,6 +498,7 @@ int MPI_File_delete( char * filename,MPI
MPE_LOG_OFF
#endif
returnVal = PMPI_File_delete( filename, info );
+ pvfs2_wipe_request_ID_wrapper(& info, added_info);
#if defined( MAKE_SAFE_PMPI_CALL )
MPE_LOG_ON
#endif
@@ -414,7 +512,8 @@ int MPI_File_set_size( MPI_File fh,MPI_
int MPI_File_set_size( MPI_File fh,MPI_Offset size )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "set_size");
+
/*
MPI_File_set_size - prototyping replacement for MPI_File_set_size
Log the beginning and ending of the time spent in MPI_File_set_size calls.
@@ -440,7 +539,7 @@ int MPI_File_preallocate( MPI_File fh,M
int MPI_File_preallocate( MPI_File fh,MPI_Offset size )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "preallocate");
/*
MPI_File_preallocate - prototyping replacement for MPI_File_preallocate
Log the beginning and ending of the time spent in MPI_File_preallocate calls.
@@ -466,7 +565,7 @@ int MPI_File_get_size( MPI_File fh,MPI_
int MPI_File_get_size( MPI_File fh,MPI_Offset * size )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "get_size");
/*
MPI_File_get_size - prototyping replacement for MPI_File_get_size
Log the beginning and ending of the time spent in MPI_File_get_size calls.
@@ -648,7 +747,8 @@ int MPI_File_read_at( MPI_File fh,MPI_O
int MPI_File_read_at( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_at");
+
/*
MPI_File_read_at - prototyping replacement for MPI_File_read_at
Log the beginning and ending of the time spent in MPI_File_read_at calls.
@@ -674,7 +774,8 @@ int MPI_File_read_at_all( MPI_File fh,M
int MPI_File_read_at_all( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_at_all");
+
/*
MPI_File_read_at_all - prototyping replacement for MPI_File_read_at_all
Log the beginning and ending of the time spent in MPI_File_read_at_all calls.
@@ -700,7 +801,8 @@ int MPI_File_write_at( MPI_File fh,MPI_
int MPI_File_write_at( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_at");
+
/*
MPI_File_write_at - prototyping replacement for MPI_File_write_at
Log the beginning and ending of the time spent in MPI_File_write_at calls.
@@ -726,7 +828,7 @@ int MPI_File_write_at_all( MPI_File fh,
int MPI_File_write_at_all( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_at_all");
/*
MPI_File_write_at_all - prototyping replacement for MPI_File_write_at_all
Log the beginning and ending of the time spent in MPI_File_write_at_all calls.
@@ -752,7 +854,8 @@ int MPI_File_iread_at( MPI_File fh,MPI_
int MPI_File_iread_at( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype,MPIO_Request * request )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "iread_at");
+
/*
MPI_File_iread_at - prototyping replacement for MPI_File_iread_at
Log the beginning and ending of the time spent in MPI_File_iread_at calls.
@@ -778,7 +881,7 @@ int MPI_File_iwrite_at( MPI_File fh,MPI
int MPI_File_iwrite_at( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype,MPIO_Request * request )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "iwrite_at");
/*
MPI_File_iwrite_at - prototyping replacement for MPI_File_iwrite_at
Log the beginning and ending of the time spent in MPI_File_iwrite_at calls.
@@ -804,7 +907,7 @@ int MPI_File_read( MPI_File fh,void * b
int MPI_File_read( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read");
/*
MPI_File_read - prototyping replacement for MPI_File_read
Log the beginning and ending of the time spent in MPI_File_read calls.
@@ -831,6 +934,7 @@ int MPI_File_read_all( MPI_File fh,void
{
int returnVal;
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_all");
/*
MPI_File_read_all - prototyping replacement for MPI_File_read_all
Log the beginning and ending of the time spent in MPI_File_read_all calls.
@@ -856,7 +960,8 @@ int MPI_File_write( MPI_File fh,void *
int MPI_File_write( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write");
+
/*
MPI_File_write - prototyping replacement for MPI_File_write
Log the beginning and ending of the time spent in MPI_File_write calls.
@@ -882,7 +987,8 @@ int MPI_File_write_all( MPI_File fh,voi
int MPI_File_write_all( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_all");
+
/*
MPI_File_write_all - prototyping replacement for MPI_File_write_all
Log the beginning and ending of the time spent in MPI_File_write_all calls.
@@ -908,7 +1014,7 @@ int MPI_File_iread( MPI_File fh,void *
int MPI_File_iread( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPIO_Request * request )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "iread");
/*
MPI_File_iread - prototyping replacement for MPI_File_iread
Log the beginning and ending of the time spent in MPI_File_iread calls.
@@ -934,7 +1040,7 @@ int MPI_File_iwrite( MPI_File fh,void *
int MPI_File_iwrite( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPIO_Request * request )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "iwrite");
/*
MPI_File_iwrite - prototyping replacement for MPI_File_iwrite
Log the beginning and ending of the time spent in MPI_File_iwrite calls.
@@ -960,7 +1066,11 @@ int MPI_File_seek( MPI_File fh,MPI_Offs
int MPI_File_seek( MPI_File fh,MPI_Offset offset,int whence )
{
int returnVal;
-
+ /*
+ * Not needed for pvfs2 right now, but added
+ */
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "seek");
+
/*
MPI_File_seek - prototyping replacement for MPI_File_seek
Log the beginning and ending of the time spent in MPI_File_seek calls.
@@ -1038,7 +1148,7 @@ int MPI_File_read_shared( MPI_File fh,v
int MPI_File_read_shared( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_shared");
/*
MPI_File_read_shared - prototyping replacement for MPI_File_read_shared
Log the beginning and ending of the time spent in MPI_File_read_shared calls.
@@ -1064,7 +1174,8 @@ int MPI_File_write_shared( MPI_File fh,
int MPI_File_write_shared( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_shared");
+
/*
MPI_File_write_shared - prototyping replacement for MPI_File_write_shared
Log the beginning and ending of the time spent in MPI_File_write_shared calls.
@@ -1090,7 +1201,8 @@ int MPI_File_iread_shared( MPI_File fh,
int MPI_File_iread_shared( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPIO_Request * request )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "iread_shared");
+
/*
MPI_File_iread_shared - prototyping replacement for MPI_File_iread_shared
Log the beginning and ending of the time spent in MPI_File_iread_shared calls.
@@ -1116,7 +1228,8 @@ int MPI_File_iwrite_shared( MPI_File fh
int MPI_File_iwrite_shared( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPIO_Request * request )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "iwrite_shared");
+
/*
MPI_File_iwrite_shared - prototyping replacement for MPI_File_iwrite_shared
Log the beginning and ending of the time spent in MPI_File_iwrite_shared calls.
@@ -1142,7 +1255,8 @@ int MPI_File_read_ordered( MPI_File fh,
int MPI_File_read_ordered( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_ordered");
+
/*
MPI_File_read_ordered - prototyping replacement for MPI_File_read_ordered
Log the beginning and ending of the time spent in MPI_File_read_ordered calls.
@@ -1168,7 +1282,7 @@ int MPI_File_write_ordered( MPI_File fh
int MPI_File_write_ordered( MPI_File fh,void * buf,int count,MPI_Datatype datatype,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_ordered");
/*
MPI_File_write_ordered - prototyping replacement for MPI_File_write_ordered
Log the beginning and ending of the time spent in MPI_File_write_ordered calls.
@@ -1194,7 +1308,11 @@ int MPI_File_seek_shared( MPI_File fh,M
int MPI_File_seek_shared( MPI_File fh,MPI_Offset offset,int whence )
{
int returnVal;
-
+ /*
+ * Not needed right now in pvfs2
+ */
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "seek_shared");
+
/*
MPI_File_seek_shared - prototyping replacement for MPI_File_seek_shared
Log the beginning and ending of the time spent in MPI_File_seek_shared calls.
@@ -1220,7 +1338,11 @@ int MPI_File_get_position_shared( MPI_Fi
int MPI_File_get_position_shared( MPI_File fh,MPI_Offset * offset )
{
int returnVal;
-
+ /*
+ * Not needed right now in pvfs2
+ */
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "get_position_shared");
+
/*
MPI_File_get_position_shared - prototyping replacement for MPI_File_get_position_shared
Log the beginning and ending of the time spent in MPI_File_get_position_shared calls.
@@ -1246,7 +1368,8 @@ int MPI_File_read_at_all_begin( MPI_File
int MPI_File_read_at_all_begin( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_at_all_begin");
+
/*
MPI_File_read_at_all_begin - prototyping replacement for MPI_File_read_at_all_begin
Log the beginning and ending of the time spent in MPI_File_read_at_all_begin calls.
@@ -1272,7 +1395,8 @@ int MPI_File_read_at_all_end( MPI_File
int MPI_File_read_at_all_end( MPI_File fh,void * buf,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_at_all_end");
+
/*
MPI_File_read_at_all_end - prototyping replacement for MPI_File_read_at_all_end
Log the beginning and ending of the time spent in MPI_File_read_at_all_end calls.
@@ -1298,7 +1422,8 @@ int MPI_File_write_at_all_begin( MPI_Fil
int MPI_File_write_at_all_begin( MPI_File fh,MPI_Offset offset,void * buf,int count,MPI_Datatype datatype )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_at_all_begin");
+
/*
MPI_File_write_at_all_begin - prototyping replacement for MPI_File_write_at_all_begin
Log the beginning and ending of the time spent in MPI_File_write_at_all_begin calls.
@@ -1324,7 +1449,8 @@ int MPI_File_write_at_all_end( MPI_File
int MPI_File_write_at_all_end( MPI_File fh,void * buf,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_at_all_end");
+
/*
MPI_File_write_at_all_end - prototyping replacement for MPI_File_write_at_all_end
Log the beginning and ending of the time spent in MPI_File_write_at_all_end calls.
@@ -1350,7 +1476,8 @@ int MPI_File_read_all_begin( MPI_File f
int MPI_File_read_all_begin( MPI_File fh,void * buf,int count,MPI_Datatype datatype )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_all_begin");
+
/*
MPI_File_read_all_begin - prototyping replacement for MPI_File_read_all_begin
Log the beginning and ending of the time spent in MPI_File_read_all_begin calls.
@@ -1376,7 +1503,8 @@ int MPI_File_read_all_end( MPI_File fh,
int MPI_File_read_all_end( MPI_File fh,void * buf,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_all_end");
+
/*
MPI_File_read_all_end - prototyping replacement for MPI_File_read_all_end
Log the beginning and ending of the time spent in MPI_File_read_all_end calls.
@@ -1402,6 +1530,7 @@ int MPI_File_write_all_begin( MPI_File
int MPI_File_write_all_begin( MPI_File fh,void * buf,int count,MPI_Datatype datatype )
{
int returnVal;
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_all_begin");
/*
MPI_File_write_all_begin - prototyping replacement for MPI_File_write_all_begin
@@ -1428,7 +1557,8 @@ int MPI_File_write_all_end( MPI_File fh
int MPI_File_write_all_end( MPI_File fh,void * buf,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_all_end");
+
/*
MPI_File_write_all_end - prototyping replacement for MPI_File_write_all_end
Log the beginning and ending of the time spent in MPI_File_write_all_end calls.
@@ -1454,7 +1584,8 @@ int MPI_File_read_ordered_begin( MPI_Fil
int MPI_File_read_ordered_begin( MPI_File fh,void * buf,int count,MPI_Datatype datatype )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_ordered_begin");
+
/*
MPI_File_read_ordered_begin - prototyping replacement for MPI_File_read_ordered_begin
Log the beginning and ending of the time spent in MPI_File_read_ordered_begin calls.
@@ -1480,7 +1611,8 @@ int MPI_File_read_ordered_end( MPI_File
int MPI_File_read_ordered_end( MPI_File fh,void * buf,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "read_ordered_end");
+
/*
MPI_File_read_ordered_end - prototyping replacement for MPI_File_read_ordered_end
Log the beginning and ending of the time spent in MPI_File_read_ordered_end calls.
@@ -1506,7 +1638,7 @@ int MPI_File_write_ordered_begin( MPI_Fi
int MPI_File_write_ordered_begin( MPI_File fh,void * buf,int count,MPI_Datatype datatype )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_ordered_begin");
/*
MPI_File_write_ordered_begin - prototyping replacement for MPI_File_write_ordered_begin
Log the beginning and ending of the time spent in MPI_File_write_ordered_begin calls.
@@ -1532,7 +1664,7 @@ int MPI_File_write_ordered_end( MPI_File
int MPI_File_write_ordered_end( MPI_File fh,void * buf,MPI_Status * status )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "write_ordered_end");
/*
MPI_File_write_ordered_end - prototyping replacement for MPI_File_write_ordered_end
Log the beginning and ending of the time spent in MPI_File_write_ordered_end calls.
@@ -1636,7 +1768,8 @@ int MPI_File_sync( MPI_File fh )
int MPI_File_sync( MPI_File fh )
{
int returnVal;
-
+ pvfs2_set_request_ID_single_shot_wrapper (fh, 0, "sync");
+
/*
MPI_File_sync - prototyping replacement for MPI_File_sync
Log the beginning and ending of the time spent in MPI_File_sync calls.
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers