[Darshan-commits] [Git][darshan/darshan][mmap-dev] modifications for sorting module records
Shane Snyder
xgitlab at cels.anl.gov
Mon Jun 13 13:25:01 CDT 2016
Shane Snyder pushed to branch mmap-dev at darshan / darshan
Commits:
d599c583 by Shane Snyder at 2016-06-13T12:39:49-05:00
modifications for sorting module records
A common record comparision/sort routine is now defined in
darshan-common which can be used by any modules with fixed-length
records and whose records first field is the darshan_base_record.
The comparison was also updated to sort secondarily by darshan
record identifier to resolve a potential bug in the way we have
traditionally sorted the records.
- - - - -
6 changed files:
- darshan-runtime/darshan-common.h
- darshan-runtime/lib/darshan-common.c
- darshan-runtime/lib/darshan-hdf5.c
- darshan-runtime/lib/darshan-mpiio.c
- darshan-runtime/lib/darshan-pnetcdf.c
- darshan-runtime/lib/darshan-posix.c
Changes:
=====================================
darshan-runtime/darshan-common.h
=====================================
--- a/darshan-runtime/darshan-common.h
+++ b/darshan-runtime/darshan-common.h
@@ -191,6 +191,11 @@ void darshan_iter_record_refs(
char* darshan_clean_file_path(
const char *path);
+void darshan_record_sort(
+ void *rec_buf,
+ int rec_count,
+ int rec_size);
+
/* darshan_common_val_counter()
*
* Potentially increment an existing common value counter or allocate
=====================================
darshan-runtime/lib/darshan-common.c
=====================================
--- a/darshan-runtime/lib/darshan-common.c
+++ b/darshan-runtime/lib/darshan-common.c
@@ -168,6 +168,34 @@ char* darshan_clean_file_path(const char* path)
return(newpath);
}
+/* compare function for sorting file records by descending rank first, then
+ * by ascending record identifiers (which are just unsigned integers)
+ */
+static int darshan_base_record_compare(const void* a_p, const void* b_p)
+{
+ const struct darshan_base_record *a = a_p;
+ const struct darshan_base_record *b = b_p;
+
+ if(a->rank < b->rank)
+ return(1);
+ if(a->rank > b->rank)
+ return(-1);
+
+ /* same rank, sort by ascending record ids */
+ if(a->id > b->id)
+ return(1);
+ if(a->id < b->id)
+ return(-1);
+
+ return(0);
+}
+
+void darshan_record_sort(void *rec_buf, int rec_count, int rec_size)
+{
+ qsort(rec_buf, rec_count, rec_size, darshan_base_record_compare);
+ return;
+}
+
/* HACK: global variables for determining 4 most common values */
static int64_t* walker_val_p = NULL;
static int64_t* walker_cnt_p = NULL;
=====================================
darshan-runtime/lib/darshan-hdf5.c
=====================================
--- a/darshan-runtime/lib/darshan-hdf5.c
+++ b/darshan-runtime/lib/darshan-hdf5.c
@@ -48,8 +48,6 @@ static void hdf5_runtime_initialize(
void);
static struct hdf5_file_record_ref *hdf5_track_new_file_record(
darshan_record_id rec_id, const char *path);
-static int hdf5_record_compare(
- const void* a, const void* b);
static void hdf5_record_reduction_op(
void* infile_v, void* inoutfile_v, int *len, MPI_Datatype *datatype);
static void hdf5_cleanup_runtime(
@@ -282,20 +280,6 @@ static struct hdf5_file_record_ref *hdf5_track_new_file_record(
return(rec_ref);
}
-/* compare function for sorting file records by descending rank */
-static int hdf5_record_compare(const void* a_p, const void* b_p)
-{
- const struct darshan_hdf5_file* a = a_p;
- const struct darshan_hdf5_file* b = b_p;
-
- if(a->base_rec.rank < b->base_rec.rank)
- return 1;
- if(a->base_rec.rank > b->base_rec.rank)
- return -1;
-
- return 0;
-}
-
static void hdf5_record_reduction_op(void* infile_v, void* inoutfile_v,
int *len, MPI_Datatype *datatype)
{
@@ -397,12 +381,11 @@ static void hdf5_shutdown(
rec_ref->file_rec->base_rec.rank = -1;
}
- /* sort the array of files descending by rank so that we get all of the
- * shared files (marked by rank -1) in a contiguous portion at end
- * of the array
+ /* sort the array of records so we get all of the shared records
+ * (marked by rank -1) in a contiguous portion at end of the array
*/
- qsort(hdf5_rec_buf, hdf5_rec_count, sizeof(struct darshan_hdf5_file),
- hdf5_record_compare);
+ darshan_record_sort(hdf5_rec_buf, hdf5_rec_count,
+ sizeof(struct darshan_hdf5_file));
/* make *send_buf point to the shared files at the end of sorted array */
red_send_buf = &(hdf5_rec_buf[hdf5_rec_count-shared_rec_count]);
=====================================
darshan-runtime/lib/darshan-mpiio.c
=====================================
--- a/darshan-runtime/lib/darshan-mpiio.c
+++ b/darshan-runtime/lib/darshan-mpiio.c
@@ -73,8 +73,6 @@ static void mpiio_runtime_initialize(
void);
static struct mpiio_file_record_ref *mpiio_track_new_file_record(
darshan_record_id rec_id, const char *path);
-static int mpiio_record_compare(
- const void* a, const void* b);
static void mpiio_finalize_file_records(
void *rec_ref_p);
static void mpiio_record_reduction_op(
@@ -896,20 +894,6 @@ static struct mpiio_file_record_ref *mpiio_track_new_file_record(
return(rec_ref);
}
-/* compare function for sorting file records by descending rank */
-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;
-
- if(a->base_rec.rank < b->base_rec.rank)
- return 1;
- if(a->base_rec.rank > b->base_rec.rank)
- return -1;
-
- return 0;
-}
-
static void mpiio_finalize_file_records(void *rec_ref_p)
{
struct mpiio_file_record_ref *rec_ref =
@@ -1349,12 +1333,11 @@ static void mpiio_shutdown(
rec_ref->file_rec->base_rec.rank = -1;
}
- /* sort the array of files descending by rank so that we get all of the
- * shared files (marked by rank -1) in a contiguous portion at end
- * of the array
+ /* sort the array of records so we get all of the shared records
+ * (marked by rank -1) in a contiguous portion at end of the array
*/
- qsort(mpiio_rec_buf, mpiio_rec_count, sizeof(struct darshan_mpiio_file),
- mpiio_record_compare);
+ darshan_record_sort(mpiio_rec_buf, mpiio_rec_count,
+ sizeof(struct darshan_mpiio_file));
/* make send_buf point to the shared files at the end of sorted array */
red_send_buf = &(mpiio_rec_buf[mpiio_rec_count-shared_rec_count]);
=====================================
darshan-runtime/lib/darshan-pnetcdf.c
=====================================
--- a/darshan-runtime/lib/darshan-pnetcdf.c
+++ b/darshan-runtime/lib/darshan-pnetcdf.c
@@ -44,8 +44,6 @@ static void pnetcdf_runtime_initialize(
void);
static struct pnetcdf_file_record_ref *pnetcdf_track_new_file_record(
darshan_record_id rec_id, const char *path);
-static int pnetcdf_record_compare(
- const void* a, const void* b);
static void pnetcdf_record_reduction_op(
void* infile_v, void* inoutfile_v, int *len, MPI_Datatype *datatype);
static void pnetcdf_cleanup_runtime(
@@ -279,20 +277,6 @@ static struct pnetcdf_file_record_ref *pnetcdf_track_new_file_record(
return(rec_ref);
}
-/* compare function for sorting file records by descending rank */
-static int pnetcdf_record_compare(const void* a_p, const void* b_p)
-{
- const struct darshan_pnetcdf_file* a = a_p;
- const struct darshan_pnetcdf_file* b = b_p;
-
- if(a->base_rec.rank < b->base_rec.rank)
- return 1;
- if(a->base_rec.rank > b->base_rec.rank)
- return -1;
-
- return 0;
-}
-
static void pnetcdf_record_reduction_op(void* infile_v, void* inoutfile_v,
int *len, MPI_Datatype *datatype)
{
@@ -395,12 +379,12 @@ static void pnetcdf_shutdown(
rec_ref->file_rec->base_rec.rank = -1;
}
- /* sort the array of files descending by rank so that we get all of the
- * shared files (marked by rank -1) in a contiguous portion at end
- * of the array
+
+ /* sort the array of records so we get all of the shared records
+ * (marked by rank -1) in a contiguous portion at end of the array
*/
- qsort(pnetcdf_rec_buf, pnetcdf_rec_count, sizeof(struct darshan_pnetcdf_file),
- pnetcdf_record_compare);
+ darshan_record_sort(pnetcdf_rec_buf, pnetcdf_rec_count,
+ sizeof(struct darshan_pnetcdf_file));
/* make *send_buf point to the shared files at the end of sorted array */
red_send_buf = &(pnetcdf_rec_buf[pnetcdf_rec_count-shared_rec_count]);
=====================================
darshan-runtime/lib/darshan-posix.c
=====================================
--- a/darshan-runtime/lib/darshan-posix.c
+++ b/darshan-runtime/lib/darshan-posix.c
@@ -147,8 +147,6 @@ static void posix_aio_tracker_add(
int fd, void *aiocbp);
static struct posix_aio_tracker* posix_aio_tracker_del(
int fd, void *aiocbp);
-static int posix_record_compare(
- const void* a, const void* b);
static void posix_finalize_file_records(
void *rec_ref_p);
static void posix_record_reduction_op(
@@ -1492,20 +1490,6 @@ static struct posix_file_record_ref *posix_track_new_file_record(
return(rec_ref);
}
-/* compare function for sorting file records by descending rank */
-static int posix_record_compare(const void* a_p, const void* b_p)
-{
- const struct darshan_posix_file* a = a_p;
- const struct darshan_posix_file* b = b_p;
-
- if(a->base_rec.rank < b->base_rec.rank)
- return 1;
- if(a->base_rec.rank > b->base_rec.rank)
- return -1;
-
- return 0;
-}
-
/* finds the tracker structure for a given aio operation, removes it from
* the associated linked list for this file record, and returns a pointer.
*
@@ -2045,12 +2029,11 @@ static void posix_shutdown(
rec_ref->file_rec->base_rec.rank = -1;
}
- /* sort the array of files descending by rank so that we get all of the
- * shared files (marked by rank -1) in a contiguous portion at end
- * of the array
+ /* sort the array of records so we get all of the shared records
+ * (marked by rank -1) in a contiguous portion at end of the array
*/
- qsort(posix_rec_buf, posix_rec_count, sizeof(struct darshan_posix_file),
- posix_record_compare);
+ darshan_record_sort(posix_rec_buf, posix_rec_count,
+ sizeof(struct darshan_posix_file));
/* make send_buf point to the shared files at the end of sorted array */
red_send_buf = &(posix_rec_buf[posix_rec_count-shared_rec_count]);
View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/commit/d599c58343b1798d792153bef97e64ef28014265
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/darshan-commits/attachments/20160613/16007094/attachment-0001.html>
More information about the Darshan-commits
mailing list