Performance Monitoring in PGENESIS

In PGENESIS 2.0 we provide a rudimentary performance monitoring capability, which users can easily enable by including a couple of accounting commands in their scripts. The monitoring package tracks the amount of time spent in these operations:

- PGENESIS_PROCESS_SNDREC_SND - the time spent sending data to other nodes
- PGENESIS_PROCESS_SNDREC_REC - the time spent receiving data from other nodes
- PGENESIS_PROCESS_SNDREC_GETFIELD - the time spent gathering local data for transmission to other nodes
- PGENESIS_PROCESS_SNDREC - the time spent in sending and receiving data not accounted for by the three preceding categories
- PGENESIS_PROCESS_SYNC - the time spent explicitly synchronizing nodes prior to each step
- PGENESIS_PROCESS - the time spent in parallel overhead of exchanging data with other nodes which is not accounted for by the preceding categories
- PGENESIS_EVENT - the time spent handling incoming events i.e., spikes
- PGENESIS - the time spent in PGENESIS not accounted for by the precding overhead categories. In other words the time spent doing useful work. [NB, this category currently includes time spent executing remote commands, including establishing remote messages, as well as all other work associated with constructing the model]

A script turns on this accounting with

> setfield /post perfmon 1

and turns it off with

> setfield /post perfmon 0

Whenever performance monitoring is active, the categories listed above accumulate time. So, to ignore the time involved in construction of a model, do not activate performance monitoring until just prior to the first simulation step.

The accumulated time values can be dumped to file with the command

> perfstats

This writes a file to /tmp (usually a local disk) called pgenesis.ppp.nnn.acct where ppp is the process id and nnn is the node number. Each time perfstats is called it dumps the accumulated values, but it does not reset the accumulation bins.
Advanced users can extend and customize this accounting by modifying the source C code of GENESIS, PGENESIS, and/or any custom user libraries. See src/par/acct.h, src/par/libacct.c, and the Acct() calls in src/par/post.c and src/par/par_msg.c.