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

Maximum of two independent MAPs, and its marked k-stage generalization. More...

#include <cstddef>
#include <vector>
#include "line/api/mam/map_moment.h"
#include "line/api/mam/mmap_lambda.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/linalg.h"
#include "line/util/matrix.h"
Include dependency graph for map_max.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
Map< T > line::mam::map_max (const Map< T > &A, const Map< T > &B)
 MAP of the maximum of two independent MAPs.
template<class T>
Mmap< T > line::mam::mmap_max (const Mmap< T > &a, const Mmap< T > &b, unsigned k)
 MMAP of the maximum over k synchronization rounds of two independent MMAPs.

Detailed Description

Maximum of two independent MAPs, and its marked k-stage generalization.

Templated port of matlab/lib/kpctoolbox/map/map_max.m and matlab/lib/m3a/m3a/mmap/mmap_max.m. These are the synchronization primitives behind a fork-join: the joined interval is the maximum of the two branch intervals, not their sum, so the phase space carries a RACE followed by the residual of whichever branch is still running.

map_max therefore has order na*nb + na + nb: the product block while both branches are alive, then one absorbing-residual block per branch. Reading the order as na*nb, as for a superposition, drops exactly the residual phases that make the maximum different from the minimum.

mmap_max keeps k rounds of the race, so its order is na*nb*(1+2k), with the marks of both branches carried through unchanged.

Definition in file map_max.h.