From GridLAB-D Wiki
Jump to: navigation, search

GridLAB-D has a performance profiler built into the core that allows users to generate an analysis of the simulation performance. Additional measurements on class and module performance are collected to perform module/class performance analysis. The performance analysis is based on the quantitative measurements collected while the simulation is running. These measurements are then used to estimate the overall performance metrics for both the core and the modules.

Core profiles

The key measurements of the core performance analysis shown in Table 1 and the performance metrics are shown in Table 2.

Table 1 - Core performance measurements
<math>N_{objects}</math> The total number of objects in the model.
<math>N_{threads}</math> The maximum number of concurrent threads used by the simulation.
<math>T_{total}</math> The total elapsed wall-clock time of the simulation.
<math>T_{sync}</math> The total wall-clock time spent in object synchronization. This the cumulative sum of the time spent in each objects' synchronization functions
<math>T_{sim}</math> The total elapsed simulation time of the model. This is the simulation stop time minus the simulation start time.
<math>N_{sync}</math> The total number of sync passes completed. The sync count is incremented whenever an object synchronization is requested.
<math>N_{step}</math> The total number of timesteps completed. The step count is incremented each time the clock advances.
<math>N_{lock}</math> The total number of locks requested. The lock count is incremented each time a lock is requested.
<math>N_{spin}</math> The total number of lock spins completed. The lock spin is incremented each time a lock is requested but denied.
Table 2 - Core performance metrics
Total objects <math>N_{objects}</math>
Parallelism <math>N_{threads}</math>
Total time <math>T_{total}</math>
  Core time <math>T_{total} - T_{sync}</math>
  Model time <math>T_{sync}</math>
Simulation time <math>T_{sim}</math>
Simulation speed <math>T_{sim} \times N_{objects} / T_{total}</math>
Syncs completed <math>N_{sync}</math>
Time steps completed <math>N_{step}</math>
Convergence efficiency <math>N_{sync}/N_{step}</math>
Memory lock contention <math>N_{lock}/N_{spin}</math>
Average timestep <math>T_{sim} / N_{sync}</math>
Simulation rate <math>T_{sim} / T_{total}</math>

Module/class profiles

The class profiles are much simpler than core profiles because they only present the amount of time spent overall in each class, the fraction of the total time spend in the class, and the time spend in the class per instance of the class.