Commit cad82a11 authored by Rob Latham's avatar Rob Latham Committed by Shane Snyder
Browse files

Instrument offsets in DXT_MPIIO module

parent 73972e98
......@@ -8,7 +8,7 @@
/* current DXT log format version */
#define DXT_POSIX_VER 1
#define DXT_MPIIO_VER 1
#define DXT_MPIIO_VER 2
#define HOSTNAME_SIZE 64
......
......@@ -4675,10 +4675,10 @@ int
main ()
{
MPI_Comm comm;
char* filename;
int amode;
MPI_Info info;
MPI_Comm comm=0;
char* filename=0;
int amode=0;
MPI_Info info=0;
MPI_File fh;
MPI_File_open(comm, filename, amode, info, &fh);
;
......
......@@ -392,10 +392,10 @@ AS_IF([test "x$ENABLE_MPI" = "x1"], [
# determine if the MPI library includes MPI-IO functions or not
AC_MSG_CHECKING(for MPI-IO support in MPI)
AC_TRY_LINK([#include <mpi.h>], [
MPI_Comm comm;
char* filename;
int amode;
MPI_Info info;
MPI_Comm comm=0;
char* filename=0;
int amode=0;
MPI_Info info=0;
MPI_File fh;
MPI_File_open(comm, filename, amode, info, &fh);],
AC_MSG_RESULT(yes),
......
......@@ -82,7 +82,7 @@
* added to the common access counter, rather than just incrementing it.
*/
#define DARSHAN_COMMON_VAL_COUNTER_INC(__val_p, __cnt_p, __value, __count, __add_flag) do {\
int i; \
int i_; \
int inc_count, total_count; \
int64_t tmp_val[4] = {0}; \
int64_t tmp_cnt[4] = {0}; \
......@@ -92,21 +92,21 @@
inc_count = 1; \
else \
inc_count = __count; \
for(i=0; i<4; i++) { \
if(*(__val_p + i) == __value) { \
total_count = *(__cnt_p + i) + inc_count; \
for(i_=0; i_<4; i_++) { \
if(*(__val_p + i_) == __value) { \
total_count = *(__cnt_p + i_) + inc_count; \
break; \
} \
} \
if(i == 4) total_count = __count; \
if(i_ == 4) total_count = __count; \
/* first, copy over any counters that should be sorted above this one \
* (counters with higher counts or equal counts and larger values) \
*/ \
for(i=0;i < 4; i++) { \
if((*(__cnt_p + i) > total_count) || \
((*(__cnt_p + i) == total_count) && (*(__val_p + i) > __value))) { \
tmp_val[tmp_ndx] = *(__val_p + i); \
tmp_cnt[tmp_ndx] = *(__cnt_p + i); \
for(i_=0;i_ < 4; i_++) { \
if((*(__cnt_p + i_) > total_count) || \
((*(__cnt_p + i_) == total_count) && (*(__val_p + i_) > __value))) { \
tmp_val[tmp_ndx] = *(__val_p + i_); \
tmp_cnt[tmp_ndx] = *(__cnt_p + i_); \
tmp_ndx++; \
} \
else break; \
......@@ -118,12 +118,12 @@
tmp_ndx++; \
/* last, copy over any remaining counters to make sure we have 4 sets total */ \
while(tmp_ndx != 4) { \
if(*(__val_p + i) != __value) { \
tmp_val[tmp_ndx] = *(__val_p + i); \
tmp_cnt[tmp_ndx] = *(__cnt_p + i); \
if(*(__val_p + i_) != __value) { \
tmp_val[tmp_ndx] = *(__val_p + i_); \
tmp_cnt[tmp_ndx] = *(__cnt_p + i_); \
tmp_ndx++; \
} \
i++; \
i_++; \
} \
memcpy(__val_p, tmp_val, 4*sizeof(int64_t)); \
memcpy(__cnt_p, tmp_cnt, 4*sizeof(int64_t)); \
......
......@@ -45,10 +45,10 @@ void dxt_posix_read(darshan_record_id rec_id, int64_t offset,
* with 'length' size. 'start_time' and 'end_time' are starting and ending
* timestamps for the operation, respectively.
*/
void dxt_mpiio_write(darshan_record_id rec_id, int64_t length,
double start_time, double end_time);
void dxt_mpiio_read(darshan_record_id rec_id, int64_t length,
double start_time, double end_time);
void dxt_mpiio_write(darshan_record_id rec_id, int64_t offset,
int64_t length, double start_time, double end_time);
void dxt_mpiio_read(darshan_record_id rec_id, int64_t offset,
int64_t length, double start_time, double end_time);
void dxt_posix_filter_dynamic_traces(
struct darshan_posix_file *(*rec_id_to_psx_file)(darshan_record_id));
......
......@@ -517,8 +517,8 @@ void dxt_posix_read(darshan_record_id rec_id, int64_t offset,
DXT_UNLOCK();
}
void dxt_mpiio_write(darshan_record_id rec_id, int64_t length,
double start_time, double end_time)
void dxt_mpiio_write(darshan_record_id rec_id, int64_t offset,
int64_t length, double start_time, double end_time)
{
struct dxt_file_record_ref* rec_ref = NULL;
struct dxt_file_record *file_rec;
......@@ -566,6 +566,7 @@ void dxt_mpiio_write(darshan_record_id rec_id, int64_t length,
}
rec_ref->write_traces[file_rec->write_count].length = length;
rec_ref->write_traces[file_rec->write_count].offset = offset;
rec_ref->write_traces[file_rec->write_count].start_time = start_time;
rec_ref->write_traces[file_rec->write_count].end_time = end_time;
file_rec->write_count += 1;
......@@ -573,8 +574,8 @@ void dxt_mpiio_write(darshan_record_id rec_id, int64_t length,
DXT_UNLOCK();
}
void dxt_mpiio_read(darshan_record_id rec_id, int64_t length,
double start_time, double end_time)
void dxt_mpiio_read(darshan_record_id rec_id, int64_t offset,
int64_t length, double start_time, double end_time)
{
struct dxt_file_record_ref* rec_ref = NULL;
struct dxt_file_record *file_rec;
......@@ -622,6 +623,7 @@ void dxt_mpiio_read(darshan_record_id rec_id, int64_t length,
}
rec_ref->read_traces[file_rec->read_count].length = length;
rec_ref->read_traces[file_rec->read_count].offset = offset;
rec_ref->read_traces[file_rec->read_count].start_time = start_time;
rec_ref->read_traces[file_rec->read_count].end_time = end_time;
file_rec->read_count += 1;
......
......@@ -236,17 +236,19 @@ static int my_rank = -1;
if(newpath != __path) free(newpath); \
} while(0)
#define MPIIO_RECORD_READ(__ret, __fh, __count, __datatype, __counter, __tm1, __tm2) do { \
#define MPIIO_RECORD_READ(__ret, __fh, __count, __datatype, __offset, __counter, __tm1, __tm2) do { \
struct mpiio_file_record_ref *rec_ref; \
int size = 0; \
MPI_Offset displacement=0;\
double __elapsed = __tm2-__tm1; \
if(__ret != MPI_SUCCESS) break; \
rec_ref = darshan_lookup_record_ref(mpiio_runtime->fh_hash, &(__fh), sizeof(MPI_File)); \
if(!rec_ref) break; \
PMPI_Type_size(__datatype, &size); \
size = size * __count; \
MPI_File_get_byte_offset(__fh, __offset, &displacement);\
/* DXT to record detailed read tracing information */ \
dxt_mpiio_read(rec_ref->file_rec->base_rec.id, size, __tm1, __tm2); \
dxt_mpiio_read(rec_ref->file_rec->base_rec.id, displacement, size, __tm1, __tm2); \
DARSHAN_BUCKET_INC(&(rec_ref->file_rec->counters[MPIIO_SIZE_READ_AGG_0_100]), size); \
darshan_common_val_counter(&rec_ref->access_root, &rec_ref->access_count, size, \
&(rec_ref->file_rec->counters[MPIIO_ACCESS1_ACCESS]), \
......@@ -267,9 +269,10 @@ static int my_rank = -1;
__tm1, __tm2, rec_ref->last_read_end); \
} while(0)
#define MPIIO_RECORD_WRITE(__ret, __fh, __count, __datatype, __counter, __tm1, __tm2) do { \
#define MPIIO_RECORD_WRITE(__ret, __fh, __count, __datatype, __offset, __counter, __tm1, __tm2) do { \
struct mpiio_file_record_ref *rec_ref; \
int size = 0; \
MPI_Offset displacement; \
double __elapsed = __tm2-__tm1; \
if(__ret != MPI_SUCCESS) break; \
rec_ref = darshan_lookup_record_ref(mpiio_runtime->fh_hash, &(__fh), sizeof(MPI_File)); \
......@@ -277,7 +280,8 @@ static int my_rank = -1;
PMPI_Type_size(__datatype, &size); \
size = size * __count; \
/* DXT to record detailed write tracing information */ \
dxt_mpiio_write(rec_ref->file_rec->base_rec.id, size, __tm1, __tm2); \
MPI_File_get_byte_offset(__fh, __offset, &displacement); \
dxt_mpiio_write(rec_ref->file_rec->base_rec.id, displacement, size, __tm1, __tm2); \
DARSHAN_BUCKET_INC(&(rec_ref->file_rec->counters[MPIIO_SIZE_WRITE_AGG_0_100]), size); \
darshan_common_val_counter(&rec_ref->access_root, &rec_ref->access_count, size, \
&(rec_ref->file_rec->counters[MPIIO_ACCESS1_ACCESS]), \
......@@ -347,15 +351,17 @@ int DARSHAN_DECL(MPI_File_read)(MPI_File fh, void *buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_read);
MPI_File_get_position(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_read(fh, buf, count, datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_INDEP_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_INDEP_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -373,15 +379,17 @@ int DARSHAN_DECL(MPI_File_write)(MPI_File fh, void *buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_write);
MPI_File_get_position(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_write(fh, buf, count, datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_INDEP_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_INDEP_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -408,7 +416,7 @@ int DARSHAN_DECL(MPI_File_read_at)(MPI_File fh, MPI_Offset offset, void *buf,
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_INDEP_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_INDEP_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -435,7 +443,7 @@ int DARSHAN_DECL(MPI_File_write_at)(MPI_File fh, MPI_Offset offset, void *buf,
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_INDEP_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_INDEP_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -452,16 +460,18 @@ int DARSHAN_DECL(MPI_File_read_all)(MPI_File fh, void * buf, int count, MPI_Data
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_read_all);
MPI_File_get_position(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_read_all(fh, buf, count,
datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_COLL_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_COLL_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -477,16 +487,18 @@ int DARSHAN_DECL(MPI_File_write_all)(MPI_File fh, void * buf, int count, MPI_Dat
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_write_all);
MPI_File_get_position(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_write_all(fh, buf, count,
datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_COLL_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_COLL_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -513,7 +525,7 @@ int DARSHAN_DECL(MPI_File_read_at_all)(MPI_File fh, MPI_Offset offset, void * bu
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_COLL_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_COLL_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -541,7 +553,7 @@ int DARSHAN_DECL(MPI_File_write_at_all)(MPI_File fh, MPI_Offset offset, void * b
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_COLL_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_COLL_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -560,16 +572,18 @@ int DARSHAN_DECL(MPI_File_read_shared)(MPI_File fh, void * buf, int count, MPI_D
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_read_shared);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_read_shared(fh, buf, count,
datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_INDEP_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_INDEP_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -585,16 +599,18 @@ int DARSHAN_DECL(MPI_File_write_shared)(MPI_File fh, void * buf, int count, MPI_
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_write_shared);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_write_shared(fh, buf, count,
datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_INDEP_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_INDEP_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -613,16 +629,18 @@ int DARSHAN_DECL(MPI_File_read_ordered)(MPI_File fh, void * buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_read_ordered);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_read_ordered(fh, buf, count,
datatype, status);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_COLL_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_COLL_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -641,8 +659,10 @@ int DARSHAN_DECL(MPI_File_write_ordered)(MPI_File fh, void * buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_write_ordered);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_write_ordered(fh, buf, count,
......@@ -650,7 +670,7 @@ int DARSHAN_DECL(MPI_File_write_ordered)(MPI_File fh, void * buf, int count,
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_COLL_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_COLL_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -669,15 +689,17 @@ int DARSHAN_DECL(MPI_File_read_all_begin)(MPI_File fh, void * buf, int count, MP
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_read_all_begin);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_read_all_begin(fh, buf, count, datatype);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_SPLIT_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_SPLIT_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -693,15 +715,18 @@ int DARSHAN_DECL(MPI_File_write_all_begin)(MPI_File fh, void * buf, int count, M
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_write_all_begin);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_write_all_begin(fh, buf, count, datatype);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_SPLIT_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_SPLIT_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -728,7 +753,7 @@ int DARSHAN_DECL(MPI_File_read_at_all_begin)(MPI_File fh, MPI_Offset offset, voi
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_SPLIT_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_SPLIT_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -755,7 +780,7 @@ int DARSHAN_DECL(MPI_File_write_at_all_begin)(MPI_File fh, MPI_Offset offset, vo
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_SPLIT_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_SPLIT_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -772,16 +797,18 @@ int DARSHAN_DECL(MPI_File_read_ordered_begin)(MPI_File fh, void * buf, int count
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_read_ordered_begin);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_read_ordered_begin(fh, buf, count,
datatype);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_SPLIT_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_SPLIT_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -797,16 +824,18 @@ int DARSHAN_DECL(MPI_File_write_ordered_begin)(MPI_File fh, void * buf, int coun
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_write_ordered_begin);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_write_ordered_begin(fh, buf, count,
datatype);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_SPLIT_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_SPLIT_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -823,15 +852,17 @@ int DARSHAN_DECL(MPI_File_iread)(MPI_File fh, void * buf, int count, MPI_Datatyp
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_iread);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_iread(fh, buf, count, datatype, request);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_NB_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_NB_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -849,15 +880,17 @@ int DARSHAN_DECL(MPI_File_iwrite)(MPI_File fh, void * buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_iwrite);
MPI_File_get_position(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_iwrite(fh, buf, count, datatype, request);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_NB_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_NB_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -886,7 +919,7 @@ int DARSHAN_DECL(MPI_File_iread_at)(MPI_File fh, MPI_Offset offset, void * buf,
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_NB_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_NB_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -914,7 +947,7 @@ int DARSHAN_DECL(MPI_File_iwrite_at)(MPI_File fh, MPI_Offset offset, void * buf,
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_NB_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_NB_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -934,16 +967,18 @@ int DARSHAN_DECL(MPI_File_iread_shared)(MPI_File fh, void * buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_iread_shared);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_iread_shared(fh, buf, count,
datatype, request);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_READ(ret, fh, count, datatype, MPIIO_NB_READS, tm1, tm2);
MPIIO_RECORD_READ(ret, fh, count, datatype, offset, MPIIO_NB_READS, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -962,16 +997,18 @@ int DARSHAN_DECL(MPI_File_iwrite_shared)(MPI_File fh, void * buf, int count,
{
int ret;
double tm1, tm2;
MPI_Offset offset;
MAP_OR_FAIL(PMPI_File_iwrite_shared);
MPI_File_get_position_shared(fh, &offset);
tm1 = darshan_core_wtime();
ret = __real_PMPI_File_iwrite_shared(fh, buf, count,
datatype, request);
tm2 = darshan_core_wtime();
MPIIO_PRE_RECORD();
MPIIO_RECORD_WRITE(ret, fh, count, datatype, MPIIO_NB_WRITES, tm1, tm2);
MPIIO_RECORD_WRITE(ret, fh, count, datatype, offset, MPIIO_NB_WRITES, tm1, tm2);
MPIIO_POST_RECORD();
return(ret);
......@@ -1477,6 +1514,7 @@ void darshan_mpiio_shutdown_bench_setup(int test_case)
{
char filepath[256];
MPI_File *fh_array;
MPI_Offset *offset_array;
int64_t *size_array;
int i;
intptr_t j;
......@@ -1489,12 +1527,15 @@ void darshan_mpiio_shutdown_bench_setup(int test_case)
srand(my_rank);
fh_array = malloc(1024 * sizeof(MPI_File));
size_array = malloc(DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT * sizeof(int64_t));
offset_array = malloc(DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT *sizeof(MPI_Offset));
assert(fh_array && size_array);
for(j = 0; j < 1024; j++)
fh_array[j] = (MPI_File)j;
for(i = 0; i < DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT; i++)
for(i = 0; i < DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT; i++) {
offset_array[i] = rand();
size_array[i] = rand();
}
switch(test_case)
{
......@@ -1503,8 +1544,8 @@ void darshan_mpiio_shutdown_bench_setup(int test_case)
MPIIO_RECORD_OPEN(MPI_SUCCESS, filepath, fh_array[0], MPI_COMM_SELF,
2, MPI_INFO_NULL, 0, 1);
MPIIO_RECORD_WRITE(MPI_SUCCESS, fh_array[0], size_array[0], MPI_BYTE,
MPIIO_INDEP_WRITES, 1, 2);
MPIIO_RECORD_WRITE(MPI_SUCCESS, fh_array[0], size_array[0], offset_array[0],
MPI_BYTE, MPIIO_INDEP_WRITES, 1, 2);
break;
case 2: /* single shared file */
......@@ -1512,8 +1553,8 @@ void darshan_mpiio_shutdown_bench_setup(int test_case)
MPIIO_RECORD_OPEN(MPI_SUCCESS, filepath, fh_array[0], MPI_COMM_WORLD,
2, MPI_INFO_NULL, 0, 1);
MPIIO_RECORD_WRITE(MPI_SUCCESS, fh_array[0], size_array[0], MPI_BYTE,
MPIIO_COLL_WRITES, 1, 2);
MPIIO_RECORD_WRITE(MPI_SUCCESS, fh_array[0], size_array[0], offset_array[0],
MPI_BYTE, MPIIO_COLL_WRITES, 1, 2);
break;
case 3: /* 1024 unique files per proc */
......@@ -1525,6 +1566,7 @@ void darshan_mpiio_shutdown_bench_setup(int test_case)
2, MPI_INFO_NULL, 0, 1);
MPIIO_RECORD_WRITE(MPI_SUCCESS, fh_array[i],
size_array[i % DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT],
offset_array[i % DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT],
MPI_BYTE, MPIIO_INDEP_WRITES, 1, 2);
}
......@@ -1538,6 +1580,7 @@ void darshan_mpiio_shutdown_bench_setup(int test_case)
2, MPI_INFO_NULL, 0, 1);