|
MADNESS 0.10.1
|
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 |
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.
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().
|
inline |
| double madness::ExchTaskProfile::apply_wall = 0.0 |
| long madness::ExchTaskProfile::col_begin = 0 |
| long madness::ExchTaskProfile::col_end = 0 |
| double madness::ExchTaskProfile::compute_cpu = 0.0 |
| double madness::ExchTaskProfile::compute_wall = 0.0 |
| long madness::ExchTaskProfile::k = 0 |
| 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().
| double madness::ExchTaskProfile::mul2_wall = 0.0 |
| int madness::ExchTaskProfile::operand_source = -1 |
worst of its fetches: 0 resident, 1 ahead, 2 cold
Referenced by observe_fetch_tier().
| double madness::ExchTaskProfile::peak_rss_gb = 0.0 |
| long madness::ExchTaskProfile::row_begin = 0 |
| long madness::ExchTaskProfile::row_end = 0 |
| int madness::ExchTaskProfile::subworld_nrank = 0 |
| long madness::ExchTaskProfile::task_id = -1 |
| double madness::ExchTaskProfile::thresh = 0.0 |
which protocol tier this task ran in
Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::operator()().
| double madness::ExchTaskProfile::truncate_wall = 0.0 |
| long madness::ExchTaskProfile::universe_rank = 0 |
keys the output file: one per process
Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::operator()().
| double madness::ExchTaskProfile::wait_for_data_wall = 0.0 |
task entry until its operands are in hand
Referenced by madness::Exchange< T, NDIM >::ExchangeImpl< T, NDIM >::MacroTaskExchangeSimple::operator()().
a cold fetch happened, so this task paid latency
Referenced by observe_fetch_tier().
| double madness::ExchTaskProfile::wall_end = 0.0 |
| double madness::ExchTaskProfile::wall_start = 0.0 |