[Darshan-commits] [Darshan] branch, dev-modular, updated. darshan-2.3.1-115-ga708b0c
Service Account
git at mcs.anl.gov
Tue Jul 21 16:15:03 CDT 2015
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, dev-modular has been updated
via a708b0ce36c2bc7fd25b44d1756624129bb870e0 (commit)
from 735415387319aa6e406800952327bf3aeef7e12c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit a708b0ce36c2bc7fd25b44d1756624129bb870e0
Author: Shane Snyder <ssnyder at mcs.anl.gov>
Date: Tue Jul 21 16:14:31 2015 -0500
add new counters to mpiio reduction code
-----------------------------------------------------------------------
Summary of changes:
darshan-runtime/lib/darshan-mpiio.c | 116 ++++++++++++++++++++++++++++++----
darshan-runtime/lib/darshan-posix.c | 15 +---
2 files changed, 106 insertions(+), 25 deletions(-)
Diff of changes:
diff --git a/darshan-runtime/lib/darshan-mpiio.c b/darshan-runtime/lib/darshan-mpiio.c
index a8858dc..e0f4219 100644
--- a/darshan-runtime/lib/darshan-mpiio.c
+++ b/darshan-runtime/lib/darshan-mpiio.c
@@ -121,7 +121,7 @@ static struct mpiio_file_runtime* mpiio_file_by_name(const char *name);
static struct mpiio_file_runtime* mpiio_file_by_name_setfh(const char* name, MPI_File fh);
static struct mpiio_file_runtime* mpiio_file_by_fh(MPI_File fh);
static void mpiio_file_close_fh(MPI_File fh);
-static int mpiio_file_compare(const void* a, const void* b);
+static int mpiio_record_compare(const void* a, const void* b);
static void mpiio_begin_shutdown(void);
static void mpiio_setup_reduction(darshan_record_id *shared_recs, int *shared_rec_count,
@@ -1009,7 +1009,7 @@ static void mpiio_file_close_fh(MPI_File fh)
}
/* compare function for sorting file records by descending rank */
-static int mpiio_file_compare(const void* a_p, const void* b_p)
+static int mpiio_record_compare(const void* a_p, const void* b_p)
{
const struct darshan_mpiio_file* a = a_p;
const struct darshan_mpiio_file* b = b_p;
@@ -1077,7 +1077,7 @@ static void mpiio_setup_reduction(
* of the array
*/
qsort(mpiio_runtime->file_record_array, mpiio_runtime->file_array_ndx,
- sizeof(struct darshan_mpiio_file), mpiio_file_compare);
+ sizeof(struct darshan_mpiio_file), mpiio_record_compare);
/* make *send_buf point to the shared files at the end of sorted array */
*send_buf =
@@ -1089,13 +1089,12 @@ static void mpiio_setup_reduction(
*recv_buf = malloc(*shared_rec_count * sizeof(struct darshan_mpiio_file));
if(!(*recv_buf))
return;
+
+ /* TODO: cleaner way to do this? */
+ mpiio_runtime->red_buf = *recv_buf;
}
*rec_size = sizeof(struct darshan_mpiio_file);
-
- /* TODO: cleaner way to do this? */
- if(my_rank == 0)
- mpiio_runtime->red_buf = *recv_buf;
mpiio_runtime->shared_rec_count = *shared_rec_count;
return;
@@ -1110,7 +1109,7 @@ static void mpiio_record_reduction_op(
struct darshan_mpiio_file tmp_file;
struct darshan_mpiio_file *infile = infile_v;
struct darshan_mpiio_file *inoutfile = inoutfile_v;
- int i, j;
+ int i, j, k;
assert(mpiio_runtime);
@@ -1122,19 +1121,58 @@ static void mpiio_record_reduction_op(
tmp_file.rank = -1;
/* sum */
- for(j=MPIIO_INDEP_OPENS; j<=MPIIO_HINTS; j++)
+ for(j=MPIIO_INDEP_OPENS; j<=MPIIO_VIEWS; j++)
+ {
+ tmp_file.counters[j] = infile->counters[j] + inoutfile->counters[j];
+ }
+
+ tmp_file.counters[MPIIO_MODE] = infile->counters[MPIIO_MODE];
+
+ /* sum */
+ for(j=MPIIO_BYTES_READ; j<=MPIIO_RW_SWITCHES; j++)
{
tmp_file.counters[j] = infile->counters[j] + inoutfile->counters[j];
}
- /* sum (floating point) */
- for(j=MPIIO_F_META_TIME; j<=MPIIO_F_META_TIME; j++)
+ /* skip MPIIO_MAX_*_TIME_SIZE; handled in floating point section */
+
+ for(j=MPIIO_SIZE_READ_AGG_0_100; j<=MPIIO_SIZE_WRITE_AGG_1G_PLUS; j++)
+ {
+ tmp_file.counters[j] = infile->counters[j] + inoutfile->counters[j];
+ }
+
+ /* first collapse any duplicates */
+ for(j=MPIIO_ACCESS1_ACCESS; j<=MPIIO_ACCESS4_ACCESS; j++)
+ {
+ for(k=MPIIO_ACCESS1_ACCESS; k<=MPIIO_ACCESS4_ACCESS; k++)
+ {
+ if(infile->counters[j] == inoutfile->counters[k])
+ {
+ infile->counters[j+4] += inoutfile->counters[k+4];
+ inoutfile->counters[k] = 0;
+ inoutfile->counters[k+4] = 0;
+ }
+ }
+ }
+
+ /* first set */
+ for(j=MPIIO_ACCESS1_ACCESS; j<=MPIIO_ACCESS4_ACCESS; j++)
+ {
+ DARSHAN_COMMON_VAL_COUNTER_INC(&(tmp_file.counters[MPIIO_ACCESS1_ACCESS]),
+ &(tmp_file.counters[MPIIO_ACCESS1_COUNT]), infile->counters[j],
+ infile->counters[j+4]);
+ }
+
+ /* second set */
+ for(j=MPIIO_ACCESS1_ACCESS; j<=MPIIO_ACCESS4_ACCESS; j++)
{
- tmp_file.fcounters[j] = infile->fcounters[j] + inoutfile->fcounters[j];
+ DARSHAN_COMMON_VAL_COUNTER_INC(&(tmp_file.counters[MPIIO_ACCESS1_ACCESS]),
+ &(tmp_file.counters[MPIIO_ACCESS1_COUNT]), inoutfile->counters[j],
+ inoutfile->counters[j+4]);
}
/* min non-zero (if available) value */
- for(j=MPIIO_F_OPEN_TIMESTAMP; j<=MPIIO_F_OPEN_TIMESTAMP; j++)
+ for(j=MPIIO_F_OPEN_TIMESTAMP; j<=MPIIO_F_WRITE_START_TIMESTAMP; j++)
{
if(infile->fcounters[j] > inoutfile->fcounters[j] && inoutfile->fcounters[j] > 0)
tmp_file.fcounters[j] = inoutfile->fcounters[j];
@@ -1142,6 +1180,54 @@ static void mpiio_record_reduction_op(
tmp_file.fcounters[j] = infile->fcounters[j];
}
+ /* max */
+ for(j=MPIIO_F_READ_END_TIMESTAMP; j<= MPIIO_F_CLOSE_TIMESTAMP; j++)
+ {
+ if(infile->fcounters[j] > inoutfile->fcounters[j])
+ tmp_file.fcounters[j] = infile->fcounters[j];
+ else
+ tmp_file.fcounters[j] = inoutfile->fcounters[j];
+ }
+
+ /* sum */
+ for(j=MPIIO_F_READ_TIME; j<=MPIIO_F_META_TIME; j++)
+ {
+ tmp_file.counters[j] = infile->fcounters[j] + inoutfile->fcounters[j];
+ }
+
+ /* max (special case) */
+ if(infile->fcounters[MPIIO_F_MAX_READ_TIME] >
+ inoutfile->fcounters[MPIIO_F_MAX_READ_TIME])
+ {
+ tmp_file.fcounters[MPIIO_F_MAX_READ_TIME] =
+ infile->fcounters[MPIIO_F_MAX_READ_TIME];
+ tmp_file.counters[MPIIO_MAX_READ_TIME_SIZE] =
+ infile->counters[MPIIO_MAX_READ_TIME_SIZE];
+ }
+ else
+ {
+ tmp_file.fcounters[MPIIO_F_MAX_READ_TIME] =
+ inoutfile->fcounters[MPIIO_F_MAX_READ_TIME];
+ tmp_file.counters[MPIIO_MAX_READ_TIME_SIZE] =
+ inoutfile->counters[MPIIO_MAX_READ_TIME_SIZE];
+ }
+
+ if(infile->fcounters[MPIIO_F_MAX_WRITE_TIME] >
+ inoutfile->fcounters[MPIIO_F_MAX_WRITE_TIME])
+ {
+ tmp_file.fcounters[MPIIO_F_MAX_WRITE_TIME] =
+ infile->fcounters[MPIIO_F_MAX_WRITE_TIME];
+ tmp_file.counters[MPIIO_MAX_WRITE_TIME_SIZE] =
+ infile->counters[MPIIO_MAX_WRITE_TIME_SIZE];
+ }
+ else
+ {
+ tmp_file.fcounters[MPIIO_F_MAX_WRITE_TIME] =
+ inoutfile->fcounters[MPIIO_F_MAX_WRITE_TIME];
+ tmp_file.counters[MPIIO_MAX_WRITE_TIME_SIZE] =
+ inoutfile->counters[MPIIO_MAX_WRITE_TIME_SIZE];
+ }
+
/* update pointers */
*inoutfile = tmp_file;
inoutfile++;
@@ -1157,7 +1243,7 @@ static void mpiio_get_output_data(
{
assert(mpiio_runtime);
- /* TODO: clean up reduction stuff */
+ /* clean up reduction state */
if(my_rank == 0)
{
int tmp_ndx = mpiio_runtime->file_array_ndx - mpiio_runtime->shared_rec_count;
@@ -1180,6 +1266,8 @@ static void mpiio_shutdown()
{
struct mpiio_file_runtime_ref *ref, *tmp;
+ assert(mpiio_runtime);
+
HASH_ITER(hlink, mpiio_runtime->fh_hash, ref, tmp)
{
HASH_DELETE(hlink, mpiio_runtime->fh_hash, ref);
diff --git a/darshan-runtime/lib/darshan-posix.c b/darshan-runtime/lib/darshan-posix.c
index a1b310e..ad1775e 100644
--- a/darshan-runtime/lib/darshan-posix.c
+++ b/darshan-runtime/lib/darshan-posix.c
@@ -1802,7 +1802,6 @@ static void posix_setup_reduction(
if(!(*recv_buf))
return;
- /* TODO: cleaner way to do this? */
posix_runtime->red_buf = *recv_buf;
}
@@ -1858,8 +1857,7 @@ static void posix_record_reduction_op(
/* sum */
for(j=POSIX_CONSEC_READS; j<=POSIX_MEM_NOT_ALIGNED; j++)
{
- tmp_file.counters[j] = infile->counters[j] +
- inoutfile->counters[j];
+ tmp_file.counters[j] = infile->counters[j] + inoutfile->counters[j];
}
tmp_file.counters[POSIX_MEM_ALIGNMENT] = infile->counters[POSIX_MEM_ALIGNMENT];
@@ -1868,16 +1866,14 @@ static void posix_record_reduction_op(
/* sum */
for(j=POSIX_FILE_NOT_ALIGNED; j<=POSIX_FILE_NOT_ALIGNED; j++)
{
- tmp_file.counters[j] = infile->counters[j] +
- inoutfile->counters[j];
+ tmp_file.counters[j] = infile->counters[j] + inoutfile->counters[j];
}
/* skip POSIX_MAX_*_TIME_SIZE; handled in floating point section */
for(j=POSIX_SIZE_READ_0_100; j<=POSIX_SIZE_WRITE_1G_PLUS; j++)
{
- tmp_file.counters[j] = infile->counters[j] +
- inoutfile->counters[j];
+ tmp_file.counters[j] = infile->counters[j] + inoutfile->counters[j];
}
/* first collapse any duplicates */
@@ -2054,13 +2050,13 @@ static void posix_get_output_data(
{
assert(posix_runtime);
- /* TODO: cleaner way to do this? */
/* clean up reduction state */
if(my_rank == 0)
{
int tmp_ndx = posix_runtime->file_array_ndx - posix_runtime->shared_rec_count;
memcpy(&(posix_runtime->file_record_array[tmp_ndx]), posix_runtime->red_buf,
posix_runtime->shared_rec_count * sizeof(struct darshan_posix_file));
+ free(posix_runtime->red_buf);
}
else
{
@@ -2087,9 +2083,6 @@ static void posix_shutdown()
HASH_CLEAR(hlink, posix_runtime->file_hash); /* these entries are freed all at once below */
- if(my_rank == 0 && posix_runtime->red_buf)
- free(posix_runtime->red_buf);
-
free(posix_runtime->file_runtime_array);
free(posix_runtime->file_record_array);
free(posix_runtime);
hooks/post-receive
--
More information about the Darshan-commits
mailing list