Chain-Load: define data structure for graph statistics

The graph will be used to generate a computational load
for testing the Scheduler; thus we need to compute some
statistical indicators to characterise this load.

As starting point sum counts and averages will be aggregated,
accounting for particular characterisation of nodes per level.
This commit is contained in:
Fischlurch 2023-11-28 02:18:38 +01:00
parent a780d696e5
commit d968da989e
2 changed files with 290 additions and 7 deletions

View file

@ -98,18 +98,20 @@
#include <boost/functional/hash.hpp>
#include <functional>
#include <utility>
//#include <string>
#include <string>
//#include <deque>
#include <vector>
#include <memory>
#include <string>
#include <array>
#include <map>
namespace vault{
namespace gear {
namespace test {
// using std::string;
using std::string;
// using std::function;
// using lib::time::TimeValue;
// using lib::time::Time;
@ -138,6 +140,8 @@ namespace test {
const size_t DEFAULT_SIZ = 256;
}
struct Statistic;
@ -631,5 +635,112 @@ namespace test {
const string STAT_SEED{"seed"}; ///< seed node
const string STAT_EXIT{"exit"}; ///< exit node
const string STAT_INNR{"innr"}; ///< inner node
const string STAT_FORK{"fork"}; ///< forking node
const string STAT_JOIN{"join"}; ///< joining node
const string STAT_LINK{"link"}; ///< 1:1 linking node
const string STAT_KNOT{"knot"}; ///< knot (joins and forks)
const std::array KEYS = {STAT_SEED,STAT_EXIT,STAT_INNR,STAT_FORK,STAT_JOIN,STAT_LINK,STAT_KNOT};
const uint CAT = KEYS.size();
using VecU = std::vector<uint>;
using LevelSums = std::array<uint, CAT>;
/**
* Distribution indicators for one kind of evaluation.
* Evaluations over the kind of node are collected per (time)level.
* This data is then counted, averaged and weighted.
*/
struct Indicator
{
VecU data{};
uint cnt{0}; ///< global sum over all levels
double frac{0}; ///< fraction of all nodes
double pL{0}; ///< average per level
double pLW{0}; ///< average per level and level-width
double cL{0}; ///< weight centre level for this indicator
double cLW{0}; ///< weight centre level width-reduced
void
addPoint (uint level, uint width, uint items)
{
REQUIRE (level == data.size());
data.push_back (items);
cnt += items;
pL += items;
pLW += items / double(width);
cL += level * items;
cLW += level * items/double(width);
}
void
closeAverages (uint nodes)
{
uint levels = data.size();
REQUIRE (levels > 0);
frac = cnt / double(nodes);
cL /= pL; // weighted averages: normalise to weight sum
cLW /= pLW;
pL /= levels; // simple averages : normalise to number of levels
pLW /= levels;
}
};
/**
* Statistic data calculated for a given chain-load topology
*/
struct Staticstic
{
uint nodes{0};
uint levels{0};
VecU width{};
std::map<const string, Indicator> indicators;
explicit
Staticstic (uint lvls)
: nodes{0}
, levels{lvls}
{
reserve (levels);
}
void
addPoint (uint levelWidth, LevelSums& particulars)
{
levels += 1;
nodes += levelWidth;
width.push_back (levelWidth);
ASSERT (levels == width.size());
for (uint i=0; i< CAT; ++i)
indicators[KEYS[i]].addPoint (levels, levelWidth, particulars[i]);
}
void
closeAverages()
{
for (auto& KEY : KEYS)
indicators[KEY].closeAverages (nodes);
}
private:
void
reserve (uint levels)
{
width.reserve (levels);
for (auto& KEY : KEYS)
{
indicators[KEY] = Indicator{};
indicators[KEY].data.reserve(levels);
}
}
};
}}} // namespace vault::gear::test
#endif /*VAULT_GEAR_TEST_TEST_CHAIN_LOAD_H*/

View file

@ -96265,9 +96265,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1701013445667" ID="ID_478612436" MODIFIED="1701013452515" TEXT="RandomDraw-Parameter eingef&#xfc;hrt">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701013458796" ID="ID_382069196" MODIFIED="1701014006906" TEXT="Umbau Erzeugung Start-Node">
<arrowlink COLOR="#676075" DESTINATION="ID_1577021137" ENDARROW="Default" ENDINCLINATION="294;-251;" ID="Arrow_ID_342682284" STARTARROW="None" STARTINCLINATION="476;43;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1701013458796" ID="ID_382069196" MODIFIED="1701122403206" TEXT="Umbau Erzeugung Start-Node">
<arrowlink COLOR="#606b75" DESTINATION="ID_1577021137" ENDARROW="Default" ENDINCLINATION="294;-251;" ID="Arrow_ID_342682284" STARTARROW="None" STARTINCLINATION="476;43;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700163498328" ID="ID_14989689" MODIFIED="1700163505288" TEXT="CtrlRules + Infrastruktur">
@ -98712,7 +98712,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1701013295279" ID="ID_1577021137" MODIFIED="1701028436821" TEXT="verhindern da&#xdf; die Generierung steckenbleibt">
<linktarget COLOR="#676075" DESTINATION="ID_1577021137" ENDARROW="Default" ENDINCLINATION="294;-251;" ID="Arrow_ID_342682284" SOURCE="ID_382069196" STARTARROW="None" STARTINCLINATION="476;43;"/>
<linktarget COLOR="#606b75" DESTINATION="ID_1577021137" ENDARROW="Default" ENDINCLINATION="294;-251;" ID="Arrow_ID_342682284" SOURCE="ID_382069196" STARTARROW="None" STARTINCLINATION="476;43;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701013320019" ID="ID_1117191097" MODIFIED="1701013347739" TEXT="bisher wird nur die initiale Start-Node explizit erzeugt"/>
<node CREATED="1701013349488" ID="ID_1770244833" MODIFIED="1701013370227" TEXT="durch Pruning k&#xf6;nnten alle Vorg&#xe4;nger verschwinden; die Schleife dreht dann leer">
@ -99412,7 +99412,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701016789541" ID="ID_677587050" MODIFIED="1701016798574" TEXT="Berechnung">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1701016800527" ID="ID_465492261" MODIFIED="1701016850415" TEXT="auf Erweiterbarkeit abzielen">
<node CREATED="1701016800527" ID="ID_465492261" MODIFIED="1701125333044" TEXT="auf Erweiterbarkeit abzielen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -99421,10 +99421,182 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701125376983" ID="ID_1738324890" MODIFIED="1701125382060" TEXT="Daten-Record">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1701125441964" ID="ID_418000988" MODIFIED="1701125470010" TEXT="feste Datenfelder als uint und double"/>
<node CREATED="1701125474136" ID="ID_774880220" MODIFIED="1701125477483" TEXT="Benennungs-Schema">
<node CREATED="1701126033651" ID="ID_1862774018" MODIFIED="1701126080812" TEXT="forks[lev]">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Vector mit Z&#228;hldaten indiziert nach Level
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701125550995" ID="ID_1031639785" MODIFIED="1701126098550" TEXT="forks_cnt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Gesamt-Anzahl der Forks
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701125560924" ID="ID_669092405" MODIFIED="1701126154803" TEXT="forks_pL">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Forks per Level &#8709;
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701125579683" ID="ID_1639658129" MODIFIED="1701126169319" TEXT="forks_pLW">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Forks per Level-Width &#8709;
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701125941621" ID="ID_402557156" MODIFIED="1701126253934" TEXT="forks_cL">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Forks Level-&#947;-Schwerpunkt (centre)
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701125948023" ID="ID_5366972" MODIFIED="1701126246633" TEXT="forks_cLW">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Forks Level-Width-&#947; -Schwerpunkt (centre)
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701126282617" ID="ID_283726913" MODIFIED="1701126375947" TEXT="forks_pL_trend">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
lineare Regression der forks_pL &#252;ber den Level
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701126387036" ID="ID_691366138" MODIFIED="1701126595772" TEXT="forks_ma">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
forks moving average &#252;ber den Level
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701126601654" ID="ID_1465309970" MODIFIED="1701126630322" TEXT="forks_pW_ma">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
forks per width moving average (&#252;ber den Level)
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1701127574637" ID="ID_923332375" MODIFIED="1701127579225" TEXT="Struktur">
<node CREATED="1701127580038" ID="ID_856358485" MODIFIED="1701127646988" TEXT="globals">
<node CREATED="1701127588184" ID="ID_1819109646" MODIFIED="1701127599814" TEXT="Node-Z&#xe4;hler"/>
<node CREATED="1701127600974" ID="ID_173189022" MODIFIED="1701127612041" TEXT="Vector der Level-Breiten"/>
</node>
<node CREATED="1701127623579" ID="ID_300642202" MODIFIED="1701127644053" TEXT="indicators">
<node CREATED="1701127648856" ID="ID_1223520264" MODIFIED="1701127657990" TEXT="die Map mit den Kennzahl-Subobjekten"/>
<node CREATED="1701128902290" ID="ID_380186539" MODIFIED="1701128917823" TEXT="String-Keys als Konstanten im Header"/>
</node>
</node>
</node>
<node CREATED="1701126784469" ID="ID_1887920945" MODIFIED="1701126788192" TEXT="Rechenweg">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701126789108" ID="ID_1733334637" MODIFIED="1701126799986" TEXT="das wird verdammt repetitiv">
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1701126885253" ID="ID_988227984" MODIFIED="1701126891770" TEXT="Sub-Objekte einf&#xfc;hren">
<icon BUILTIN="yes"/>
<node CREATED="1701126896342" ID="ID_628957116" MODIFIED="1701126910351" TEXT="da der Rechenweg stets gleich ist"/>
<node COLOR="#435e98" CREATED="1701126911196" ID="ID_609498555" MODIFIED="1701127120136" TEXT="Frage: Ablage und Zugriff?">
<icon BUILTIN="help"/>
<node CREATED="1701126927102" ID="ID_1692039562" MODIFIED="1701127026960" TEXT="Map mit String-Key"/>
<node CREATED="1701127027572" ID="ID_554934189" MODIFIED="1701127035511" TEXT="Vector mit ENUM-index"/>
<node CREATED="1701127055028" ID="ID_544320843" MODIFIED="1701127068922" TEXT="Sub-Objekte mit member-ptr"/>
<node CREATED="1701127099690" ID="ID_1150088226" MODIFIED="1701127117708" TEXT="ist im Grunde egal &#x27f9; Map mit String-Key">
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1701127237104" ID="ID_627445638" MODIFIED="1701127280398" TEXT="Sub-Objekt...">
<node CREATED="1701127280727" ID="ID_211987609" MODIFIED="1701127280727" TEXT="enth&#xe4;lt einen data-Vector"/>
<node CREATED="1701127286949" ID="ID_113578279" MODIFIED="1701127312993" TEXT="ggfs sp&#xe4;ter weitere Tabellen (MA, lokaler Trend)"/>
<node CREATED="1701127339746" ID="ID_552079211" MODIFIED="1701127349436" TEXT="sowie feste Datenfelder f&#xfc;r die Kennzahlen"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701127401298" ID="ID_1356798063" MODIFIED="1701127564540" TEXT="Berechnung-1">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1701127405705" ID="ID_1717640247" MODIFIED="1701127444776" TEXT="ein Datenpunkt + Breite"/>
<node CREATED="1701127445812" ID="ID_1308319193" MODIFIED="1701127519477" TEXT="legt Daten ab und akkumuliert Integrale"/>
<node CREATED="1701127520281" ID="ID_327297411" MODIFIED="1701127537417" TEXT="Abschlu&#xdf;: Gesamtzahl &#x27fc; &#x2205;"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1701127540653" ID="ID_838754026" MODIFIED="1701127562922" TEXT="Berechnung-2">
<icon BUILTIN="hourglass"/>
<node CREATED="1701127545038" ID="ID_1659639199" MODIFIED="1701127560980" TEXT="(abgeleitete Berechungen h&#xf6;herer Ordnung)">
<font NAME="SansSerif" SIZE="11"/>
</node>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701016792372" ID="ID_1251453714" MODIFIED="1701016798575" TEXT="Darstellung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701125319870" ID="ID_1457245227" MODIFIED="1701125329516" TEXT="Statistik-Report bereitstellen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>