diff -r IOR-2.10.1/USER_GUIDE IOR-2.10.1.ornl.13/USER_GUIDE 74a75 > -A N test number for reference in some output (hodsonsw@ornl.gov-ORNL-12/6/07) 79a81,83 > -Q N taskPerNodeOffset for read tests use with -C & -Z options (-C constant N, -Z at least N) (hodsonsw@ornl.gov-ORNL-12/6/07) > -Z changes task ordering to random ordering for readback (hodsonsw@ornl.gov-ORNL-12/6/07) > -X random seed for -Z option( >0 same seed for all iterations, <0 different seed for each iteration) (hodsonsw@ornl.gov-ORNL-12/6/07) 119a124 > diff -r IOR-2.10.1/src/C/IOR.c IOR-2.10.1.ornl.13/src/C/IOR.c 77a78,80 > int *cabinet, *chassis, *slotnum, *nodenum; > int cabmap(int *cabinet, int *chassis, int *slotnum, int *nodenum); > 107a111,112 > cabmap(cabinet,chassis,slotnum,nodenum); > 491c496 < if (verbose >= VERBOSE_2 && firstPass) { --- > if (verbose > VERBOSE_2 && firstPass) { 641a647 > " -Z reorderTasks -- changes task ordering to random ordering [!HDF5]", 1257c1263,1264 < test->writeVal[rep] = currentWrite; --- > test->writeVal[0][rep] = currentWrite; > test->writeVal[1][rep] = totalWriteTime; 1261c1268,1269 < test->readVal[rep] = currentRead; --- > test->readVal[0][rep] = currentRead; > test->readVal[1][rep] = totalReadTime; 1282c1290 < fprintf(stdout, " open(s) wr/rd(s) close(s) iter\n"); --- > fprintf(stdout, " open(s) wr/rd(s) close(s) total(s) iter\n"); 1284c1292 < fprintf(stdout, " -------- -------- -------- ----\n"); --- > fprintf(stdout, " -------- -------- -------- -------- ----\n"); 1294a1303 > PPDouble(LEFT, totalWriteTime, " \0"); 1296c1305 < fprintf(stdout, "%-4d\n", rep); --- > fprintf(stdout, "%-4d XXCEL\n", rep); 1306a1316 > PPDouble(LEFT, totalReadTime, " \0"); 1308c1318 < fprintf(stdout, "%-4d\n", rep); --- > fprintf(stdout, "%-4d XXCEL\n", rep); 1427c1437 < fprintf(stdout, "\n"); --- > fprintf(stdout, " ZXCEL\n"); 1511c1521 < fprintf(stdout, "\tordering ="); --- > fprintf(stdout, "\tordering in a file ="); 1516a1527,1538 > fprintf(stdout, "\tordering inter file="); > if (test->reorderTasks == FALSE && test->reorderTasksRandom == FALSE){ > fprintf(stdout, " no tasks offsets\n"); > } > if (test->reorderTasks == TRUE) > { > fprintf(stdout, "constant task offsets = %d\n",test->taskPerNodeOffset); > } > if (test->reorderTasksRandom == TRUE) > { > fprintf(stdout, "random task offsets >= %d %d\n",test->taskPerNodeOffset,test->reorderTasksRandomSeed); > } 1583a1606 > fprintf(stdout, "\t%s=%d\n", "reorderTasksRandom", test->reorderTasksRandom); 1621,1626c1644,1672 < int rep; < double maxWrite, minWrite, maxRead, minRead, < meanWrite, meanRead, < varWrite = 0, varRead = 0, < sdWrite = 0, sdRead = 0, < sumWrite = 0, sumRead = 0; --- > int rep, ival; > double maxWrite[2], minWrite[2], maxRead[2], minRead[2], > meanWrite[2], meanRead[2], > varWrite[2], varRead[2], > sdWrite[2], sdRead[2], > sumWrite[2], sumRead[2], > writeTimeSum, readTimeSum; > > for (ival=0; ival<2; ival++) > { > varWrite[ival] = 0; > varRead[ival] = 0; > sdWrite[ival] = 0; > sdRead[ival] = 0; > sumWrite[ival] = 0; > sumRead[ival] = 0; > writeTimeSum = 0; > readTimeSum = 0; > > if (ival == 1) > { > for (rep = 0; rep < test->repetitions; rep++) > { > writeTimeSum += test->writeVal[ival][rep]; > readTimeSum += test->readVal [ival][rep]; > test->writeVal[ival][rep] = (double)test->numTasks/test->writeVal[ival][rep]; > test->readVal [ival][rep] = (double)test->numTasks/test->readVal [ival][rep]; > } > } 1628,1629c1674,1675 < maxWrite = minWrite = test->writeVal[0]; < maxRead = minRead = test->readVal[0]; --- > maxWrite[ival] = minWrite[ival] = test->writeVal[ival][0]; > maxRead[ival] = minRead[ival] = test->readVal[ival][0]; 1632,1633c1678,1679 < if (maxWrite < test->writeVal[rep]) { < maxWrite = test->writeVal[rep]; --- > if (maxWrite[ival] < test->writeVal[ival][rep]) { > maxWrite[ival] = test->writeVal[ival][rep]; 1635,1636c1681,1682 < if (maxRead < test->readVal[rep]) { < maxRead = test->readVal[rep]; --- > if (maxRead[ival] < test->readVal[ival][rep]) { > maxRead[ival] = test->readVal[ival][rep]; 1638,1639c1684,1685 < if (minWrite > test->writeVal[rep]) { < minWrite = test->writeVal[rep]; --- > if (minWrite[ival] > test->writeVal[ival][rep]) { > minWrite[ival] = test->writeVal[ival][rep]; 1641,1642c1687,1688 < if (minRead > test->readVal[rep]) { < minRead = test->readVal[rep]; --- > if (minRead[ival] > test->readVal[ival][rep]) { > minRead[ival] = test->readVal[ival][rep]; 1644,1645c1690,1691 < sumWrite += test->writeVal[rep]; < sumRead += test->readVal[rep]; --- > sumWrite[ival] += test->writeVal[ival][rep]; > sumRead[ival] += test->readVal[ival][rep]; 1648,1649c1694,1695 < meanWrite = sumWrite / test->repetitions; < meanRead = sumRead / test->repetitions; --- > meanWrite[ival] = sumWrite[ival] / test->repetitions; > meanRead[ival] = sumRead[ival] / test->repetitions; 1652,1653c1698,1699 < varWrite += pow((meanWrite - test->writeVal[rep]), 2); < varRead += pow((meanRead - test->readVal[rep]), 2); --- > varWrite[ival] += pow((meanWrite[ival] - test->writeVal[ival][rep]), 2); > varRead[ival] += pow((meanRead[ival] - test->readVal[ival][rep]), 2); 1655,1665c1701,1713 < varWrite = varWrite / test->repetitions; < varRead = varRead / test->repetitions; < sdWrite = sqrt(varWrite); < sdRead = sqrt(varRead); < < if (rank == 0 && verbose >= VERBOSE_2) { < fprintf(stdout,"\n"); < fprintf(stdout, < "Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev\n"); < fprintf(stdout, < "--------- --------- --------- ---------- -------\n"); --- > 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_2) > { > fprintf(stdout, "Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)"); > fprintf(stdout, "Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize\n"); > fprintf(stdout, "--------- --------- --------- ---------- ------- --------- --------- ---------- ------- -------\n"); > if (maxWrite[0] > 0.) > { 1667,1670c1715,1728 < fprintf(stdout,"%10.2f ", maxWrite/MEBIBYTE); < fprintf(stdout,"%10.2f ", minWrite/MEBIBYTE); < fprintf(stdout,"%10.2f", meanWrite/MEBIBYTE); < fprintf(stdout,"%10.2f\n", sdWrite/MEBIBYTE); --- > fprintf(stdout,"%10.2f ", maxWrite[0]/MEBIBYTE); > fprintf(stdout,"%10.2f ", minWrite[0]/MEBIBYTE); > fprintf(stdout,"%10.2f", meanWrite[0]/MEBIBYTE); > fprintf(stdout,"%10.2f ", sdWrite[0]/MEBIBYTE); > fprintf(stdout,"%10.2f ", maxWrite[1]); > fprintf(stdout,"%10.2f ", minWrite[1]); > fprintf(stdout,"%10.2f", meanWrite[1]); > fprintf(stdout,"%10.2f", sdWrite[1]); > fprintf(stdout,"%10.5f ", writeTimeSum/(double)(test->repetitions)); > fprintf(stdout," %d %d %d %d %d %d %d %d %d %d %d %lld %d",test->numTasks,test->tasksPerNode,test->repetitions,test->filePerProc,test->reorderTasks,test->taskPerNodeOffset,test->reorderTasksRandom,test->reorderTasksRandomSeed,test->segmentCount,test->blockSize,test->transferSize,test->aggFileSizeForBW[0],test->TestNum); > fprintf(stdout," EXCEL\n"); > } > if (maxRead[0] > 0.) > { 1672,1675c1730,1741 < fprintf(stdout,"%10.2f ", maxRead/MEBIBYTE); < fprintf(stdout,"%10.2f ", minRead/MEBIBYTE); < fprintf(stdout,"%10.2f", meanRead/MEBIBYTE); < fprintf(stdout,"%10.2f\n", sdRead/MEBIBYTE); --- > fprintf(stdout,"%10.2f ", maxRead[0]/MEBIBYTE); > fprintf(stdout,"%10.2f ", minRead[0]/MEBIBYTE); > fprintf(stdout,"%10.2f", meanRead[0]/MEBIBYTE); > fprintf(stdout,"%10.2f ", sdRead[0]/MEBIBYTE); > fprintf(stdout,"%10.2f ", maxRead[1]); > fprintf(stdout,"%10.2f ", minRead[1]); > fprintf(stdout,"%10.2f", meanRead[1]); > fprintf(stdout,"%10.2f", sdRead[1]); > fprintf(stdout,"%10.5f ", readTimeSum/(double)(test->repetitions)); > fprintf(stdout," %d %d %d %d %d %d %d %d %d %d %d %lld %d",test->numTasks,test->tasksPerNode,test->repetitions,test->filePerProc,test->reorderTasks,test->taskPerNodeOffset,test->reorderTasksRandom,test->reorderTasksRandomSeed,test->segmentCount,test->blockSize,test->transferSize,test->aggFileSizeForBW[0],test->TestNum); > fprintf(stdout," EXCEL\n"); > } 1677c1743 < } --- > } 1683c1749 < maxWrite/MEBIBYTE, maxWrite/MEGABYTE); --- > maxWrite[0]/MEBIBYTE, maxWrite[0]/MEGABYTE); 1687c1753 < maxRead/MEBIBYTE, maxRead/MEGABYTE); --- > maxRead[0]/MEBIBYTE, maxRead[0]/MEGABYTE); 1754,1757c1820,1825 < test->writeVal = (double *)malloc(test->repetitions * sizeof(double)); < if (test->writeVal == NULL) ERR("out of memory"); < test->readVal = (double *)malloc(test->repetitions * sizeof(double)); < if (test->readVal == NULL) ERR("out of memory"); --- > 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"); 1759c1827,1828 < test->writeVal[rep] = test->readVal[rep] = 0.0; --- > test->writeVal[i][rep] = test->readVal[i][rep] = 0.0; > } 1952c2021,2066 < rankOffset = (1*test->tasksPerNode) % test->numTasks; --- > rankOffset = (test->taskPerNodeOffset*test->tasksPerNode) % test->numTasks; > } > if (test->reorderTasksRandom) > { > /* swh hack for random process reading */ > /* this should not intefere with randomOffset within a file because GetOffsetArrayRandom */ > /* seeds every random() call */ > /* double anytime; */ > /* unsigned int iseed0; */ > /* anytime = MPI_Wtime(); */ > /* iseed0 = (unsigned int)(anytime - (int)anytime); */ > int *rankoffs, *filecont, *filehits, ifile, jfile, nodeoffset; > unsigned int iseed0; > nodeoffset = test->taskPerNodeOffset; > nodeoffset = (nodeoffset < test->nodes) ? nodeoffset : test->nodes-1; > iseed0 = (test->reorderTasksRandomSeed < 0) ? (-1*test->reorderTasksRandomSeed+rep):test->reorderTasksRandomSeed; > srand(rank+iseed0); > { rankOffset = rand() % test->numTasks; } > while (rankOffset < (nodeoffset*test->tasksPerNode)) { rankOffset = rand() % test->numTasks; } > if (rank == 0) > { > rankoffs = (int *)malloc(test->numTasks*sizeof(int)); > filecont = (int *)malloc(test->numTasks*sizeof(int)); > filehits = (int *)malloc(test->numTasks*sizeof(int)); > } > MPI_CHECK(MPI_Gather(&rankOffset,1,MPI_INT,rankoffs,1,MPI_INT,0,MPI_COMM_WORLD), "MPI_Gather error"); > if (rank == 0) > { > memset((void*)filecont,0,test->numTasks*sizeof(int)); > for (ifile=0; ifilenumTasks; ifile++) { filecont[(ifile+rankoffs[ifile])%test->numTasks]++; } > memset((void*)filehits,0,test->numTasks*sizeof(int)); > for (ifile=0; ifilenumTasks; ifile++) > for (jfile=0; jfilenumTasks; jfile++) { if (ifile == filecont[jfile]) filehits[ifile]++; } > /* fprintf(stdout, "File Contention Dist:"); > for (ifile=0; ifilenumTasks; ifile++) { fprintf(stdout," %d",filecont[ifile]); } > fprintf(stdout,"\n"); */ > fprintf(stdout, "#File Hits Dist:"); > jfile = 0; ifile = 0; > while (jfilenumTasks && > ifilenumTasks) { fprintf(stdout," %d",filehits[ifile]);jfile+=filehits[ifile],ifile++;} > fprintf(stdout," XXCEL\n"); > free(rankoffs); > free(filecont); > free(filehits); > } > 1963a2078,2080 > if (rank == 0 && verbose >= VERBOSE_1) { > fprintf(stdout, "[RANK %03d] open for reading file %s XXCEL\n", rank,testFileName); > } 1993c2110 < } --- > } /* end readFile test */ 2060,2061c2177,2181 < free(test->writeVal); < free(test->readVal); --- > for (i = 0; i < 2; i++) > { > free(test->writeVal[i]); > free(test->readVal[i]); > } diff -r IOR-2.10.1/src/C/Makefile IOR-2.10.1.ornl.13/src/C/Makefile 31c31 < SRCS = IOR.c utilities.c parse_options.c --- > SRCS = IOR.c utilities.c parse_options.c cabmap.c 51a52,55 > some: $(OBJS) aiori-POSIX.o aiori-MPIIO.o aiori-noHDF5.o aiori-noNCMPI.o > $(CC) -o IOR $(OBJS) \ > aiori-POSIX.o aiori-MPIIO.o aiori-noHDF5.o aiori-noNCMPI.o > diff -r IOR-2.10.1/src/C/aiori-POSIX.c IOR-2.10.1.ornl.13/src/C/aiori-POSIX.c 320c320,322 < if (unlink(testFileName) != 0) WARN("cannot delete file"); --- > char errmsg[256]; > sprintf(errmsg,"[RANK %03d]:cannot delete file %s\n",rank,testFileName); > if (unlink(testFileName) != 0) WARN(errmsg); diff -r IOR-2.10.1/src/C/aiori.h IOR-2.10.1.ornl.13/src/C/aiori.h 76a77 > int TestNum; /* test reference number */ 91,92c92,93 < double * writeVal; /* array to write results */ < double * readVal; /* array to read results */ --- > double * writeVal[2]; /* array to write results */ > double * readVal[2]; /* array to read results */ 97a99,101 > int taskPerNodeOffset; /* task node offset for reading files */ > int reorderTasksRandom; /* reorder tasks for random file read back */ > int reorderTasksRandomSeed; /* reorder tasks for random file read seed */ Only in IOR-2.10.1.ornl.13/src/C: cabmap.c diff -r IOR-2.10.1/src/C/defaults.h IOR-2.10.1.ornl.13/src/C/defaults.h 41a42 > -1, /* test reference number */ 56,57c57,58 < NULL, /* write results array */ < NULL, /* read results array */ --- > NULL, NULL, /* write results array */ > NULL, NULL, /* read results array */ 62a64,66 > 1, /* task file offset for read */ > FALSE, /* reorder tasks random */ > 0, /* reorder tasks random seed offset value*/ diff -r IOR-2.10.1/src/C/parse_options.c IOR-2.10.1.ornl.13/src/C/parse_options.c 73a74,75 > } else if (strcasecmp(option, "testnum") == 0) { > test->TestNum = atoi(value); 101a104,109 > } else if (strcasecmp(option, "taskpernodeoffset") == 0) { > test->reorderTasks = atoi(value); > } else if (strcasecmp(option, "reordertasksrandom") == 0) { > test->reorderTasksRandom = atoi(value); > } else if (strcasecmp(option, "reordertasksrandomseed") == 0) { > test->reorderTasksRandomSeed = atoi(value); 330c338 < = "a:b:BcCd:D:eEf:FgG:hHi:j:J:IkKlmnN:o:O:pPqrRs:St:T:uU:vVwWxz"; --- > = "A:a:b:BcCQ:ZX:d:D:eEf:FgG:hHi:j:J:IkKlmnN:o:O:pPqrRs:St:T:uU:vVwWxz"; 343a352 > case 'A': initialTestParams.TestNum = atoi(optarg); break; 349a359,363 > case 'Q': initialTestParams.taskPerNodeOffset = > atoi(optarg); break; > case 'Z': initialTestParams.reorderTasksRandom = TRUE; break; > case 'X': initialTestParams.reorderTasksRandomSeed = > atoi(optarg); break; 394c408 < default: fprintf (stdout, "unknown option `-%c'.\n", optopt); --- > default: fprintf (stdout, "ParseCommandLine: unknown option `-%c'.\n", optopt); Only in IOR-2.10.1.ornl.13: tests