Chain-Load: design considerations

...develop the idea for building the necessary DAG data structure...
This commit is contained in:
Fischlurch 2023-11-11 23:23:23 +01:00
parent c8f13ca3e6
commit 3ff25c1e9f
3 changed files with 281 additions and 16 deletions

View file

@ -60,21 +60,43 @@ namespace test {
run (Arg)
{
simpleUsage();
verify_Node();
witch_gate();
}
/** @test TODO demonstrate simple usage of the test-load
* @todo WIP 11/23 🔁 define 🔁 implement
*/
void
simpleUsage()
{
UNIMPLEMENTED ("setup of TestChainLoad");
TestChainLoad testLoad;
}
/** @test TODO diagnostic blah
* @todo WIP 11/23 🔁 define implement
*/
void
verify_Node()
{
using Node = TestChainLoad<>::Node;
Node n0;
CHECK (n0.hash == 0);
Node n1{23}, n2{55};
CHECK (n1.hash == 23);
CHECK (n2.hash == 55);
}
/** @test TODO diagnostic blah
* @todo WIP 11/23 🔁 define implement
*/
void
witch_gate()

View file

@ -62,6 +62,9 @@
//#include <utility>
//#include <string>
//#include <deque>
#include <vector>
#include <memory>
#include <array>
namespace vault{
@ -91,19 +94,39 @@ namespace test {
/**
* A Generator for synthetic Render Jobs for Scheduler load testing.
* @tparam maxFan maximal fan-in/out from a node, also limits maximal parallel strands.
* @see TestChainLoad_test
*/
template<size_t numNodes =256, size_t maxFan =16>
class TestChainLoad
: util::NonCopyable
{
public:
TestChainLoad ()
struct Node
: util::MoveOnly
{
size_t hash;
Node(size_t seed =0)
: hash{seed}
{ }
};
private:
using NodeStorage = std::array<Node, numNodes>;
std::unique_ptr<NodeStorage> nodes_;
public:
TestChainLoad()
: nodes_{new NodeStorage}
{ }
private:
};
}}} // namespace vault::gear::test
#endif /*VAULT_GEAR_TEST_TEST_CHAIN_LOAD_H*/

View file

