Modifying Programs for Use with PetaKit

From Earlham CS Department
Revision as of 18:56, 21 May 2010 by Leemasa (talk | contribs)
Jump to navigation Jump to search

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

  1. 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.
  2. Include pkit.h in your source, and make sure your makefile makes a .o of pkit.c and pkit.h
  3. At the beginning of your main function, type startTimer();
    • This starts the timer for accurate wall time
  4. Make a variable to store the time
  5. At the point in your code where all the most important pieces have finished running, place the stopTimer(&time) function.
  6. 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 ...)
  1. The first seven arguments to printStats() are required output that will be expected by the PetaKit data harvester.
  2. 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:
      1. The label, which includes the type of the variable
      2. 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**#~~~!