MADNESS 0.10.1
Public Member Functions | Public Attributes | List of all members
madness::ExchTaskProfile Struct Reference

One task's record for the exchange profiler. More...

#include <exchangeoperator.h>

Public Member Functions

void observe_fetch_tier (const int tier)
 keep the worst source, since that is the one that set the task's wait
 
void reset ()
 

Public Attributes

double apply_wall = 0.0
 
long col_begin = 0
 
long col_end = 0
 
double compute_cpu = 0.0
 
double compute_wall = 0.0
 
bool diagonal = false
 
long k = 0
 
double mul1_wall = 0.0
 
double mul2_wall = 0.0
 
int operand_source = -1
 worst of its fetches: 0 resident, 1 ahead, 2 cold
 
double peak_rss_gb = 0.0
 
long row_begin = 0
 
long row_end = 0
 
unsigned long subworld_id = 0
 
int subworld_nrank = 0
 
long task_id = -1
 
double thresh = 0.0
 which protocol tier this task ran in
 
double truncate_wall = 0.0
 
long universe_rank = 0
 keys the output file: one per process
 
double wait_for_data_wall = 0.0
 task entry until its operands are in hand
 
bool waited = false
 a cold fetch happened, so this task paid latency
 
double wall_end = 0.0
 
double wall_start = 0.0
 

Detailed Description

One task's record for the exchange profiler.

Written only when MAD_EXCH_TASK_PROFILE is set. What it adds over the aggregate counters is attribution: the counters say how many batches arrived from where, this says which task waited and for how long, so a straggler can be identified rather than inferred.

It deliberately does not carry a per-stage breakdown of the compute (multiply / apply / multiply). That would mean timing calls inside the numerical kernels, and the aggregate split already exists in the operator's own timers.

Member Function Documentation

◆ observe_fetch_tier()

void madness::ExchTaskProfile::observe_fetch_tier ( const int  tier)
inline

keep the worst source, since that is the one that set the task's wait

References madness::nonlinear_vector_solver(), operand_source, and waited.

Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::fetch_batch().

◆ reset()

void madness::ExchTaskProfile::reset ( )
inline

Member Data Documentation

◆ apply_wall

double madness::ExchTaskProfile::apply_wall = 0.0

◆ col_begin

long madness::ExchTaskProfile::col_begin = 0

◆ col_end

long madness::ExchTaskProfile::col_end = 0

◆ compute_cpu

double madness::ExchTaskProfile::compute_cpu = 0.0

◆ compute_wall

double madness::ExchTaskProfile::compute_wall = 0.0

◆ diagonal

bool madness::ExchTaskProfile::diagonal = false

◆ k

long madness::ExchTaskProfile::k = 0

◆ mul1_wall

double madness::ExchTaskProfile::mul1_wall = 0.0

wall inside each stage of the tile loop, accumulated over its rows. Honest without adding any fence: every stage below runs with fence=true, so each completes before the next is timed. What they do not cover – building the per-row update vector, the compresses and the accumulating gaxpys – shows up as the emitted other residual.

Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::compute_diagonal_batch_in_symmetric_matrix().

◆ mul2_wall

double madness::ExchTaskProfile::mul2_wall = 0.0

◆ operand_source

int madness::ExchTaskProfile::operand_source = -1

worst of its fetches: 0 resident, 1 ahead, 2 cold

Referenced by observe_fetch_tier().

◆ peak_rss_gb

double madness::ExchTaskProfile::peak_rss_gb = 0.0

◆ row_begin

long madness::ExchTaskProfile::row_begin = 0

◆ row_end

long madness::ExchTaskProfile::row_end = 0

◆ subworld_id

unsigned long madness::ExchTaskProfile::subworld_id = 0

◆ subworld_nrank

int madness::ExchTaskProfile::subworld_nrank = 0

◆ task_id

long madness::ExchTaskProfile::task_id = -1

◆ thresh

double madness::ExchTaskProfile::thresh = 0.0

◆ truncate_wall

double madness::ExchTaskProfile::truncate_wall = 0.0

◆ universe_rank

long madness::ExchTaskProfile::universe_rank = 0

◆ wait_for_data_wall

double madness::ExchTaskProfile::wait_for_data_wall = 0.0

◆ waited

bool madness::ExchTaskProfile::waited = false

a cold fetch happened, so this task paid latency

Referenced by observe_fetch_tier().

◆ wall_end

double madness::ExchTaskProfile::wall_end = 0.0

◆ wall_start

double madness::ExchTaskProfile::wall_start = 0.0

The documentation for this struct was generated from the following file: