Chain-Load: prepare infrastructure for computational load
Within Chain-Load, the infrastructure to add this crucial feature is minimal: each node gets a `weight` parameter, which is assigned using another RandomDraw-Rule (by default `weight==0`). The actual computation load will be developed as a separate component and tied in from the node calculation job functor.
This commit is contained in:
parent
fe6f2af7bb
commit
fcfdf97853
3 changed files with 166 additions and 11 deletions
|
|
@ -84,6 +84,7 @@ namespace test {
|
|||
showcase_SeedChains();
|
||||
showcase_PruneChains();
|
||||
showcase_StablePattern();
|
||||
verify_computation_load();
|
||||
verify_reseed_recalculate();
|
||||
verify_scheduling_setup();
|
||||
}
|
||||
|
|
@ -129,7 +130,7 @@ SHOW_EXPR(testLoad.getHash())
|
|||
Node n0; // Default-created empty Node
|
||||
CHECK (n0.hash == 0);
|
||||
CHECK (n0.level == 0);
|
||||
CHECK (n0.repeat == 0);
|
||||
CHECK (n0.weight == 0);
|
||||
CHECK (n0.pred.size() == 0 );
|
||||
CHECK (n0.succ.size() == 0 );
|
||||
CHECK (n0.pred == Node::Tab{0});
|
||||
|
|
@ -860,6 +861,20 @@ SHOW_EXPR(testLoad.getHash())
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** @test WIP verify calibration of a configurable computational load.
|
||||
* @todo WIP 12/23 🔁 define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
verify_computation_load()
|
||||
{
|
||||
ComputationalLoad cpuLoad;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test set and propagate seed values and recalculate all node hashes.
|
||||
* @remark This test uses parameter rules with some expansion and a
|
||||
* pruning rule with 60% probability. This setup is known to
|
||||
|
|
@ -878,6 +893,7 @@ SHOW_EXPR(testLoad.getHash())
|
|||
ChainLoad16 graph{32};
|
||||
graph.expansionRule(graph.rule().probability(0.8).maxVal(1))
|
||||
.pruningRule(graph.rule().probability(0.6))
|
||||
.weightRule((graph.rule().probability(0.5)))
|
||||
.buildToplolgy();
|
||||
|
||||
CHECK (8 == graph.allNodes().filter(isStartNode).count());
|
||||
|
|
@ -907,12 +923,16 @@ SHOW_EXPR(testLoad.getHash())
|
|||
auto& [a,b,c,d] = *group;
|
||||
CHECK (isStart(a));
|
||||
CHECK (isInner(b));
|
||||
CHECK (not a->weight);
|
||||
CHECK (not b->weight);
|
||||
if (b->succ.size() == 2)
|
||||
{
|
||||
CHECK (isExit(c));
|
||||
CHECK (isExit(d));
|
||||
CHECK (c->hash == 0xAEDC04CFA2E5B999);
|
||||
CHECK (d->hash == 0xAEDC04CFA2E5B999);
|
||||
CHECK (c->weight == 4);
|
||||
CHECK (d->weight == 4);
|
||||
}
|
||||
else
|
||||
{ // the last chunk is wired differently
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ namespace test {
|
|||
};
|
||||
|
||||
size_t hash;
|
||||
size_t level{0}, repeat{0};
|
||||
size_t level{0}, weight{0};
|
||||
Tab pred{0}, succ{0};
|
||||
|
||||
Node(size_t seed =0)
|
||||
|
|
@ -224,7 +224,7 @@ namespace test {
|
|||
clear()
|
||||
{
|
||||
hash = 0;
|
||||
level = repeat = 0;
|
||||
level = weight = 0;
|
||||
pred.clear();
|
||||
succ.clear();
|
||||
}
|
||||
|
|
@ -296,6 +296,7 @@ namespace test {
|
|||
Rule expansionRule_{};
|
||||
Rule reductionRule_{};
|
||||
Rule pruningRule_ {};
|
||||
Rule weightRule_ {};
|
||||
|
||||
Node* frontNode() { return &nodes_[0]; }
|
||||
Node* afterNode() { return &nodes_[numNodes_]; }
|
||||
|
|
@ -387,6 +388,13 @@ namespace test {
|
|||
return move(*this);
|
||||
}
|
||||
|
||||
TestChainLoad&&
|
||||
weightRule (Rule r)
|
||||
{
|
||||
weightRule_ = move(r);
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
||||
/** Abbreviation for starting rules */
|
||||
static Rule rule() { return Rule(); }
|
||||
|
|
@ -466,6 +474,7 @@ namespace test {
|
|||
Transiently originalReductionRule{reductionRule_};
|
||||
Transiently originalseedingRule {seedingRule_};
|
||||
Transiently originalPruningRule {pruningRule_};
|
||||
Transiently originalWeightRule {weightRule_};
|
||||
|
||||
// prepare building blocks for the topology generation...
|
||||
auto moreNext = [&]{ return next->size() < maxFan; };
|
||||
|
|
@ -495,6 +504,7 @@ namespace test {
|
|||
for (Node* o : *curr)
|
||||
{ // follow-up on all Nodes in current level...
|
||||
o->calculate();
|
||||
o->weight = apply (weightRule_,o);
|
||||
if (apply (pruningRule_,o))
|
||||
continue; // discontinue
|
||||
size_t toSeed = apply (seedingRule_, o);
|
||||
|
|
@ -613,7 +623,9 @@ namespace test {
|
|||
for (Node& n : allNodes())
|
||||
{
|
||||
size_t i = nodeID(n);
|
||||
nodes += node(i).label(toString(i)+": "+showHashLSB(n.hash))
|
||||
string tag{toString(i)+": "+showHashLSB(n.hash)};
|
||||
if (n.weight) tag +="."+toString(n.weight);
|
||||
nodes += node(i).label(tag)
|
||||
.style(i==0 ? BOTTOM
|
||||
:isnil(n.pred)? SEED
|
||||
:isnil(n.succ)? TOP
|
||||
|
|
@ -1054,6 +1066,20 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/* ========= Configurable Computational Load ========= */
|
||||
|
||||
/**
|
||||
* A calibratable CPU load to be invoked from a node job functor.
|
||||
*/
|
||||
class ComputationalLoad
|
||||
{
|
||||
public:
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========= Render Job generation and Scheduling ========= */
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -96754,6 +96754,16 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180165409" ID="ID_168687387" MODIFIED="1702180474436" TEXT="verify_computation_load">
|
||||
<linktarget COLOR="#c26a36" DESTINATION="ID_168687387" ENDARROW="Default" ENDINCLINATION="-214;715;" ID="Arrow_ID_917319622" SOURCE="ID_257805938" STARTARROW="None" STARTINCLINATION="-169;-474;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180170904" ID="ID_1257116598" MODIFIED="1702180207372" TEXT="prüft die konfigurierbare CPU-Last">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180201092" ID="ID_852013156" MODIFIED="1702180207372" TEXT="verifiziert den Eichungs-Prozeß">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701374229504" ID="ID_1338953492" MODIFIED="1701374413822" TEXT="reseed_recalculate">
|
||||
<linktarget COLOR="#51c3bc" DESTINATION="ID_1338953492" ENDARROW="Default" ENDINCLINATION="-572;68;" ID="Arrow_ID_1159113647" SOURCE="ID_193483520" STARTARROW="None" STARTINCLINATION="-272;-345;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -96773,6 +96783,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#68cb83" DESTINATION="ID_1553144523" ENDARROW="Default" ENDINCLINATION="452;16;" ID="Arrow_ID_1386990069" SOURCE="ID_1604229914" STARTARROW="None" STARTINCLINATION="494;25;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702170588580" ID="ID_1963766841" MODIFIED="1702180426043" TEXT="Einbindung des »weight«-Parameters verifizieren">
|
||||
<linktarget COLOR="#68cb83" DESTINATION="ID_1963766841" ENDARROW="Default" ENDINCLINATION="549;30;" ID="Arrow_ID_1920696609" SOURCE="ID_1603893065" STARTARROW="None" STARTINCLINATION="47;-145;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701661921354" ID="ID_1422491771" MODIFIED="1701838435138" TEXT="verify_scheduling_setup">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -99417,8 +99431,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699746891934" ID="ID_1003055056" MODIFIED="1699803875494" TEXT="Node">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699746898954" ID="ID_1174327209" MODIFIED="1699803865847" TEXT="Datenstruktur">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1699746898954" ID="ID_1174327209" MODIFIED="1702180967086" TEXT="Datenstruktur">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1699746902068" ID="ID_1045369485" MODIFIED="1699754419615" TEXT="maxFan ist ein Template-Param">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
|
|
@ -99433,15 +99447,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699803850765" ID="ID_1046832305" MODIFIED="1699813995892" TEXT="weitere Payload">
|
||||
<linktarget COLOR="#16a827" DESTINATION="ID_1046832305" ENDARROW="Default" ENDINCLINATION="72;59;" ID="Arrow_ID_1961863856" SOURCE="ID_944363802" STARTARROW="None" STARTINCLINATION="-128;-105;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1699803850765" ID="ID_1046832305" MODIFIED="1702180966052" TEXT="weitere Payload">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1699803858055" ID="ID_598864815" MODIFIED="1699803859975" TEXT="hash">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1699813952833" ID="ID_1674807101" MODIFIED="1699813955421" TEXT="level">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1699803850765" ID="ID_1466090082" MODIFIED="1702180964375" TEXT="weight">
|
||||
<linktarget COLOR="#16a827" DESTINATION="ID_1466090082" ENDARROW="Default" ENDINCLINATION="77;19;" ID="Arrow_ID_1920139323" SOURCE="ID_944363802" STARTARROW="None" STARTINCLINATION="-128;-105;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1699747423371" ID="ID_1818811688" MODIFIED="1699803681498" TEXT="Berechnung">
|
||||
|
|
@ -99455,10 +99472,102 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699747521150" ID="ID_356376425" MODIFIED="1699747533637" TEXT="kann durch Repetitionen aufwendig gemacht werden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1699813962931" ID="ID_944363802" MODIFIED="1699814010982" TEXT="repetition-Count in der Node speichern">
|
||||
<arrowlink COLOR="#16a827" DESTINATION="ID_1046832305" ENDARROW="Default" ENDINCLINATION="72;59;" ID="Arrow_ID_1961863856" STARTARROW="None" STARTINCLINATION="-128;-105;"/>
|
||||
<node COLOR="#338800" CREATED="1699813962931" ID="ID_944363802" MODIFIED="1702174785856" TEXT="repetition-Count in der Node speichern">
|
||||
<arrowlink COLOR="#16a827" DESTINATION="ID_1466090082" ENDARROW="Default" ENDINCLINATION="77;19;" ID="Arrow_ID_1920139323" STARTARROW="None" STARTINCLINATION="-128;-105;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1702174806912" ID="ID_624958935" MODIFIED="1702174820094" TEXT="eine Art Proof-of-Work verwenden">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1702174822197" ID="ID_242725180" MODIFIED="1702174986754" TEXT="das wäre zwar cool, aber....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
....wir müssen hier niemandem etwas beweisen, über die Grenzen des Unit-Testing hinausgehend:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
der Node-Hash beweist, daß die Berechnung einer Node stattgefunden hat und die richtigen Ergebnisse der Vorläufer aufgegriffen hat
|
||||
</li>
|
||||
<li>
|
||||
ansonsten können wir annehmen, daß eine aufgerufene Funktion auch tatsächlich läuft
|
||||
</li>
|
||||
<li>
|
||||
und daß eine Exception aus dem Job heraus einen Worker herunterfährt und eine Scheduler-Emergency auslöst
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702174987863" ID="ID_496745559" MODIFIED="1702175237022" TEXT="auch sehr praktische Gründe sprechen dagegen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
da die Topologie vom Hash abhängen soll, bekommen wir es hier mit Eierlegenden und Hennen zu tun...
|
||||
</li>
|
||||
<li>
|
||||
außerdem würde dadurch bereits auch die Topologie-Konstruktion aufwendig
|
||||
</li>
|
||||
<li>
|
||||
und jede Änderung der Gewichte würde die Topologie komplett ändern
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
▶ das zuletzt genannte Argument hat den Ausschlag gegeben, auf Proof-of-Work zu verzichten, denn es ist ausgesprochen mühsam, eine bestimmte gewünschte Topologie zu „finden“ — jedwede Änderung wirkt chaotisch (genauso wie bereits die geringste Seed-Änderung eine komplett andere Form zufolge hat)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702175359697" ID="ID_514427629" MODIFIED="1702175909285" TEXT="entwickle eine einfache reine lokale CPU-Last">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1702175912809" ID="ID_163082441" MODIFIED="1702176005420" TEXT="als eigenständige Komponente realisiert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wird dann von dem RandomChainCalcFunctor eingebunden — und <i>nicht </i>von der Node; es wird damit strikt ein Detail des tatsächlichen Scheduler-Laufs
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1702180522766" ID="ID_316625699" MODIFIED="1702180526303" TEXT="ComputationLoad"/>
|
||||
</node>
|
||||
<node CREATED="1702176870348" ID="ID_1843992678" MODIFIED="1702176878242" TEXT="soll statisch kalibrierbar sein">
|
||||
<node CREATED="1702176883018" ID="ID_1063649357" MODIFIED="1702177162816" TEXT="auf 1 LoadUnit ≙ 500ms"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702177164613" ID="ID_1363806337" MODIFIED="1702177174397" TEXT="potentiell schwieriges Thema">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1702177209415" ID="ID_636968719" MODIFIED="1702177221684" TEXT="das Lastverhalten von modernen Computern ist nicht linear"/>
|
||||
<node CREATED="1702177263500" ID="ID_1442486267" MODIFIED="1702177272676" TEXT="der Arbeitspunkt kann extrem stark vom System abhängen"/>
|
||||
<node CREATED="1702177960453" ID="ID_1625146144" MODIFIED="1702177990715" TEXT="der konkrete Aufruf bedingt einen zusätzlichen, schwer kalkulierbaren Overhead"/>
|
||||
</node>
|
||||
<node CREATED="1702177290852" ID="ID_67369431" MODIFIED="1702177302130" TEXT="muß dafür mindestends 3 microbenchmark-Läufe machen">
|
||||
<node CREATED="1702177304850" ID="ID_807191919" MODIFIED="1702177310093" TEXT="eine Grobmessung"/>
|
||||
<node CREATED="1702177310801" ID="ID_1861526014" MODIFIED="1702177325890" TEXT="eine Feinmessung nach erster Kalibrierung"/>
|
||||
<node CREATED="1702177355580" ID="ID_592613013" MODIFIED="1702177360463" TEXT="eine Bestätigungsmessung"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180295927" ID="ID_773261601" MODIFIED="1702180308206" TEXT="Komponente testen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1702170514679" ID="ID_1603893065" MODIFIED="1702180426043" TEXT="Infrastruktur für einen »weight«-Parameter">
|
||||
<arrowlink COLOR="#68cb83" DESTINATION="ID_1963766841" ENDARROW="Default" ENDINCLINATION="549;30;" ID="Arrow_ID_1920696609" STARTARROW="None" STARTINCLINATION="47;-145;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180446234" ID="ID_257805938" MODIFIED="1702180507400" TEXT="Last und Eichung">
|
||||
<arrowlink COLOR="#c26a36" DESTINATION="ID_168687387" ENDARROW="Default" ENDINCLINATION="-214;715;" ID="Arrow_ID_917319622" STARTARROW="None" STARTINCLINATION="-169;-474;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702178041646" ID="ID_1422218309" MODIFIED="1702178058926" TEXT="für den konkreten Test wird dann eine Skalen-Stufe gewählt">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1702178070732" ID="ID_1943958168" MODIFIED="1702178083613" TEXT="per RandomDrawRegel ⟶ Node"/>
|
||||
<node CREATED="1702178084682" ID="ID_1482968846" MODIFIED="1702178112522" TEXT="Skalenfaktor für den ganzen Test"/>
|
||||
<node CREATED="1702178113354" ID="ID_1844351587" MODIFIED="1702178121761" TEXT="der Eichfaktor aus der Kalibrierung"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1699756460900" ID="ID_1877216077" MODIFIED="1699758391567" TEXT="Implementierung per boost-Hash">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue