LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
lqn_boxbounds.h File Reference

Majumdar-Woodside robust box bounds on the throughput of a layered network. More...

#include <cstddef>
#include <vector>
#include "line/api/pfqn/pfqn_mwrbb.h"
#include "line/lang/lang_types.h"
#include "line/lang/lqn/lqn_struct.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for lqn_boxbounds.h:

Go to the source code of this file.

Classes

struct  line::lqn::LqnBoxBounds< T >
 What lqn_boxbounds returns, in the layout of the reference's out struct. More...

Namespaces

namespace  line
namespace  line::lqn

Functions

template<class T>
LqnBoxBounds< T > line::lqn::lqn_boxbounds (const LqnStruct< T > &lqn)
 Evaluate the box bounds of lqn.

Detailed Description

Majumdar-Woodside robust box bounds on the throughput of a layered network.

Port of matlab/src/api/lqn/lqn_boxbounds.m. The layered model is collapsed onto its PROCESSOR-CONTENTION model – the stations are the hosts and the classes are the reference-task call chains – and pfqn_mwrbb is evaluated on it. The per-chain demand at a processor is the total host demand executed there during one cycle of the reference task, obtained by walking the entry/activity/call graph and scaling by the mean number of synchronous calls.

WHAT THIS IS AND IS NOT. It generalizes the classical LQN Type-1 throughput bound X <= mult/(Z + D_total) – the no-contention bound lqns -b reports – by adding the processor-utilization upper bound and the Majumdar-Woodside lower bound. It does NOT model a software bottleneck (a task with finitely many threads is not a station here) and it assumes activities execute sequentially, so an OR-branch probability and a loop count are ignored rather than averaged. A bound that ignores a resource is still a valid bound on the model it does describe, which is why this is worth having; it is not a substitute for solving the layers.

NO ITERATION HAPPENS HERE. This is what method = 'mwba.upper' / 'mwba.lower' reports INSTEAD of a fixed point, so a caller asking for it pays one graph walk and one bound evaluation, and gets NaN for every metric the bound does not define (queue lengths, response times, residence times).

Definition in file lqn_boxbounds.h.