Difference between revisions of "Modifying Programs for Use with PetaKit"
Jump to navigation
Jump to search
(→printStats()) |
|||
Line 21: | 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 | + | 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 | iTIMESTEPS, (long long int) num_timesteps | ||
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**#~~~!