Difference between revisions of "Modifying Programs for Use with PetaKit"

From Earlham CS Department
Jump to navigation Jump to search
(printStats())
(printStats())
 
(6 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 five arguments to printStats() are required output that will be expected by the PetaKit data harvester.
+
#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, say number of timesteps would be input as:
+
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
  
 
This prints as
 
This prints as
TIMESTEPS              : <number of timesteps>
+
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,
+
 
"iGENERATIONS", (long long int)life.generations);
+
  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:

Latest revision as of 11: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

  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. At the point in your code where all the most important pieces have finished running, place the expression time = stopTimer() .
  5. 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 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**#~~~!