summaryrefslogtreecommitdiffstats
path: root/tools/h5diff
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5diff')
-rw-r--r--tools/h5diff/h5diff_common.c8
-rw-r--r--tools/h5diff/h5diff_common.h2
-rw-r--r--tools/h5diff/h5diff_main.c15
-rw-r--r--tools/h5diff/ph5diff_main.c226
4 files changed, 132 insertions, 119 deletions
diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c
index 254fb1a..bf0b63a 100644
--- a/tools/h5diff/h5diff_common.c
+++ b/tools/h5diff/h5diff_common.c
@@ -180,14 +180,14 @@ void parse_input(int argc,
}
/*-------------------------------------------------------------------------
- * Function: print_results
+ * Function: print_info
*
* Purpose: print several information messages
*
*-------------------------------------------------------------------------
*/
-void print_results(diff_opt_t* options)
+void print_info(diff_opt_t* options)
{
if (options->m_quiet || options->err_stat)
return;
@@ -299,8 +299,8 @@ void usage(void)
printf("[obj2] Name of an HDF5 object, in absolute path\n");
printf("[OPTIONS] are:\n");
printf("[-h] Print out this information\n");
- printf("[-r] Report mode. Print the differences\n");
- printf("[-v] Verbose mode. Print the differences, list of objects, warnings\n");
+ printf("[-r] Report mode. Print differences\n");
+ printf("[-v] Verbose mode. Print differences, list of objects, warnings\n");
printf("[-q] Quiet mode. Do not do output\n");
printf("[-n count] Print difference up to count number\n");
printf("[-d delta] Print difference when it is greater than limit delta\n");
diff --git a/tools/h5diff/h5diff_common.h b/tools/h5diff/h5diff_common.h
index 3c0dcd0..f540a20 100644
--- a/tools/h5diff/h5diff_common.h
+++ b/tools/h5diff/h5diff_common.h
@@ -21,5 +21,5 @@ int check_n_input( const char* );
int check_f_input( const char* );
void parse_input(int argc, const char* argv[], const char** fname1, const char** fname2, const char** objname1, const char** objname2, diff_opt_t* options);
void h5diff_exit(int status);
-void print_results(diff_opt_t* options);
+void print_info(diff_opt_t* options);
diff --git a/tools/h5diff/h5diff_main.c b/tools/h5diff/h5diff_main.c
index 0dfd192..13059f2 100644
--- a/tools/h5diff/h5diff_main.c
+++ b/tools/h5diff/h5diff_main.c
@@ -46,6 +46,19 @@
* h5diff and ph5diff split into two files, one that is used
* to build a serial h5diff and one used to build a parallel h5diff
* Common functions have been moved to h5diff_common.c
+ *
+ * October 2005
+ * Introduced a new field 'not_cmp' to 'diff_opt_t' that detects
+ * if some objects are not comparable and prints the message
+ * "Some objects are not comparable"
+ *
+ * February 2007
+ * Added comparison for dataset regions.
+ * Added support for reading and comparing by hyperslabs for large files.
+ * Inclusion of a relative error formula to compare floating
+ * point numbers in order to deal with floating point uncertainty.
+ * Printing of dataset dimensions along with dataset name
+ *
*-------------------------------------------------------------------------
*/
@@ -64,7 +77,7 @@ int main(int argc, const char *argv[])
nfound = h5diff(fname1,fname2,objname1,objname2,&options);
- print_results(&options);
+ print_info(&options);
/*-------------------------------------------------------------------------
* exit code
diff --git a/tools/h5diff/ph5diff_main.c b/tools/h5diff/ph5diff_main.c
index faf7c35..989a74b 100644
--- a/tools/h5diff/ph5diff_main.c
+++ b/tools/h5diff/ph5diff_main.c
@@ -43,7 +43,7 @@ static void ph5diff_worker(int );
* Quiet mode: do not print output
*
* November 2004: Leon Arber (larber@uiuc.edu)
- * Additions that allow h5diff to be run in parallel
+ * Additions that allow h5diff to be run in parallel
*
* This function drives the diff process and will do a serial or parallel diff depending
* on the value of the global variable g_Parallel (default is 0), set to 1 when the program
@@ -54,7 +54,7 @@ static void ph5diff_worker(int );
int main(int argc, const char *argv[])
{
- int nID = 0;
+ int nID = 0;
const char *fname1 = NULL;
const char *fname2 = NULL;
const char *objname1 = NULL;
@@ -72,40 +72,40 @@ int main(int argc, const char *argv[])
if(g_nTasks == 1)
{
- printf("Only 1 task available...doing serial diff\n");
+ printf("Only 1 task available...doing serial diff\n");
- g_Parallel = 0;
+ g_Parallel = 0;
- parse_input(argc, argv, &fname1, &fname2, &objname1, &objname2, &options);
+ parse_input(argc, argv, &fname1, &fname2, &objname1, &objname2, &options);
- nfound = h5diff(fname1,fname2,objname1,objname2,&options);
+ nfound = h5diff(fname1,fname2,objname1,objname2,&options);
- print_results(&options);
+ print_info(&options);
- MPI_Finalize();
+ MPI_Finalize();
- return 0;
+ return 0;
}
/* Have the manager process the command-line */
if(nID == 0)
{
- parse_input(argc, argv, &fname1, &fname2, &objname1, &objname2, &options);
+ parse_input(argc, argv, &fname1, &fname2, &objname1, &objname2, &options);
- nfound = h5diff(fname1,fname2,objname1,objname2,&options);
+ nfound = h5diff(fname1,fname2,objname1,objname2,&options);
- MPI_Barrier(MPI_COMM_WORLD);
+ MPI_Barrier(MPI_COMM_WORLD);
- print_results(&options);
- print_manager_output();
+ print_info(&options);
+ print_manager_output();
- MPI_Finalize();
+ MPI_Finalize();
- return 0;
+ return 0;
}
/* All other tasks become workers and wait for assignments. */
else
- ph5diff_worker(nID);
+ ph5diff_worker(nID);
}
/*-------------------------------------------------------------------------
@@ -129,10 +129,10 @@ ph5diff_worker(int nID)
{
struct diff_args args;
hid_t file1_id, file2_id;
- char filenames[2][1024];
- char out_data[PRINT_DATA_MAX_SIZE] = {0};
+ char filenames[2][1024];
+ char out_data[PRINT_DATA_MAX_SIZE] = {0};
hsize_t nfound=0;
- struct diffs_found diffs;
+ struct diffs_found diffs;
int i;
MPI_Status Status;
@@ -142,99 +142,99 @@ ph5diff_worker(int nID)
MPI_Recv(filenames, 1024*2, MPI_CHAR, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);
if(Status.MPI_TAG == MPI_TAG_PARALLEL)
{
- /* disable error reporting */
- H5E_BEGIN_TRY
- {
- /* Open the files */
- if ((file1_id = H5Fopen (filenames[0], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
- {
- printf ("h5diff Task [%d]: <%s>: unable to open file\n", nID, filenames[0]);
- MPI_Abort(MPI_COMM_WORLD, 0);
- }
- if ((file2_id = H5Fopen (filenames[1], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
- {
- printf ("h5diff Task [%d]: <%s>: unable to open file\n", nID, filenames[1]);
- MPI_Abort(MPI_COMM_WORLD, 0);
- }
- /* enable error reporting */
- }
- H5E_END_TRY;
-
-
- while(1)
- {
- MPI_Probe(0, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);
-
- if(Status.MPI_TAG == MPI_TAG_ARGS)
- {
- /*Recv parameters for diff from manager task */
- MPI_Recv(&args, sizeof(struct diff_args), MPI_BYTE, 0, MPI_TAG_ARGS, MPI_COMM_WORLD, &Status);
- /*Do the diff */
- nfound = diff(file1_id, args.name, file2_id, args.name, &(args.options), args.type);
- diffs.nfound = nfound;
- diffs.not_cmp = args.options.not_cmp;
-
- /*If print buffer has something in it, request print token.*/
- if(outBuffOffset>0)
- {
- MPI_Send(NULL, 0, MPI_BYTE, 0, MPI_TAG_TOK_REQUEST, MPI_COMM_WORLD);
- /*Wait for print token. */
- MPI_Recv(NULL, 0, MPI_BYTE, 0, MPI_TAG_PRINT_TOK, MPI_COMM_WORLD, &Status);
-
- /*When get token, send all of our output to the manager task and then return the token */
- for(i=0; i<outBuffOffset; i+=PRINT_DATA_MAX_SIZE)
- MPI_Send(outBuff+i, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA, MPI_COMM_WORLD);
-
-
- /* An overflow file exists, so we send it's output to the manager too and then delete it */
- if(overflow_file)
- {
- int tmp;
- memset(out_data, 0, PRINT_DATA_MAX_SIZE);
- i=0;
-
- rewind(overflow_file);
- while((tmp = getc(overflow_file)) >= 0)
- {
- *(out_data + i++) = (char)tmp;
- if(i==PRINT_DATA_MAX_SIZE)
- {
- MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA, MPI_COMM_WORLD);
- i=0;
- memset(out_data, 0, PRINT_DATA_MAX_SIZE);
- }
- }
-
- if(i>0)
- MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA, MPI_COMM_WORLD);
-
- fclose(overflow_file);
- overflow_file = NULL;
- }
-
- fflush(stdout);
- memset(outBuff, 0, OUTBUFF_SIZE);
- outBuffOffset = 0;
-
- MPI_Send(&diffs, sizeof(diffs), MPI_BYTE, 0, MPI_TAG_TOK_RETURN, MPI_COMM_WORLD);
- }
- else
- MPI_Send(&diffs, sizeof(diffs), MPI_BYTE, 0, MPI_TAG_DONE, MPI_COMM_WORLD);
- }
- else if(Status.MPI_TAG == MPI_TAG_END)
- {
- MPI_Recv(NULL, 0, MPI_BYTE, 0, MPI_TAG_END, MPI_COMM_WORLD, &Status);
- /* printf("exiting..., task: %d\n", nID);
- fflush(stdout);*/
- break;
- }
- else
- {
- printf("ph5diff_worker: ERROR: invalid tag (%d) received\n", Status.MPI_TAG);
- MPI_Abort(MPI_COMM_WORLD, 0);
- }
-
- }
+ /* disable error reporting */
+ H5E_BEGIN_TRY
+ {
+ /* Open the files */
+ if ((file1_id = H5Fopen (filenames[0], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+ {
+ printf ("h5diff Task [%d]: <%s>: unable to open file\n", nID, filenames[0]);
+ MPI_Abort(MPI_COMM_WORLD, 0);
+ }
+ if ((file2_id = H5Fopen (filenames[1], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+ {
+ printf ("h5diff Task [%d]: <%s>: unable to open file\n", nID, filenames[1]);
+ MPI_Abort(MPI_COMM_WORLD, 0);
+ }
+ /* enable error reporting */
+ }
+ H5E_END_TRY;
+
+
+ while(1)
+ {
+ MPI_Probe(0, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);
+
+ if(Status.MPI_TAG == MPI_TAG_ARGS)
+ {
+ /*Recv parameters for diff from manager task */
+ MPI_Recv(&args, sizeof(struct diff_args), MPI_BYTE, 0, MPI_TAG_ARGS, MPI_COMM_WORLD, &Status);
+ /*Do the diff */
+ nfound = diff(file1_id, args.name, file2_id, args.name, &(args.options), args.type);
+ diffs.nfound = nfound;
+ diffs.not_cmp = args.options.not_cmp;
+
+ /*If print buffer has something in it, request print token.*/
+ if(outBuffOffset>0)
+ {
+ MPI_Send(NULL, 0, MPI_BYTE, 0, MPI_TAG_TOK_REQUEST, MPI_COMM_WORLD);
+ /*Wait for print token. */
+ MPI_Recv(NULL, 0, MPI_BYTE, 0, MPI_TAG_PRINT_TOK, MPI_COMM_WORLD, &Status);
+
+ /*When get token, send all of our output to the manager task and then return the token */
+ for(i=0; i<outBuffOffset; i+=PRINT_DATA_MAX_SIZE)
+ MPI_Send(outBuff+i, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA, MPI_COMM_WORLD);
+
+
+ /* An overflow file exists, so we send it's output to the manager too and then delete it */
+ if(overflow_file)
+ {
+ int tmp;
+ memset(out_data, 0, PRINT_DATA_MAX_SIZE);
+ i=0;
+
+ rewind(overflow_file);
+ while((tmp = getc(overflow_file)) >= 0)
+ {
+ *(out_data + i++) = (char)tmp;
+ if(i==PRINT_DATA_MAX_SIZE)
+ {
+ MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA, MPI_COMM_WORLD);
+ i=0;
+ memset(out_data, 0, PRINT_DATA_MAX_SIZE);
+ }
+ }
+
+ if(i>0)
+ MPI_Send(out_data, PRINT_DATA_MAX_SIZE, MPI_BYTE, 0, MPI_TAG_PRINT_DATA, MPI_COMM_WORLD);
+
+ fclose(overflow_file);
+ overflow_file = NULL;
+ }
+
+ fflush(stdout);
+ memset(outBuff, 0, OUTBUFF_SIZE);
+ outBuffOffset = 0;
+
+ MPI_Send(&diffs, sizeof(diffs), MPI_BYTE, 0, MPI_TAG_TOK_RETURN, MPI_COMM_WORLD);
+ }
+ else
+ MPI_Send(&diffs, sizeof(diffs), MPI_BYTE, 0, MPI_TAG_DONE, MPI_COMM_WORLD);
+ }
+ else if(Status.MPI_TAG == MPI_TAG_END)
+ {
+ MPI_Recv(NULL, 0, MPI_BYTE, 0, MPI_TAG_END, MPI_COMM_WORLD, &Status);
+ /* printf("exiting..., task: %d\n", nID);
+ fflush(stdout);*/
+ break;
+ }
+ else
+ {
+ printf("ph5diff_worker: ERROR: invalid tag (%d) received\n", Status.MPI_TAG);
+ MPI_Abort(MPI_COMM_WORLD, 0);
+ }
+
+ }
}
MPI_Barrier(MPI_COMM_WORLD);