@ -95600,20 +95600,6 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1697740826362" ID="ID_1948434460" MODIFIED="1697740845523" TEXT="eine verifizierbare verzweigte Berechnungs-Last">
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697740857815" ID="ID_1544079509" MODIFIED="1697740865360" TEXT="in separatem Test entwerfen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697741633966" ID="ID_787175245" MODIFIED="1697741674433" TEXT="Nutzen vorher kl&#xe4;ren">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1697741661950" ID="ID_1735458016" MODIFIED="1697741661950" TEXT="Darstellung der Abh&#xe4;ngigkeits-Struktur"/>
<node CREATED="1697741689551" ID="ID_1012140830" MODIFIED="1697741694906" TEXT="Art der Daten&#xfc;bergabe"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697743909120" ID="ID_483537733" MODIFIED="1697743924734" TEXT="#1346 reproducible computational load">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697740877587" ID="ID_1275890321" MODIFIED="1697741670215" TEXT="TestChainLoad_test">
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699657771858" ID="ID_492954771" MODIFIED="1699657774722" TEXT="Design">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699657791215" ID="ID_1285189810" MODIFIED="1699657803659" TEXT="Anforderungen">
@ -95670,6 +95656,240 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1699660880003" ID="ID_1798983066" MODIFIED="1699660903256" TEXT="Am Anfang steht ein einziger Seed, am Ende ein einziges Ergebnis"/>
<node CREATED="1699660593344" ID="ID_308815750" MODIFIED="1699660599239" TEXT="es darf keine Sackgassen geben"/>
</node>
<node CREATED="1699739502726" ID="ID_100018274" MODIFIED="1699739600848" TEXT="Skizze Konstruktion-Mechanismus">
<node CREATED="1699739627261" ID="ID_1325395921" MODIFIED="1699739685912" TEXT="Knoten werden gem&#xe4;&#xdf; einer fortscheitenden Zeit geplant"/>
<node CREATED="1699739687071" ID="ID_1937548794" MODIFIED="1699739704062" TEXT="gleichzeitig behandelte Knoten liegen nebeneinander in einer Liste"/>
<node CREATED="1699739718296" ID="ID_403110705" MODIFIED="1699739741861" TEXT="standardm&#xe4;&#xdf;ig erzeugt jeder Knoten seinen direkten Nachfolger an gleicher Listenposition"/>
<node CREATED="1699739762606" ID="ID_833882306" MODIFIED="1699739894868" TEXT="Knoten k&#xf6;nnen (optional, zuf&#xe4;llig) verzweigen und damit mehr als einen Nachfolger haben"/>
<node CREATED="1699739790303" ID="ID_1516261126" MODIFIED="1699739869967" TEXT="abgezweigte Nachfolger werden hinten an die Liste angeh&#xe4;ngt"/>
<node CREATED="1699739912517" ID="ID_135334392" MODIFIED="1699740008956" TEXT="Knoten k&#xf6;nnen (optional, zuf&#xe4;llig) reduzieren und ihrem Nachfolger die Nachbarn zuf&#xfc;hren"/>
<node CREATED="1699740022103" ID="ID_1389601530" MODIFIED="1699740063029" TEXT="ein reduzierender Knoten sammelt seine N Nachbarn in der Liste ein"/>
<node CREATED="1699740278358" ID="ID_218036409" MODIFIED="1699740327225" TEXT="Knoten k&#xf6;nnen (optional, zuf&#xe4;llig) neue Linien s&#xe4;hen, die ohne Vorg&#xe4;nger beginnen"/>
<node CREATED="1699740463671" ID="ID_739895709" MODIFIED="1699740600826" TEXT="F&#xfc;r Anfang und Ende mu&#xdf; es eine Spezialbehandlung geben">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
....denn sonst k&#246;nnte sich diese Struktur nicht entfalten, ohne die Wahrscheinlichkeiten gezielt global zu steuern. Zu Beginn mu&#223; einmal fest verzweigt werden, und zum Abschluss m&#252;ssen einmalig alle noch offenen Knoten in einen Endknoten zusammengef&#252;hrt werden.
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1699740612853" ID="ID_1348403069" MODIFIED="1699740772960" TEXT="dieser Verkn&#xfc;pfungs-Mechanismus belegt eine fest vorgegebene Menge von Knoten">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Und das legt auch nahe, die Knoten selber im Block zu allozieren. Die Struktur wird dann sukzessive durch Herstellen von Verkn&#252;pfungen aufgebaut, und jeweils neue Knoten werden fortschreitend &#8222;belegt&#8220;
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1699740841337" ID="ID_1118241544" MODIFIED="1699740847100" TEXT="Steuergr&#xf6;&#xdf;en">
<node CREATED="1699740923911" ID="ID_89015648" MODIFIED="1699740931518" TEXT="Gesamtanzahl der Knoten"/>
<node CREATED="1699740848160" ID="ID_1083737857" MODIFIED="1699740871217" TEXT="maximale Parallelit&#xe4;t als Limit (oder unlimitiert)"/>
<node CREATED="1699740872445" ID="ID_764165766" MODIFIED="1699740899462" TEXT="Wahrscheinlichkeit und Zahl der Verzweigungen, Reduktionen, und Aussaht"/>
</node>
<node CREATED="1699741707890" ID="ID_1256754656" MODIFIED="1699741710733" TEXT="Konsequenzen">
<node CREATED="1699741727888" ID="ID_1541171458" MODIFIED="1699741738034" TEXT="im Block liegen die Knoten geornet"/>
<node CREATED="1699741738862" ID="ID_1619401622" MODIFIED="1699741755526" TEXT="Nachfolger stehen stets weiter hinten"/>
<node CREATED="1699742835134" ID="ID_1616358648" MODIFIED="1699742850936" TEXT="alle Berechnungen und Traversierungen haben lineare Komplexit&#xe4;t"/>
<node CREATED="1699741773857" ID="ID_1389034436" MODIFIED="1699741790986" TEXT="der erste Strang ist ein Hauptstrang und geht bis zum letzten Knoten durch"/>
<node CREATED="1699741891657" ID="ID_665327514" MODIFIED="1699741967486" TEXT="die Balance zwischen den Wahrscheinlichkeiten bestimmt die konkrete Form"/>
<node CREATED="1699741993259" ID="ID_849845710" MODIFIED="1699742010072" TEXT="die Steuergr&#xf6;&#xdf;en sollten als Funktionen konfigurierbar gemacht werden">
<node CREATED="1699742017712" ID="ID_495841097" MODIFIED="1699742034394" TEXT="Input: aktueller Hash"/>
<node CREATED="1699742075192" ID="ID_237749934" MODIFIED="1699742108816" TEXT="Output: Steuergr&#xf6;&#xdf;e (ja/nein, Anzahl)"/>
<node CREATED="1699742121210" ID="ID_1698029431" MODIFIED="1699742134716" TEXT="Berechnung: typischerweise per Modulo und Mapping"/>
</node>
</node>
</node>
<node CREATED="1699742148860" ID="ID_1311053913" MODIFIED="1699742152869" TEXT="Einzel-Verfahren">
<node CREATED="1699742169876" ID="ID_316920664" MODIFIED="1699742177318" TEXT="Topologie-Generierung">
<node CREATED="1699742192457" ID="ID_1053661548" MODIFIED="1699742197580" TEXT="ist eine while-Schleife"/>
<node CREATED="1699742209159" ID="ID_1003117104" MODIFIED="1699742221157" TEXT="arbeitet auf einer Liste von Pointern auf die Nodes"/>
<node CREATED="1699742604779" ID="ID_853800288" MODIFIED="1699742636811" TEXT="es gibt immer alternierend die aktuelle-Liste und die Nachfolger-Liste"/>
</node>
<node CREATED="1699742858417" ID="ID_889440873" MODIFIED="1699742863350" TEXT="Traversierung">
<node CREATED="1699742864986" ID="ID_999341690" MODIFIED="1699743013462" TEXT="Traversierung gem&#xe4;&#xdf; Verkn&#xfc;pfungslogik w&#xe4;re m&#xf6;glich, ist aber nicht sinnvoll">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...und zwar da sie wegen der m&#246;glicherweise chaotischen Verkn&#252;pfungsstruktur schwierig zu programmieren und maximal aufwendig w&#228;re. Das gilt entsprechend auf das Erzeugen des Schedule
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1699743015397" ID="ID_121499445" MODIFIED="1699743053875" TEXT="Traversierung &#xfc;ber die Nodes im Block ist effizient und wird als Primitive bereitgestellt"/>
</node>
<node CREATED="1699743076352" ID="ID_1308611850" MODIFIED="1699743082136" TEXT="Kontroll-Berechnung">
<node CREATED="1699743083178" ID="ID_905616190" MODIFIED="1699743095951" TEXT="ist eine einfache Traveriserung, die die Berechnungsfunktion jeder Node aufruft"/>
<node CREATED="1699743096640" ID="ID_799638431" MODIFIED="1699743259682" TEXT="normalerweise nicht notwendig, da bereits ein Nebenergebnis der Topologie-Generierung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...denn auch die Topologie-Generierung braucht bereits eine Zufallszahl pro Node, und daf&#252;r nimmt man sinnvollerweise den berechneten Hash f&#252;r diese Node, also ruft die Berechnungsfunktion der Node auf.
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1699743262759" ID="ID_1587309791" MODIFIED="1699743268330" TEXT="Scheduling">
<node CREATED="1699743269428" ID="ID_1800079045" MODIFIED="1699743327693" TEXT="ist im allgemeinen sehr komplex und nur in einem Gesamtlauf m&#xf6;glich"/>
<node CREATED="1699743335828" ID="ID_1767944235" MODIFIED="1699743352605" TEXT="erfordert zwingend, den Builder-Term jeder Node daselbst zu speichern"/>
<node CREATED="1699743460240" ID="ID_1289587973" MODIFIED="1699743944810" TEXT="Paketweise Berechnung in Traversierung &#xfc;ber die Nodes erfordert sinnvolles Scheduling">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Wenn man das Scheduling nicht auf einmal macht, bleiben gewisse Querverbindungen undeklariert, auch auf den Nodes, die man schon in den Schedulter &#252;bergeben hat. Da jedoch auf jeder &#187;Zeitebene&#171; f&#252;r jeden parallelen Strang jeweils eine Node sitzt, k&#246;nnen maximal die Verkn&#252;pfungen zur unmittelbar vorausgehenden Zeitebene fehlen; sofern man das n&#228;chste Paket f&#252;r's Scheduling behandelt, <i>bevor diese unmittelbar vorhergehende Zeitebene</i>&#160;tats&#228;chlich schon ihre Aktivierung erreicht hat, k&#246;nnen diese Verbindungen noch nachgetragen werden.
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1699743998447" ID="ID_1213659188" MODIFIED="1699744020039" TEXT="Ausf&#xfc;hrung im Job-Funktor">
<node CREATED="1699744023916" ID="ID_608257455" MODIFIED="1699744031292" TEXT="dieser bekommt lediglich den Pointer auf eine Node"/>
<node CREATED="1699744035387" ID="ID_1158914" MODIFIED="1699744043229" TEXT="er ruft auf dieser die Berechnungsfunktion auf"/>
<node CREATED="1699744050096" ID="ID_1428700914" MODIFIED="1699744063130" TEXT="welche wiederum auf den Hash der unmittelbaren Vorg&#xe4;nger zugreift"/>
</node>
<node CREATED="1699744066590" ID="ID_1514578963" MODIFIED="1699744080808" TEXT="Berechnungsergebnis und Reset">
<node CREATED="1699744082676" ID="ID_452347724" MODIFIED="1699744093934" TEXT="der Hash wird direkt in der Node gespeichert"/>
<node CREATED="1699744094850" ID="ID_616611323" MODIFIED="1699744117163" TEXT="sinnvollerweise l&#xf6;scht man diese Hash-Ergebnisse mit einer einfachen Traversierung"/>
<node CREATED="1699744117849" ID="ID_1282471573" MODIFIED="1699744177667" TEXT="andernfalls w&#xfc;rde man u.U. ein noch fehlendes Vorg&#xe4;nger-Ergebnis gar nicht bemerken"/>
</node>
<node CREATED="1699746556608" ID="ID_226221091" MODIFIED="1699746569941" TEXT="Darstellung der Topologie">
<node CREATED="1699746571605" ID="ID_1609174286" MODIFIED="1699746742507" TEXT="Methode-1: Traversierung und Charakterisierung pro (Zeit)Ebene"/>
<node CREATED="1699746746487" ID="ID_253753412" MODIFIED="1699746759472" TEXT="Methode-2: Graphviz-Ausgabe der Node-Struktur"/>
</node>
</node>
<node CREATED="1699744188230" ID="ID_594014522" MODIFIED="1699744195512" TEXT="Aufbau der Komponente">
<node CREATED="1699744198940" ID="ID_1863041010" MODIFIED="1699748033571" TEXT="der maximale Fan-out/in ist ein Template-Parameter (der Node)">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Begr&#252;ndung: man m&#246;chte mit dem Ding heftigen Druck erzeugen k&#246;nnen. Daher mu&#223; es selbst performant implementiert sein; unkoordinierte Heap-Allokationen f&#252;r Predecessor/Successor-Tabellen k&#246;nnen wir uns da nicht gestatten.
</p>
</body>
</html>
</richcontent>
<node CREATED="1699747767421" ID="ID_1919787348" MODIFIED="1699747858585" TEXT="das impliziert auch eine Beschr&#xe4;nkung der Paralell-Str&#xe4;nge">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
weil per Festlegung die letzte Node alles zusammenf&#252;hren soll, und ich keinen komplizierteren Algorithmus programmieren will
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1699747802728" ID="ID_51577030" MODIFIED="1699747812490" TEXT="Argument: mu&#xdf; man halt entsprechend hochsetzen"/>
</node>
<node CREATED="1699753460661" ID="ID_385105279" MODIFIED="1699753482634" TEXT="die Node-Anzahl wird auch ein Template-Parameter">
<icon BUILTIN="yes"/>
<node CREATED="1699753485288" ID="ID_1130708229" MODIFIED="1699753511088" TEXT="ich m&#xf6;chte unbedingt eine Block-Allokation und einfache Iteration"/>
<node CREATED="1699753511761" ID="ID_344250236" MODIFIED="1699753736154" TEXT="und strebe letzlich nach weitgehend selbsterkl&#xe4;reendem Code"/>
<node CREATED="1699753737406" ID="ID_171467229" MODIFIED="1699753756648" TEXT="leider bleiben daher nicht mehr viel Alternativen">
<node CREATED="1699753758587" ID="ID_493828771" MODIFIED="1699753773589" TEXT="Vector vertr&#xe4;gt keine NonCopyable payload"/>
<node CREATED="1699753774273" ID="ID_1485627449" MODIFIED="1699753802497" TEXT="zu Fu&#xdf; ein Array in unique_ptr ist unn&#xf6;tig komplex"/>
<node CREATED="1699753804121" ID="ID_986288180" MODIFIED="1699753826262" TEXT="lib::ScopedCollection w&#xfc;rde passen, ist aber selber komplex"/>
<node CREATED="1699753828682" ID="ID_948083210" MODIFIED="1699753849171" TEXT="KISS &#x27f9; std::Array in unique_ptr"/>
</node>
</node>
<node CREATED="1699744291112" ID="ID_1829758228" MODIFIED="1699744337180" TEXT="Builder-Syntax &#x2014; aber die Node-Allokation erfolgt sofort (ctor-Parameter)"/>
<node CREATED="1699744342169" ID="ID_1522319392" MODIFIED="1699744414936" TEXT="Traversierung und darauf aufbauende Einzel-Verfahren sind &#xbb;Methoden&#xab;"/>
<node CREATED="1699744435842" ID="ID_134211269" MODIFIED="1699744459669" TEXT="&#x27f9; buildTopology() ist also der klassische Builder-Abschlu&#xdf;"/>
<node CREATED="1699745687140" ID="ID_703752888" MODIFIED="1699745716356" TEXT="es gibt eine Sammlung von Standard-Bausteinen zur Parametrisierung der Steuergr&#xf6;&#xdf;en"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697740857815" ID="ID_1544079509" MODIFIED="1699746791796" TEXT="in separatem Test entwerfen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697741633966" ID="ID_787175245" MODIFIED="1697741674433" TEXT="Nutzen vorher kl&#xe4;ren">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1697741661950" ID="ID_1735458016" MODIFIED="1697741661950" TEXT="Darstellung der Abh&#xe4;ngigkeits-Struktur"/>
<node CREATED="1697741689551" ID="ID_1012140830" MODIFIED="1697741694906" TEXT="Art der Daten&#xfc;bergabe"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697743909120" ID="ID_483537733" MODIFIED="1697743924734" TEXT="#1346 reproducible computational load">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697740877587" ID="ID_1275890321" MODIFIED="1699747567145" TEXT="TestChainLoad_test">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699747322625" ID="ID_1190216980" MODIFIED="1699747559682" TEXT="verify_Node">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1699753108010" ID="ID_1374103098" MODIFIED="1699754432064" TEXT="Default-Konstruktion">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699753116721" ID="ID_1947111817" MODIFIED="1699753141716" TEXT="Verbindung mit anderen Nodes">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699753131711" ID="ID_1177424615" MODIFIED="1699753141717" TEXT="Hash-Berechnung">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699746799143" ID="ID_1824939661" MODIFIED="1699746805576" TEXT="Implementierung">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699746806718" ID="ID_1563586426" MODIFIED="1699747572592" TEXT="Grundstrukturen anlegen">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699746880572" ID="ID_1016750692" MODIFIED="1699746885284" TEXT="Rahmen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699746814207" ID="ID_1830964354" MODIFIED="1699746816453" TEXT="Node">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699746817756" ID="ID_490992503" MODIFIED="1699746834411" TEXT="Generator">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699746891934" ID="ID_1003055056" MODIFIED="1699747555554" TEXT="Node">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699746898954" ID="ID_1174327209" MODIFIED="1699747552946" TEXT="Datenstruktur">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#435e98" CREATED="1699746902068" ID="ID_1045369485" MODIFIED="1699754419615" TEXT="maxFan ist ein Template-Param">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1699746922151" ID="ID_292908322" MODIFIED="1699746934836" TEXT="verwende ein std::Array"/>
<node CREATED="1699747392222" ID="ID_85247310" MODIFIED="1699747397174" TEXT="pred / succ">
<node CREATED="1699747398919" ID="ID_458723840" MODIFIED="1699747405529" TEXT="Anzahl"/>
<node CREATED="1699747406121" ID="ID_1825332114" MODIFIED="1699747411156" TEXT="Iteration"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699747423371" ID="ID_1818811688" MODIFIED="1699747550979" TEXT="Berechnung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1699747433986" ID="ID_1557543092" MODIFIED="1699747548608" TEXT="setzt Berechnung aller Prefecessors vorraus">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699747511840" ID="ID_96811527" MODIFIED="1699747533636" TEXT="speichert das Ergebnis per Seiteneffekt">
<icon BUILTIN="flag-yellow"/>
</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>
</node>
</node>
</node>
</node>