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

Port of @@SolverMVA/mvaDispatch.m: one inner solve, choosing the analyzer that fits the model. More...

#include <algorithm>
#include <cmath>
#include <limits>
#include <memory>
#include <string>
#include <vector>
#include "line/api/qsys/qsys_gg1.h"
#include "line/api/qsys/qsys_ggnm_diffusion.h"
#include "line/api/qsys/qsys_gig1_bnds_extremal.h"
#include "line/api/qsys/qsys_gig1_approx_allencunneen.h"
#include "line/api/qsys/qsys_gig1_approx_gelenbe.h"
#include "line/api/qsys/qsys_gig1_approx_heyman.h"
#include "line/api/qsys/qsys_gig1_approx_kimura.h"
#include "line/api/qsys/qsys_gig1_approx_klb.h"
#include "line/api/qsys/qsys_gig1_approx_kobayashi.h"
#include "line/api/qsys/qsys_gig1_approx_marchal.h"
#include "line/api/qsys/qsys_gig1_rq.h"
#include "line/api/qsys/qsys_gig1_ubnd_kingman.h"
#include "line/api/qsys/qsys_gigk_approx.h"
#include "line/api/qsys/qsys_gigk_approx_kingman.h"
#include "line/api/qsys/qsys_gigk_approx_whitt.h"
#include "line/api/qsys/qsys_gigk_rqt.h"
#include "line/api/qsys/qsys_gigk_rqt_gamma.h"
#include "line/api/qsys/qsys_gm1.h"
#include "line/api/qsys/qsys_mg1.h"
#include "line/api/qsys/qsys_mg1k_loss_mgs.h"
#include "line/api/qsys/qsys_mgisrgi_whitt.h"
#include "line/api/qsys/qsys_mmk_qed.h"
#include "line/api/qsys/qsys_mg1_fb.h"
#include "line/api/qsys/qsys_mg1_lrpt.h"
#include "line/api/qsys/qsys_mg1_prio.h"
#include "line/api/qsys/qsys_mg1_psjf.h"
#include "line/api/qsys/qsys_mg1_setf.h"
#include "line/api/qsys/qsys_mg1_srpt.h"
#include "line/api/qsys/qsys_mm1.h"
#include "line/api/qsys/qsys_mm1_dps.h"
#include "line/api/qsys/qsys_mmk.h"
#include "line/api/qsys/qsys_phm1.h"
#include "line/api/mam/map_count_idc.h"
#include "line/api/pfqn/pfqn_marie.h"
#include "line/lang/distribution.h"
#include "line/util/rootfind.h"
#include "line/lang/qn/network_struct.h"
#include "line/solvers/cache_metrics.h"
#include "line/solvers/mva/solver_mva.h"
#include "line/solvers/mva/solver_mva_cache.h"
#include "line/solvers/mva/solver_mva_oi.h"
#include "line/solvers/mva/solver_mva_cacheqn.h"
#include "line/solvers/mva/solver_mva_cacheqn_retrieval.h"
#include "line/solvers/mva/solver_mva_polling.h"
#include "line/solvers/mva/solver_mva_retrieval.h"
#include "line/solvers/mva/solver_mva_sjn.h"
#include "line/solvers/mva/solver_mvac.h"
#include "line/solvers/mva/solver_qna.h"
#include "line/solvers/mva/solver_rqna.h"
#include "line/solvers/mva/solver_rqt.h"
#include "line/solvers/mva/solver_mapqn.h"
#include "line/api/sn/sn_has_bursty_arrival.h"
#include "line/api/sn/sn_patience_handles.h"
Include dependency graph for mva_dispatch.h:

Go to the source code of this file.

Classes

struct  line::mva::DispatchResult< T >
 What the dispatch returns: the metrics plus the algorithm that produced them. More...

Namespaces

namespace  line
namespace  line::mva

Functions

template<class T>
DispatchResult< T > line::mva::solver_mva_qsys_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt)
 Port of solver_mva_qsys_analyzer.m: the closed forms for a single-class open Source-Queue-Sink model.
template<class T>
DispatchResult< T > line::mva::solver_mva_qsys_prio_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt)
 Port of solver_mva_qsys_prio_analyzer.m: the exact Cobham formula for a single open M/G/1 queue with non-preemptive priorities.
template<class T>
DispatchResult< T > line::mva::solver_mva_dps_exact (const qn::NetworkStruct< T > &L, const MvaOptions &opt)
 The exact multiclass M/M/1-DPS solve the reference inlines in mvaDispatch: the truncated multiclass chain of qsys_mm1_dps, which the AMVA cross-term correction cannot reproduce (it violates the equal-rate conservation law).
template<class T>
DispatchResult< T > line::mva::solver_mvald_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt, const Matrix< T > &init_sol)
 Port of solver_mvald_analyzer.m: the load-dependent branch.
template<class T>
DispatchResult< T > line::mva::solver_mva_qsys_sizebased_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt)
 Port of solver_mva_qsys_sizebased_analyzer.m: the M/G/1 formulas for the size-based disciplines (Wierman and Harchol-Balter, SIGMETRICS 2003).
template<class T>
DispatchResult< T > line::mva::solver_mva_marie_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt)
 Port of solver_mva_marie_analyzer.m: Marie's iterative aggregation-decomposition for a CLOSED network with non-exponential FCFS service.
template<class T>
DispatchResult< T > line::mva::mva_dispatch (const qn::NetworkStruct< T > &L, const MvaOptions &opt, const Matrix< T > &init_sol)
 The ladder itself.

Detailed Description

Port of @@SolverMVA/mvaDispatch.m: one inner solve, choosing the analyzer that fits the model.

THE ORDER IS THE CONTRACT. The branches are NOT disjoint – a single-class open Source-Queue-Sink model with a size-based discipline satisfies two of them, a cache model with load dependence satisfies two more – so the first match wins and reordering silently changes which algorithm a model gets. The sequence below is the reference's, top to bottom:

0 closed models with a shortest-job-next station <- ported 1 order-independent / pass-and-swap stations 2 delayed-hit retrieval caches, open then closed 3 size-based scheduling in an open Source-Queue-Sink model 4 single-class open Source-Queue-Sink <- ported 5 multiclass open polling 6 multiclass open HOL priority <- ported 7 multiclass open DPS, at most three classes <- ported 8 non-reentrant cache (Source-Cache-Sink) 9 integrated caching-queueing 10 bound methods (moved to SolverBA in the reference) 11 Marie's aggregation-decomposition 12 load- or class-dependent scaling <- ported 13 everything else <- solver_mva_analyzer, of whose method switch 'mvac' is dispatched here (solver_mvac.h)

WHAT IS NOT PORTED IS REFUSED BY NAME, never allowed to fall through to the generic analyzer. A cache model solved as an ordinary queueing network returns numbers – they are simply not the model's – and the same holds for a polling system and for an OI station, whose rate function the AMVA cannot represent at all.

Definition in file mva_dispatch.h.