Refactor the SummarizeResults code.
parent
33d0a73da6
commit
672d4065de
417
src/ior.c
417
src/ior.c
|
@ -318,7 +318,6 @@ static void CheckFileSize(IOR_param_t * test, IOR_offset_t dataMoved, int rep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
test->aggFileSizeForBW[rep] = test->aggFileSizeFromXfer[rep];
|
test->aggFileSizeForBW[rep] = test->aggFileSizeFromXfer[rep];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1179,14 +1178,18 @@ ReadCheck(void *fd,
|
||||||
static void ReduceIterResults(IOR_param_t * test, double **timer, int rep,
|
static void ReduceIterResults(IOR_param_t * test, double **timer, int rep,
|
||||||
int access)
|
int access)
|
||||||
{
|
{
|
||||||
double reduced[12] = { 0 },
|
double reduced[12] = { 0 };
|
||||||
diff[6], currentWrite, currentRead, totalWriteTime, totalReadTime;
|
double diff[6];
|
||||||
|
double *diff_subset;
|
||||||
|
double totalTime;
|
||||||
|
double bw;
|
||||||
enum { RIGHT, LEFT };
|
enum { RIGHT, LEFT };
|
||||||
int i;
|
int i;
|
||||||
static int firstIteration = TRUE;
|
static int firstIteration = TRUE;
|
||||||
IOR_offset_t aggFileSizeForBW;
|
|
||||||
MPI_Op op;
|
MPI_Op op;
|
||||||
|
|
||||||
|
assert(access == WRITE || access == READ);
|
||||||
|
|
||||||
/* Find the minimum start time of the even numbered timers, and the
|
/* Find the minimum start time of the even numbered timers, and the
|
||||||
maximum finish time for the odd numbered timers */
|
maximum finish time for the odd numbered timers */
|
||||||
for (i = 0; i < 12; i++) {
|
for (i = 0; i < 12; i++) {
|
||||||
|
@ -1195,84 +1198,57 @@ static void ReduceIterResults(IOR_param_t * test, double **timer, int rep,
|
||||||
op, 0, testComm), "MPI_Reduce()");
|
op, 0, testComm), "MPI_Reduce()");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rank == 0) {
|
if (rank != 0) {
|
||||||
/* Calculate elapsed times and throughput numbers */
|
/* Only rank 0 tallies and prints the results. */
|
||||||
for (i = 0; i < 6; i++)
|
return;
|
||||||
diff[i] = reduced[2 * i + 1] - reduced[2 * i];
|
}
|
||||||
totalReadTime = reduced[11] - reduced[6];
|
|
||||||
totalWriteTime = reduced[5] - reduced[0];
|
/* Calculate elapsed times and throughput numbers */
|
||||||
aggFileSizeForBW = test->aggFileSizeForBW[rep];
|
for (i = 0; i < 6; i++) {
|
||||||
if (access == WRITE) {
|
diff[i] = reduced[2 * i + 1] - reduced[2 * i];
|
||||||
currentWrite =
|
}
|
||||||
(double)((double)aggFileSizeForBW / totalWriteTime);
|
if (access == WRITE) {
|
||||||
test->writeVal[0][rep] = currentWrite;
|
totalTime = reduced[5] - reduced[0];
|
||||||
test->writeVal[1][rep] = totalWriteTime;
|
test->writeTime[rep] = totalTime;
|
||||||
}
|
diff_subset = &diff[0];
|
||||||
if (access == READ) {
|
} else { /* READ */
|
||||||
currentRead =
|
totalTime = reduced[11] - reduced[6];
|
||||||
(double)((double)aggFileSizeForBW / totalReadTime);
|
test->readTime[rep] = totalTime;
|
||||||
test->readVal[0][rep] = currentRead;
|
diff_subset = &diff[4];
|
||||||
test->readVal[1][rep] = totalReadTime;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
#if USE_UNDOC_OPT /* fillTheFileSystem */
|
|
||||||
if (test->fillTheFileSystem && rank == 0 && firstIteration
|
|
||||||
&& rep == 0 && verbose >= VERBOSE_1) {
|
|
||||||
fprintf(stdout,
|
|
||||||
" . . . skipping iteration results output . . .\n");
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
#endif /* USE_UNDOC_OPT - fillTheFileSystem */
|
|
||||||
|
|
||||||
if (rank == 0 && verbose >= VERBOSE_2
|
|
||||||
#if USE_UNDOC_OPT /* fillTheFileSystem */
|
#if USE_UNDOC_OPT /* fillTheFileSystem */
|
||||||
&& test->fillTheFileSystem == FALSE
|
if (test->fillTheFileSystem && firstIteration && rep == 0
|
||||||
#endif /* USE_UNDOC_OPT - fillTheFileSystem */
|
&& verbose >= VERBOSE_1) {
|
||||||
) {
|
fprintf(stdout, " . . . skipping iteration results output . . .\n");
|
||||||
/* print out the results */
|
|
||||||
if (firstIteration && rep == 0) {
|
|
||||||
fprintf(stdout,
|
|
||||||
"access bw(MiB/s) block(KiB) xfer(KiB)");
|
|
||||||
fprintf(stdout,
|
|
||||||
" open(s) wr/rd(s) close(s) total(s) iter\n");
|
|
||||||
fprintf(stdout,
|
|
||||||
"------ --------- ---------- ---------");
|
|
||||||
fprintf(stdout,
|
|
||||||
" -------- -------- -------- -------- ----\n");
|
|
||||||
}
|
|
||||||
if (access == WRITE) {
|
|
||||||
fprintf(stdout, "write ");
|
|
||||||
PPDouble(LEFT, (currentWrite / MEBIBYTE), " \0");
|
|
||||||
PPDouble(LEFT, (double)test->blockSize / KIBIBYTE,
|
|
||||||
" \0");
|
|
||||||
PPDouble(LEFT, (double)test->transferSize / KIBIBYTE,
|
|
||||||
" \0");
|
|
||||||
if (test->writeFile) {
|
|
||||||
PPDouble(LEFT, diff[0], " \0");
|
|
||||||
PPDouble(LEFT, diff[1], " \0");
|
|
||||||
PPDouble(LEFT, diff[2], " \0");
|
|
||||||
PPDouble(LEFT, totalWriteTime, " \0");
|
|
||||||
}
|
|
||||||
fprintf(stdout, "%-4d\n", rep);
|
|
||||||
}
|
|
||||||
if (access == READ) {
|
|
||||||
fprintf(stdout, "read ");
|
|
||||||
PPDouble(LEFT, (currentRead / MEBIBYTE), " \0");
|
|
||||||
PPDouble(LEFT, (double)test->blockSize / KIBIBYTE,
|
|
||||||
" \0");
|
|
||||||
PPDouble(LEFT, (double)test->transferSize / KIBIBYTE,
|
|
||||||
" \0");
|
|
||||||
if (test->readFile) {
|
|
||||||
PPDouble(LEFT, diff[3], " \0");
|
|
||||||
PPDouble(LEFT, diff[4], " \0");
|
|
||||||
PPDouble(LEFT, diff[5], " \0");
|
|
||||||
PPDouble(LEFT, totalReadTime, " \0");
|
|
||||||
}
|
|
||||||
fprintf(stdout, "%-4d\n", rep);
|
|
||||||
}
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
firstIteration = FALSE; /* set to TRUE to repeat this header */
|
|
||||||
|
if (verbose < VERBOSE_0 || test->fillTheFileSystem) {
|
||||||
|
#else
|
||||||
|
if (verbose < VERBOSE_0) {
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstIteration && rep == 0) {
|
||||||
|
firstIteration = FALSE;
|
||||||
|
fprintf(stdout, "access bw(MiB/s) block(KiB) xfer(KiB) open(s) wr/rd(s) close(s) total(s) iter\n");
|
||||||
|
fprintf(stdout, "------ --------- ---------- --------- -------- -------- -------- -------- ----\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stdout, "%-10s", access == WRITE ? "write" : "read");
|
||||||
|
bw = (double)test->aggFileSizeForBW[rep] / totalTime;
|
||||||
|
PPDouble(LEFT, bw / MEBIBYTE, " ");
|
||||||
|
PPDouble(LEFT, (double)test->blockSize / KIBIBYTE, " ");
|
||||||
|
PPDouble(LEFT, (double)test->transferSize / KIBIBYTE, " ");
|
||||||
|
PPDouble(LEFT, diff_subset[0], " ");
|
||||||
|
PPDouble(LEFT, diff_subset[1], " ");
|
||||||
|
PPDouble(LEFT, diff_subset[2], " ");
|
||||||
|
PPDouble(LEFT, totalTime, " ");
|
||||||
|
fprintf(stdout, "%-4d\n", rep);
|
||||||
|
|
||||||
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1428,11 +1404,6 @@ static void ShowInfo(int argc, char **argv, IOR_param_t * test)
|
||||||
*/
|
*/
|
||||||
static void ShowSetup(IOR_param_t * test)
|
static void ShowSetup(IOR_param_t * test)
|
||||||
{
|
{
|
||||||
IOR_offset_t aggFileSizeForBW;
|
|
||||||
|
|
||||||
/* use expected file size of iteration #0 for display */
|
|
||||||
aggFileSizeForBW = test->aggFileSizeFromCalc[0];
|
|
||||||
|
|
||||||
if (strcmp(test->debug, "") != 0) {
|
if (strcmp(test->debug, "") != 0) {
|
||||||
fprintf(stdout, "\n*** DEBUG MODE ***\n");
|
fprintf(stdout, "\n*** DEBUG MODE ***\n");
|
||||||
fprintf(stdout, "*** %s ***\n\n", test->debug);
|
fprintf(stdout, "*** %s ***\n\n", test->debug);
|
||||||
|
@ -1490,7 +1461,7 @@ static void ShowSetup(IOR_param_t * test)
|
||||||
fprintf(stdout, "\tblocksize = %s\n",
|
fprintf(stdout, "\tblocksize = %s\n",
|
||||||
HumanReadable(test->blockSize, BASE_TWO));
|
HumanReadable(test->blockSize, BASE_TWO));
|
||||||
fprintf(stdout, "\taggregate filesize = %s\n",
|
fprintf(stdout, "\taggregate filesize = %s\n",
|
||||||
HumanReadable(aggFileSizeForBW, BASE_TWO));
|
HumanReadable(test->aggFileSizeFromCalc[0], BASE_TWO));
|
||||||
#ifdef HAVE_LUSTRE_LUSTRE_USER_H
|
#ifdef HAVE_LUSTRE_LUSTRE_USER_H
|
||||||
fprintf(stdout, "\tLustre stripe size = %s\n",
|
fprintf(stdout, "\tLustre stripe size = %s\n",
|
||||||
((test->lustre_stripe_size == 0) ? "Use default" :
|
((test->lustre_stripe_size == 0) ? "Use default" :
|
||||||
|
@ -1582,102 +1553,143 @@ static void ShowTest(IOR_param_t * test)
|
||||||
fprintf(stdout, "\t%s=%lld\n", "blockSize", test->blockSize);
|
fprintf(stdout, "\t%s=%lld\n", "blockSize", test->blockSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static double mean_of_array_of_doubles(double *values, int len)
|
||||||
|
{
|
||||||
|
double tot = 0.0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
tot += values[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return tot / len;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct results {
|
||||||
|
double min;
|
||||||
|
double max;
|
||||||
|
double mean;
|
||||||
|
double var;
|
||||||
|
double sd;
|
||||||
|
double sum;
|
||||||
|
double *val;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct results *bw_values(int reps, IOR_offset_t *agg_file_size, double *vals)
|
||||||
|
{
|
||||||
|
struct results *r;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
r = (struct results *)malloc(sizeof(struct results)
|
||||||
|
+ (reps * sizeof(double)));
|
||||||
|
if (r == NULL)
|
||||||
|
ERR("malloc failed");
|
||||||
|
r->val = (double *)&r[1];
|
||||||
|
|
||||||
|
for (i = 0; i < reps; i++) {
|
||||||
|
r->val[i] = (double)agg_file_size[i] / vals[i];
|
||||||
|
if (i == 0) {
|
||||||
|
r->min = r->val[i];
|
||||||
|
r->max = r->val[i];
|
||||||
|
r->sum = 0.0;
|
||||||
|
}
|
||||||
|
r->min = MIN(r->min, r->val[i]);
|
||||||
|
r->max = MAX(r->max, r->val[i]);
|
||||||
|
r->sum += r->val[i];
|
||||||
|
}
|
||||||
|
r->mean = r->sum / reps;
|
||||||
|
r->var = 0.0;
|
||||||
|
for (i = 0; i < reps; i++) {
|
||||||
|
r->var += pow((r->mean - r->val[i]), 2);
|
||||||
|
}
|
||||||
|
r->var = r->var / reps;
|
||||||
|
r->sd = sqrt(r->var);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct results *ops_values(int reps, int num_tasks,
|
||||||
|
IOR_offset_t block_size,
|
||||||
|
IOR_offset_t transfer_size,
|
||||||
|
double *vals)
|
||||||
|
{
|
||||||
|
struct results *r;
|
||||||
|
unsigned long long op_count;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
r = (struct results *)malloc(sizeof(struct results)
|
||||||
|
+ (reps * sizeof(double)));
|
||||||
|
if (r == NULL)
|
||||||
|
ERR("malloc failed");
|
||||||
|
r->val = (double *)&r[1];
|
||||||
|
|
||||||
|
op_count = num_tasks * (block_size / transfer_size);
|
||||||
|
for (i = 0; i < reps; i++) {
|
||||||
|
r->val[i] = (double)op_count / vals[i];
|
||||||
|
if (i == 0) {
|
||||||
|
r->min = r->val[i];
|
||||||
|
r->max = r->val[i];
|
||||||
|
r->sum = 0.0;
|
||||||
|
}
|
||||||
|
r->min = MIN(r->min, r->val[i]);
|
||||||
|
r->max = MAX(r->max, r->val[i]);
|
||||||
|
r->sum += r->val[i];
|
||||||
|
}
|
||||||
|
r->mean = r->sum / reps;
|
||||||
|
r->var = 0.0;
|
||||||
|
for (i = 0; i < reps; i++) {
|
||||||
|
r->var += pow((r->mean - r->val[i]), 2);
|
||||||
|
}
|
||||||
|
r->var = r->var / reps;
|
||||||
|
r->sd = sqrt(r->var);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Summarize results, showing max rates (and min, mean, stddev if verbose)
|
* Summarize results, showing max rates (and min, mean, stddev if verbose)
|
||||||
*/
|
*/
|
||||||
static void SummarizeResults(IOR_param_t * test)
|
static void SummarizeResults(IOR_param_t * test)
|
||||||
{
|
{
|
||||||
int rep, ival;
|
struct results *write_bw;
|
||||||
double maxWrite[2], minWrite[2], maxRead[2], minRead[2];
|
struct results *read_bw;
|
||||||
double meanWrite[2], meanRead[2];
|
struct results *write_ops;
|
||||||
double varWrite[2], varRead[2];
|
struct results *read_ops;
|
||||||
double sdWrite[2], sdRead[2];
|
int reps;
|
||||||
double sumWrite[2], sumRead[2], writeTimeSum, readTimeSum;
|
int i, j;
|
||||||
|
|
||||||
|
reps = test->repetitions;
|
||||||
|
|
||||||
for (ival = 0; ival < 2; ival++) {
|
write_bw = bw_values(reps, test->aggFileSizeForBW, test->writeTime);
|
||||||
varWrite[ival] = 0;
|
read_bw = bw_values(reps, test->aggFileSizeForBW, test->readTime);
|
||||||
varRead[ival] = 0;
|
write_ops = ops_values(reps, test->numTasks, test->blockSize,
|
||||||
sdWrite[ival] = 0;
|
test->transferSize, test->writeTime);
|
||||||
sdRead[ival] = 0;
|
read_ops = ops_values(reps, test->numTasks, test->blockSize,
|
||||||
sumWrite[ival] = 0;
|
test->transferSize, test->readTime);
|
||||||
sumRead[ival] = 0;
|
|
||||||
writeTimeSum = 0;
|
|
||||||
readTimeSum = 0;
|
|
||||||
|
|
||||||
if (ival == 1) {
|
if (rank == 0 && verbose >= VERBOSE_1) {
|
||||||
for (rep = 0; rep < test->repetitions; rep++) {
|
fprintf(stdout, "\n");
|
||||||
writeTimeSum += test->writeVal[ival][rep];
|
|
||||||
readTimeSum += test->readVal[ival][rep];
|
|
||||||
test->writeVal[ival][rep] =
|
|
||||||
(double)test->numTasks *
|
|
||||||
((double)test->blockSize /
|
|
||||||
(double)test->transferSize) /
|
|
||||||
test->writeVal[ival][rep];
|
|
||||||
test->readVal[ival][rep] =
|
|
||||||
(double)test->numTasks *
|
|
||||||
((double)test->blockSize /
|
|
||||||
(double)test->transferSize) /
|
|
||||||
test->readVal[ival][rep];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
maxWrite[ival] = minWrite[ival] = test->writeVal[ival][0];
|
|
||||||
maxRead[ival] = minRead[ival] = test->readVal[ival][0];
|
|
||||||
|
|
||||||
for (rep = 0; rep < test->repetitions; rep++) {
|
|
||||||
if (maxWrite[ival] < test->writeVal[ival][rep]) {
|
|
||||||
maxWrite[ival] = test->writeVal[ival][rep];
|
|
||||||
}
|
|
||||||
if (maxRead[ival] < test->readVal[ival][rep]) {
|
|
||||||
maxRead[ival] = test->readVal[ival][rep];
|
|
||||||
}
|
|
||||||
if (minWrite[ival] > test->writeVal[ival][rep]) {
|
|
||||||
minWrite[ival] = test->writeVal[ival][rep];
|
|
||||||
}
|
|
||||||
if (minRead[ival] > test->readVal[ival][rep]) {
|
|
||||||
minRead[ival] = test->readVal[ival][rep];
|
|
||||||
}
|
|
||||||
sumWrite[ival] += test->writeVal[ival][rep];
|
|
||||||
sumRead[ival] += test->readVal[ival][rep];
|
|
||||||
}
|
|
||||||
|
|
||||||
meanWrite[ival] = sumWrite[ival] / test->repetitions;
|
|
||||||
meanRead[ival] = sumRead[ival] / test->repetitions;
|
|
||||||
|
|
||||||
for (rep = 0; rep < test->repetitions; rep++) {
|
|
||||||
varWrite[ival] +=
|
|
||||||
pow((meanWrite[ival] - test->writeVal[ival][rep]),
|
|
||||||
2);
|
|
||||||
varRead[ival] +=
|
|
||||||
pow((meanRead[ival] - test->readVal[ival][rep]), 2);
|
|
||||||
}
|
|
||||||
varWrite[ival] = varWrite[ival] / test->repetitions;
|
|
||||||
varRead[ival] = varRead[ival] / test->repetitions;
|
|
||||||
sdWrite[ival] = sqrt(varWrite[ival]);
|
|
||||||
sdRead[ival] = sqrt(varRead[ival]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rank == 0 && verbose >= VERBOSE_0) {
|
|
||||||
fprintf(stdout,
|
fprintf(stdout,
|
||||||
"Operation Max(MiB) Min(MiB) Mean(MiB) StdDev Max(OPs) Min(OPs) Mean(OPs) StdDev Mean(s) ");
|
"Operation Max(MiB) Min(MiB) Mean(MiB) StdDev Max(OPs) Min(OPs) Mean(OPs) StdDev Mean(s) ");
|
||||||
if (verbose >= VERBOSE_1)
|
if (verbose >= VERBOSE_1)
|
||||||
fprintf(stdout,
|
fprintf(stdout,
|
||||||
"#Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize TestNum API\n");
|
"#Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize TestNum API");
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
fprintf(stdout,
|
fprintf(stdout,
|
||||||
"--------- --------- --------- ---------- ------- --------- --------- ---------- ------- --------\n");
|
"--------- --------- --------- ---------- ------- --------- --------- ---------- ------- --------\n");
|
||||||
if (maxWrite[0] > 0.) {
|
if (test->writeFile) {
|
||||||
fprintf(stdout, "%s ", "write");
|
fprintf(stdout, "%s ", "write");
|
||||||
fprintf(stdout, "%10.2f ", maxWrite[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f ", write_bw->max / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f ", minWrite[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f ", write_bw->min / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f", meanWrite[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f", write_bw->mean / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f ", sdWrite[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f ", write_bw->sd / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f ", maxWrite[1]);
|
fprintf(stdout, "%10.2f ", write_ops->max);
|
||||||
fprintf(stdout, "%10.2f ", minWrite[1]);
|
fprintf(stdout, "%10.2f ", write_ops->min);
|
||||||
fprintf(stdout, "%10.2f", meanWrite[1]);
|
fprintf(stdout, "%10.2f", write_ops->mean);
|
||||||
fprintf(stdout, "%10.2f", sdWrite[1]);
|
fprintf(stdout, "%10.2f", write_ops->sd);
|
||||||
fprintf(stdout, "%10.5f ",
|
fprintf(stdout, "%10.5f ",
|
||||||
writeTimeSum / (double)(test->repetitions));
|
mean_of_array_of_doubles(test->writeTime,
|
||||||
|
test->repetitions));
|
||||||
if (verbose >= VERBOSE_1) {
|
if (verbose >= VERBOSE_1) {
|
||||||
fprintf(stdout, "%d ", test->numTasks);
|
fprintf(stdout, "%d ", test->numTasks);
|
||||||
fprintf(stdout, "%d ", test->tasksPerNode);
|
fprintf(stdout, "%d ", test->tasksPerNode);
|
||||||
|
@ -1697,19 +1709,21 @@ static void SummarizeResults(IOR_param_t * test)
|
||||||
fprintf(stdout, "%d ", test->TestNum);
|
fprintf(stdout, "%d ", test->TestNum);
|
||||||
fprintf(stdout, "%s ", test->api);
|
fprintf(stdout, "%s ", test->api);
|
||||||
}
|
}
|
||||||
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
if (maxRead[0] > 0.) {
|
if (test->readFile) {
|
||||||
fprintf(stdout, "%s ", "read");
|
fprintf(stdout, "%s ", "read");
|
||||||
fprintf(stdout, "%10.2f ", maxRead[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f ", read_bw->max / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f ", minRead[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f ", read_bw->min / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f", meanRead[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f", read_bw->mean / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f ", sdRead[0] / MEBIBYTE);
|
fprintf(stdout, "%10.2f ", read_bw->sd / MEBIBYTE);
|
||||||
fprintf(stdout, "%10.2f ", maxRead[1]);
|
fprintf(stdout, "%10.2f ", read_ops->max);
|
||||||
fprintf(stdout, "%10.2f ", minRead[1]);
|
fprintf(stdout, "%10.2f ", read_ops->min);
|
||||||
fprintf(stdout, "%10.2f", meanRead[1]);
|
fprintf(stdout, "%10.2f", read_ops->mean);
|
||||||
fprintf(stdout, "%10.2f", sdRead[1]);
|
fprintf(stdout, "%10.2f", read_ops->sd);
|
||||||
fprintf(stdout, "%10.5f ",
|
fprintf(stdout, "%10.5f ",
|
||||||
readTimeSum / (double)(test->repetitions));
|
mean_of_array_of_doubles(test->readTime,
|
||||||
|
test->repetitions));
|
||||||
if (verbose >= VERBOSE_1) {
|
if (verbose >= VERBOSE_1) {
|
||||||
fprintf(stdout, "%d ", test->numTasks);
|
fprintf(stdout, "%d ", test->numTasks);
|
||||||
fprintf(stdout, "%d ", test->tasksPerNode);
|
fprintf(stdout, "%d ", test->tasksPerNode);
|
||||||
|
@ -1729,6 +1743,7 @@ static void SummarizeResults(IOR_param_t * test)
|
||||||
fprintf(stdout, "%d ", test->TestNum);
|
fprintf(stdout, "%d ", test->TestNum);
|
||||||
fprintf(stdout, "%s ", test->api);
|
fprintf(stdout, "%s ", test->api);
|
||||||
}
|
}
|
||||||
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
@ -1736,17 +1751,20 @@ static void SummarizeResults(IOR_param_t * test)
|
||||||
if (rank == 0 && verbose >= VERBOSE_0) {
|
if (rank == 0 && verbose >= VERBOSE_0) {
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
if (test->writeFile) {
|
if (test->writeFile) {
|
||||||
fprintf(stdout,
|
fprintf(stdout, "Max Write: %.2f MiB/sec (%.2f MB/sec)\n",
|
||||||
"Max Write: %.2f MiB/sec (%.2f MB/sec)\n",
|
write_bw->max/MEBIBYTE, write_bw->max / MEGABYTE);
|
||||||
maxWrite[0] / MEBIBYTE, maxWrite[0] / MEGABYTE);
|
|
||||||
}
|
}
|
||||||
if (test->readFile) {
|
if (test->readFile) {
|
||||||
fprintf(stdout,
|
fprintf(stdout, "Max Read: %.2f MiB/sec (%.2f MB/sec)\n",
|
||||||
"Max Read: %.2f MiB/sec (%.2f MB/sec)\n",
|
read_bw->max/MEBIBYTE, read_bw->max/MEGABYTE);
|
||||||
maxRead[0] / MEBIBYTE, maxRead[0] / MEGABYTE);
|
|
||||||
}
|
}
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(write_bw);
|
||||||
|
free(write_ops);
|
||||||
|
free(read_bw);
|
||||||
|
free(read_ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1804,37 +1822,34 @@ static void TestIoSys(IOR_param_t * test)
|
||||||
for (i = 0; i < 12; i++) {
|
for (i = 0; i < 12; i++) {
|
||||||
timer[i] = (double *)malloc(test->repetitions * sizeof(double));
|
timer[i] = (double *)malloc(test->repetitions * sizeof(double));
|
||||||
if (timer[i] == NULL)
|
if (timer[i] == NULL)
|
||||||
ERR("out of memory");
|
ERR("malloc failed");
|
||||||
}
|
|
||||||
for (i = 0; i < 2; i++) {
|
|
||||||
test->writeVal[i] =
|
|
||||||
(double *)malloc(test->repetitions * sizeof(double));
|
|
||||||
if (test->writeVal[i] == NULL)
|
|
||||||
ERR("out of memory");
|
|
||||||
test->readVal[i] =
|
|
||||||
(double *)malloc(test->repetitions * sizeof(double));
|
|
||||||
if (test->readVal[i] == NULL)
|
|
||||||
ERR("out of memory");
|
|
||||||
for (rep = 0; rep < test->repetitions; rep++) {
|
|
||||||
test->writeVal[i][rep] = test->readVal[i][rep] = 0.0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test->writeTime = (double *)malloc(test->repetitions * sizeof(double));
|
||||||
|
if (test->writeTime == NULL)
|
||||||
|
ERR("malloc failed");
|
||||||
|
memset(test->writeTime, 0, test->repetitions * sizeof(double));
|
||||||
|
test->readTime = (double *)malloc(test->repetitions * sizeof(double));
|
||||||
|
if (test->readTime == NULL)
|
||||||
|
ERR("malloc failed");
|
||||||
|
memset(test->readTime, 0, test->repetitions * sizeof(double));
|
||||||
|
|
||||||
test->aggFileSizeFromCalc =
|
test->aggFileSizeFromCalc =
|
||||||
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
||||||
if (test->aggFileSizeFromCalc == NULL)
|
if (test->aggFileSizeFromCalc == NULL)
|
||||||
ERR("out of memory");
|
ERR("malloc failed");
|
||||||
test->aggFileSizeFromStat =
|
test->aggFileSizeFromStat =
|
||||||
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
||||||
if (test->aggFileSizeFromStat == NULL)
|
if (test->aggFileSizeFromStat == NULL)
|
||||||
ERR("out of memory");
|
ERR("malloc failed");
|
||||||
test->aggFileSizeFromXfer =
|
test->aggFileSizeFromXfer =
|
||||||
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
||||||
if (test->aggFileSizeFromXfer == NULL)
|
if (test->aggFileSizeFromXfer == NULL)
|
||||||
ERR("out of memory");
|
ERR("malloc failed");
|
||||||
test->aggFileSizeForBW =
|
test->aggFileSizeForBW =
|
||||||
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
(IOR_offset_t *) malloc(test->repetitions * sizeof(IOR_offset_t));
|
||||||
if (test->aggFileSizeForBW == NULL)
|
if (test->aggFileSizeForBW == NULL)
|
||||||
ERR("out of memory");
|
ERR("malloc failed");
|
||||||
|
|
||||||
/* bind I/O calls to specific API */
|
/* bind I/O calls to specific API */
|
||||||
AioriBind(test->api);
|
AioriBind(test->api);
|
||||||
|
@ -2268,10 +2283,8 @@ static void TestIoSys(IOR_param_t * test)
|
||||||
SummarizeResults(test);
|
SummarizeResults(test);
|
||||||
|
|
||||||
MPI_CHECK(MPI_Comm_free(&testComm), "MPI_Comm_free() error");
|
MPI_CHECK(MPI_Comm_free(&testComm), "MPI_Comm_free() error");
|
||||||
for (i = 0; i < 2; i++) {
|
free(test->writeTime);
|
||||||
free(test->writeVal[i]);
|
free(test->readTime);
|
||||||
free(test->readVal[i]);
|
|
||||||
}
|
|
||||||
free(test->aggFileSizeFromCalc);
|
free(test->aggFileSizeFromCalc);
|
||||||
free(test->aggFileSizeFromStat);
|
free(test->aggFileSizeFromStat);
|
||||||
free(test->aggFileSizeFromXfer);
|
free(test->aggFileSizeFromXfer);
|
||||||
|
|
|
@ -55,8 +55,8 @@ typedef struct
|
||||||
int repCounter; /* rep counter */
|
int repCounter; /* rep counter */
|
||||||
int multiFile; /* multiple files */
|
int multiFile; /* multiple files */
|
||||||
int interTestDelay; /* delay between reps in seconds */
|
int interTestDelay; /* delay between reps in seconds */
|
||||||
double * writeVal[2]; /* array to write results */
|
double *writeTime; /* array of write time results for each rep */
|
||||||
double * readVal[2]; /* array to read results */
|
double *readTime; /* array to read time results for each rep */
|
||||||
int open; /* flag for writing or reading */
|
int open; /* flag for writing or reading */
|
||||||
int readFile; /* read of existing file */
|
int readFile; /* read of existing file */
|
||||||
int writeFile; /* write of file */
|
int writeFile; /* write of file */
|
||||||
|
|
Loading…
Reference in New Issue