Performance

XGC outputs timing_#########.* files where ######### is the time step, which are used to analyze the performance. The output frequency is controlled by the input parameters mon_flush_count and mon_flush_freq.

The files timing_#########.txt_stats contain information on the time spent in different sections during execution of the time step. The sections are set by timers in the code:

Fortran

use perf_monitor

call t_startf("REGION_1") !start timer
! execute region 1
call t_stopf("REGION_1") !stop timer

C++

#include "gptl.h"

int ierr; //error code

ierr = GPTLstart("REGION_2"); //start timer
// execute region 2
ierr = GPTLstop("REGION_2"); //stop timer

There is also a TIMER macro that can be used to time a single function:

#include "timer_macro.hpp"

TIMER("MY_FUNCTION", my_func() );

When developing code it is useful to add your own timers to check the performance.