Difference between revisions of "Modifying Programs for Use with PetaKit"
Jump to navigation
Jump to search
Line 5: | Line 5: | ||
#* This starts the timer for accurate wall time | #* This starts the timer for accurate wall time | ||
# Make a variable to store the time | # Make a variable to store the time | ||
− | # At the point in your code where all the most important pieces have finished running, place the stopTimer(&time) function. | + | # At the point in your code where all the most important pieces have finished running, place the <code> stopTimer(&time) <\code> function. |
# After that, include the printStats function, explained in the following section | # After that, include the printStats function, explained in the following section | ||
Revision as of 18:56, 21 May 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
- Make a variable to store the time
- At the point in your code where all the most important pieces have finished running, place the
stopTimer(&time) <\code> function.
- 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.
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, say 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**#~~~!