Difference between revisions of "Modifying Programs for Use with PetaKit"
Jump to navigation
Jump to search
(→printStats()) |
|||
(9 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
# At the beginning of your main function, type <code> startTimer(); </code> | # At the beginning of your main function, type <code> startTimer(); </code> | ||
#* This starts the timer for accurate wall time | #* This starts the timer for accurate wall time | ||
− | # At the point in your code where all the most important pieces have finished running, place the printStats function, explained in the following section | + | # At the point in your code where all the most important pieces have finished running, place the expression <code> time = stopTimer() </code>. |
+ | # After that, include the printStats function, explained in the following section | ||
==printStats()== | ==printStats()== | ||
− | printStats(program name,threads,style of parallelism,problem size,version number, number of additional variables to be printed ...) | + | printStats(program name,threads,style of parallelism,problem size,version number, time, cputime, number of additional variables to be printed ...) |
− | #The first | + | #The first seven arguments to printStats() are required output that will be expected by the PetaKit data harvester. |
#Next is the count of whatever other values you would like your program to print - most likely for debug purposes. | #Next is the count of whatever other values you would like your program to print - most likely for debug purposes. | ||
#*For each additional printout, specify two arguments: | #*For each additional printout, specify two arguments: | ||
Line 20: | Line 21: | ||
*d: double (stored as long double) | *d: double (stored as long double) | ||
− | The first letter of the label is stripped and read as the variable type, so number of | + | The first letter of the label is stripped and read as the variable type, so something like the number of timesteps would be input as: |
− | + | iTIMESTEPS, (long long int) num_timesteps | |
This prints as | This prints as | ||
− | + | TIMESTEPS : <number of timesteps> | |
Here's an example of a call to printStats in an instance of John Conway's Game of Life written in c. | Here's an example of a call to printStats in an instance of John Conway's Game of Life written in c. | ||
− | printStats("Life",life.size,"mpi",life.ncols * life.nrows, "1.3",0, 3, "iCOLUMNS", (long long int) life.ncols, "iROWS", (long long int)life.nrows, | + | |
− | + | printStats("Life",life.size,"mpi",life.ncols * life.nrows, "1.3", time, 0, 3, "iCOLUMNS", (long long int) life.ncols, "iROWS", | |
+ | (long long int)life.nrows, "iGENERATIONS", (long long int)life.generations); | ||
And the output: | And the output: | ||
<nowiki>!~~~#**BEGIN RESULTS**#~~~!</nowiki> | <nowiki>!~~~#**BEGIN RESULTS**#~~~!</nowiki> | ||
PROGRAM : Life | PROGRAM : Life | ||
− | HOSTNAME : | + | HOSTNAME : Sam's Computer |
THREADS : 1 | THREADS : 1 | ||
ARCH : mpi | ARCH : mpi |
Latest revision as of 10:45, 4 August 2010
Modifying a program for compatibility with PetaKit is quite simple. All you need is your program's source code and access to the PetaKit repository
- Get the pkit.h and pkit.c files from the PetaKit directory of the CVS repository on Hopper and place them with your program's source.
- Include pkit.h in your source, and make sure your makefile makes a .o of pkit.c and pkit.h
- At the beginning of your main function, type
startTimer();
- This starts the timer for accurate wall time
- At the point in your code where all the most important pieces have finished running, place the expression
time = stopTimer()
. - After that, include the printStats function, explained in the following section
printStats()
printStats(program name,threads,style of parallelism,problem size,version number, time, cputime, number of additional variables to be printed ...)
- The first seven arguments to printStats() are required output that will be expected by the PetaKit data harvester.
- Next is the count of whatever other values you would like your program to print - most likely for debug purposes.
- For each additional printout, specify two arguments:
- The label, which includes the type of the variable
- The variable itself.
- For each additional printout, specify two arguments:
Three general classes of variable are supported -
- s: string (stored as char*)
- i: integer (stored as long long int)
- d: double (stored as long double)
The first letter of the label is stripped and read as the variable type, so something like the number of timesteps would be input as:
iTIMESTEPS, (long long int) num_timesteps
This prints as
TIMESTEPS : <number of timesteps>
Here's an example of a call to printStats in an instance of John Conway's Game of Life written in c.
printStats("Life",life.size,"mpi",life.ncols * life.nrows, "1.3", time, 0, 3, "iCOLUMNS", (long long int) life.ncols, "iROWS", (long long int)life.nrows, "iGENERATIONS", (long long int)life.generations);
And the output:
!~~~#**BEGIN RESULTS**#~~~! PROGRAM : Life HOSTNAME : Sam's Computer THREADS : 1 ARCH : mpi PROBLEM_SIZE : 11025 VERSION : 1.3 CPUTIME : 0 TIME : 3.979 COLUMNS : 105 ROWS : 105 GENERATIONS : 1000 !~~~#**END RESULTS**#~~~!