|
|
|
|
@ -68533,7 +68533,9 @@
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1681597167602" ID="ID_205208976" MODIFIED="1681597182099" TEXT="playbackUrgency = {ASAP,NICE,TIMEBOUND}"/>
|
|
|
|
|
<node CREATED="1681597212993" ID="ID_615732474" MODIFIED="1681597273762" TEXT="scheduledDelivery(nur TIMEBOUND) ≔ »wall clock time« des Grid-Ursprungs"/>
|
|
|
|
|
<node CREATED="1681597212993" ID="ID_615732474" MODIFIED="1681597273762" TEXT="scheduledDelivery(nur TIMEBOUND) ≔ »wall clock time« des Grid-Ursprungs">
|
|
|
|
|
<arrowlink COLOR="#b7376e" DESTINATION="ID_92039924" ENDARROW="Default" ENDINCLINATION="238;-13;" ID="Arrow_ID_1490237982" STARTARROW="None" STARTINCLINATION="311;12;"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
@ -68601,6 +68603,49 @@
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685235060310" ID="ID_756189610" MODIFIED="1685235066850" TEXT="Steuerung der Timings">
|
|
|
|
|
<node CREATED="1685235106241" ID="ID_1118252767" MODIFIED="1685235110646" TEXT="Play-Modi">
|
|
|
|
|
<node CREATED="1685235134174" ID="ID_1510798334" MODIFIED="1685235162850" TEXT="ASAP ( ≙ »freewheeling«)"/>
|
|
|
|
|
<node CREATED="1685235169786" ID="ID_1115240331" MODIFIED="1685235189342" TEXT="NICE (throtteled)"/>
|
|
|
|
|
<node CREATED="1685235189882" ID="ID_135856225" MODIFIED="1685235193367" TEXT="TIMEBOUND">
|
|
|
|
|
<node CREATED="1685235194618" ID="ID_1764599911" MODIFIED="1685235198389" TEXT="normale Wiedergabe"/>
|
|
|
|
|
<node CREATED="1685235200025" ID="ID_138155333" MODIFIED="1685235204223" TEXT="ggfs mit Speed-Faktor"/>
|
|
|
|
|
<node CREATED="1685235222582" ID="ID_176647138" MODIFIED="1685235224840" TEXT="setup">
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685235225842" ID="ID_92039924" MODIFIED="1685235266821" TEXT="Timings werden mit scheduledDelivery initialisiert">
|
|
|
|
|
<linktarget COLOR="#b7376e" DESTINATION="ID_92039924" ENDARROW="Default" ENDINCLINATION="238;-13;" ID="Arrow_ID_1490237982" SOURCE="ID_615732474" STARTARROW="None" STARTINCLINATION="311;12;"/>
|
|
|
|
|
<icon BUILTIN="flag-yellow"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685235111484" ID="ID_171207659" MODIFIED="1685235129154" TEXT="Umgang mit Slippage">
|
|
|
|
|
<node CREATED="1685235317993" ID="ID_881286142" MODIFIED="1685235327172" TEXT="Möglichkeiten">
|
|
|
|
|
<node CREATED="1685235329248" ID="ID_277669126" MODIFIED="1685235371838" TEXT="Ziel-Grid verschieben (slip)"/>
|
|
|
|
|
<node CREATED="1685235340213" ID="ID_197210847" MODIFIED="1685235366742" TEXT="einzelne Frames fallen lassen (drop)"/>
|
|
|
|
|
<node CREATED="1685235373066" ID="ID_396967363" MODIFIED="1685235385412" TEXT="erkennen und anhalten (strict)"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685236445931" ID="ID_416061497" MODIFIED="1685236452637" TEXT="Probleme">
|
|
|
|
|
<icon BUILTIN="messagebox_warning"/>
|
|
|
|
|
<node CREATED="1685236454793" ID="ID_215956624" MODIFIED="1685236551147" TEXT="ASAP paßt konzeptionell nicht mit einem time-bound-Scheduler zusammen">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
die Aufschlüsselung nach Zeiten enthält überall Puffer, die insgesamt zu einer Zeitverschwendung führen
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
normalerweise wird das Verletzen einer Deadline als Fehler interpretiert
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1512923672275" ID="ID_1369059082" MODIFIED="1557498707237" TEXT="Wiring"/>
|
|
|
|
|
<node CREATED="1512923682530" ID="ID_1204903801" MODIFIED="1557498707237" TEXT="Planning">
|
|
|
|
|
@ -69517,6 +69562,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685227587042" ID="ID_1506519459" MODIFIED="1685227597731" TEXT="EngineConfig">
|
|
|
|
|
<icon BUILTIN="messagebox_warning"/>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685227599324" ID="ID_996861061" MODIFIED="1685227641903" TEXT="Timings verwenden einen Singleton-Zugang">
|
|
|
|
|
<icon BUILTIN="stop-sign"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685227615700" ID="ID_233202097" MODIFIED="1685227641889" TEXT="sollte besser in die RenderEnvironmentClosure">
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685227910712" ID="ID_176838634" MODIFIED="1685227942987" TEXT="massively concurrent access">
|
|
|
|
|
<icon BUILTIN="clanbomber"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425106274" ID="ID_897788253" LINK="#ID_274575596" MODIFIED="1681425285122" TEXT="engine::Job und engine::Activity neu konzipieren">
|
|
|
|
|
<icon BUILTIN="flag-yellow"/>
|
|
|
|
|
</node>
|
|
|
|
|
@ -73055,6 +73112,22 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|
|
|
|
<arrowlink COLOR="#fb1618" DESTINATION="ID_548686360" ENDARROW="Default" ENDINCLINATION="-27;-313;" ID="Arrow_ID_567963048" STARTARROW="None" STARTINCLINATION="-36;126;"/>
|
|
|
|
|
<icon BUILTIN="messagebox_warning"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685231891079" ID="ID_260441580" MODIFIED="1685231911607" TEXT="Rolle des Start-Punktes (TimeAnchor) klären">
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
<node CREATED="1685231941823" ID="ID_1623940961" MODIFIED="1685231953912" TEXT="verankert jeden Planning-Chunk erneut">
|
|
|
|
|
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1685235436161" ID="ID_468996444" MODIFIED="1685235443249" TEXT="ggfs dynamisch">
|
|
|
|
|
<icon BUILTIN="hourglass"/>
|
|
|
|
|
<node CREATED="1685235444928" ID="ID_302855619" MODIFIED="1685235467177" TEXT="slip ⟹ die Timings nachjustieren"/>
|
|
|
|
|
<node CREATED="1685235468131" ID="ID_124817718" MODIFIED="1685235532934" TEXT="drop ⟹ den ersten noch errichbaren Frame nehmen"/>
|
|
|
|
|
<node CREATED="1685235541603" ID="ID_1822458773" MODIFIED="1685235553877" TEXT="strict ⟹ erkennen daß die Deadline bereits gerissen ist"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685235561543" ID="ID_1064939356" MODIFIED="1685235568611" TEXT="Basis-Fall">
|
|
|
|
|
<node CREATED="1685235946749" ID="ID_639180264" LINK="#ID_92039924" MODIFIED="1685236163177" TEXT="TIMEBOUND ⟹ die Timings müssen relativ zur Wall-Clock-Time definiert sein (+Puffer)"/>
|
|
|
|
|
<node CREATED="1685236006596" ID="ID_844227051" MODIFIED="1685236120369" TEXT="sonst ⟹ aktuelle Zeit + Puffer für Latency"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685231918246" ID="ID_1408660753" MODIFIED="1685231930041" TEXT="stellt zugleich den Link zur Wall-Clock-Time her"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685066463050" ID="ID_1613334312" MODIFIED="1685066472930" TEXT="Mock-Setup schaffen">
|
|
|
|
|
<icon BUILTIN="flag-yellow"/>
|
|
|
|
|
@ -73165,7 +73238,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="flag-yellow"/>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685034217649" ID="ID_838263980" MODIFIED="1685034235192" TEXT="Job kann seine eigene Performance-Charakteristik beobachten">
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685034217649" ID="ID_838263980" MODIFIED="1685313347479" TEXT="Job(Closure) kann eigene Performance-Charakteristik beobachten">
|
|
|
|
|
<icon BUILTIN="idea"/>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685034865250" ID="ID_321040814" MODIFIED="1685050866587" TEXT="Meßpunkte per TimingObservable">
|
|
|
|
|
<arrowlink COLOR="#8f29b2" DESTINATION="ID_1462535336" ENDARROW="Default" ENDINCLINATION="885;-44;" ID="Arrow_ID_1037995856" STARTARROW="None" STARTINCLINATION="503;38;"/>
|
|
|
|
|
@ -73225,6 +73298,23 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685062757986" ID="ID_1983441100" MODIFIED="1685062769556" TEXT="TimeAnchor braucht die Frame-Nr">
|
|
|
|
|
<icon BUILTIN="messagebox_warning"/>
|
|
|
|
|
<node CREATED="1685231530086" ID="ID_1373995955" MODIFIED="1685231549597" TEXT="sollte man nicht ohnehin neu re-Quantisieren?">
|
|
|
|
|
<icon BUILTIN="idea"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685231562523" ID="ID_301732404" MODIFIED="1685231586603" TEXT="...denn das ist genau eine Basis-Operation des Grid"/>
|
|
|
|
|
<node CREATED="1685313146595" ID="ID_206943359" MODIFIED="1685313167055">
|
|
|
|
|
<richcontent TYPE="NODE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
im Job wäre die <i>nominelle </i>Zeit gegeben
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="info"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
@ -73770,8 +73860,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680565476652" ID="ID_1599285907" MODIFIED="1684973334977" TEXT="#1298 Definition: Render Activity verbs">
|
|
|
|
|
<linktarget COLOR="#fde0ca" DESTINATION="ID_1599285907" ENDARROW="Default" ENDINCLINATION="-762;53;" ID="Arrow_ID_744981346" SOURCE="ID_1591114904" STARTARROW="None" STARTINCLINATION="-1043;88;"/>
|
|
|
|
|
<linktarget COLOR="#fe6d01" DESTINATION="ID_1599285907" ENDARROW="Default" ENDINCLINATION="-183;0;" ID="Arrow_ID_1756942771" SOURCE="ID_495348423" STARTARROW="None" STARTINCLINATION="-502;-42;"/>
|
|
|
|
|
<linktarget COLOR="#fde0ca" DESTINATION="ID_1599285907" ENDARROW="Default" ENDINCLINATION="-762;53;" ID="Arrow_ID_744981346" SOURCE="ID_1591114904" STARTARROW="None" STARTINCLINATION="-1043;88;"/>
|
|
|
|
|
<icon BUILTIN="flag-yellow"/>
|
|
|
|
|
<node CREATED="1684980870862" ID="ID_1051551" MODIFIED="1684980899528" TEXT="Arten">
|
|
|
|
|
<node CREATED="1684980900575" ID="ID_1853795602" MODIFIED="1684980920474" TEXT="invoke">
|
|
|
|
|
@ -74256,6 +74346,315 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685313728009" ID="ID_1684013116" MODIFIED="1685313732179" TEXT="Architektur">
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685313733156" ID="ID_1514384511" MODIFIED="1685313753858" TEXT="Diskussion">
|
|
|
|
|
<icon BUILTIN="bell"/>
|
|
|
|
|
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685313772507" ID="ID_1507492066" MODIFIED="1685313796574" TEXT="ist time-bound Scheduling überhaupt der richtige Ansatz?">
|
|
|
|
|
<icon BUILTIN="help"/>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685313801106" ID="ID_669174882" MODIFIED="1685313820436" TEXT="Gegenargumente">
|
|
|
|
|
<icon BUILTIN="messagebox_warning"/>
|
|
|
|
|
<node CREATED="1685313827404" ID="ID_428447328" MODIFIED="1685313838734" TEXT="zeitliche Planung ist nur ein Spezialfall">
|
|
|
|
|
<node CREATED="1685313893707" ID="ID_268317431" MODIFIED="1685313904766" TEXT="sie gilt nur für normales Standard-Playback"/>
|
|
|
|
|
<node CREATED="1685313905448" ID="ID_1165029374" MODIFIED="1685313930314" TEXT="dynamische Änderungen invalidieren den Plan"/>
|
|
|
|
|
<node CREATED="1685313932542" ID="ID_1194636220" MODIFIED="1685313974123" TEXT="Umstands-bedingte Verzögerungen können nur mit Puffer aufgefangen werden"/>
|
|
|
|
|
<node CREATED="1685313975342" ID="ID_1745669681" MODIFIED="1685313987526" TEXT="finales Rendern ist nicht zeitgebungen"/>
|
|
|
|
|
<node CREATED="1685313993958" ID="ID_1955944092" MODIFIED="1685314018982" TEXT="Pufferzeiten gehen auf Kosten der Gesamtleistung"/>
|
|
|
|
|
<node CREATED="1685314035535" ID="ID_1997454756" MODIFIED="1685314110039" TEXT="Hintergrund-Aktivitäten orientieren sich an Kapazität, nicht Zeit"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685313842284" ID="ID_184778142" MODIFIED="1685313882542" TEXT="zeitliche Planung ist starr und aufwendig in der Anpassung">
|
|
|
|
|
<node CREATED="1685314214380" ID="ID_30132170" MODIFIED="1685316717679" TEXT="Zeitsteuerung dient der maximalen Ressourcen-Nutzung">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Zeitsteuerung funktioniert am Besten bei eigentlich entkoppelten Aktivitäten, welche ohne weitere Prüfungen und Synchronisationen starten und enden können
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<arrowlink COLOR="#8c4d64" DESTINATION="ID_1447380879" ENDARROW="Default" ENDINCLINATION="-8;-5;" ID="Arrow_ID_435946798" STARTARROW="None" STARTINCLINATION="-79;0;"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685314344399" ID="ID_1217096258" MODIFIED="1685314716242" TEXT="Reaktion auf externe Ereignisse ist der absolute Gegenpol einer Zeitsteuerung">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Event ⟶ <b>push</b>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
Zeit ⟵ <b>pull</b>
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685314380386" ID="ID_558692946" MODIFIED="1685314749243" TEXT="jede Kontext-Abhängigkeit übersetzt sich in zusätzliche Latenz">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
weil außer dem zeitgetriggerten Start...
|
|
|
|
|
</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
noch zusätzlich etwas Externes geprüft werden muß, was Varianz einführt
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
deshalb zwischen Prüfung und eigentlicher Aktion ein künstlicher Sicherheitspuffer liegen muß
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
außerdem noch eine Kommunikation stattfinden muß, schlimmstenfalls über Thread-Grenzen hinweg
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685314776038" ID="ID_100581546" MODIFIED="1685314801303" TEXT="so gesehen — wir haben ein Problem">
|
|
|
|
|
<icon BUILTIN="broken-line"/>
|
|
|
|
|
<node CREATED="1685315067847" ID="ID_1447380879" MODIFIED="1685316717679" TEXT="wo Ressourcen-Nutzung am Wichtigsten wäre, ist Zeitsteuerung grade nicht optimal">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
...nämlich beim <b>finalen Rendern</b>! Lumiera ist <i>darauf ausgelegt, und grade nicht als Aufführungs-System</i> konzipiert. Und auf der anderen Seite, wenn es um zeitgebundene Wiedergabe geht, fordern wir ohnehin, den Aufwand so sehr zu reduzieren (Proxyies), daß das System weit von Vollauslastung entfernt läuft
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<linktarget COLOR="#8c4d64" DESTINATION="ID_1447380879" ENDARROW="Default" ENDINCLINATION="-8;-5;" ID="Arrow_ID_435946798" SOURCE="ID_30132170" STARTARROW="None" STARTINCLINATION="-79;0;"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685315368175" ID="ID_212885906" MODIFIED="1685315397463" TEXT="wir haben komplett konträre Anforderungen gleichermaßen zu befriedigen">
|
|
|
|
|
<node CREATED="1685315468539" ID="ID_640947563" MODIFIED="1685315806051" TEXT="Playback ist häufig, wäre aber viel billiger auch zu haben">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Denn stabiler Playback erfordert zwingend zusätzliche Leistungspuffer (sofern auch nur ein kleiner Teil der Pipeline zufällig streut). Daher steht und fällt die Möglichkeit für flüssigen Playback damit, den Aufwand garantiert erheblich unter das Limit zu drücken. Unter diesen Umständen würde meist auch Batching plus Vorlauf mit Datenpuffer genügen
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685315807940" ID="ID_425768150" MODIFIED="1685315984774" TEXT="zwar hilft Parllelisierung von I/O, aber genau dies (Events) paßt schlecht auf Zeitsteuerung">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
...mehr noch, da letzten Endes die amortisierte Lade-Zeit pro Frame deutlich kleiner sein muß als die Framerate, brauchen wir ehr einen ausreichenden Vorlauf und einfache Datenpuffer — zumal flüssiger Playback ohnehin nur mit kleinen Frames funktioniert, denn die I/O-Bandbreite ist bei Weitem nicht so angewachsen, wie die Rechenleistung
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685315996971" ID="ID_1708683391" MODIFIED="1685316323440" TEXT="Und der seltene Fall des finalen Renders verlangt eigentlich nach (parallelem) Pipelining">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
In diesem Fall verschlechtert Zeitsteuerung eigentlich die benötigte Gesamtzeit; die optimale Lösung wäre hier, jeweils parallel mehrere I/O-Pipelines, und dann einige Worker nach <i>best serve</i>-Verteilung laufen zu lassen
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685316383184" ID="ID_774329089" MODIFIED="1685316548627" TEXT="Widerspruch zwischen Events und Lastkoordination betrifft alle Fälle">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
praktisch alle Video-Verarbeitung involviert I/O in irgendeiner Form, und muß deshalb auf Events reagieren, dann aber einen nachfolgenden festen Arbeitsaufwand gleichmäßig disponieren
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685316553665" ID="ID_1469791" MODIFIED="1685316844661" TEXT="eigentlich müßten zwei oder drei verschiedene Prozess-Arten programmiert werden">
|
|
|
|
|
<arrowlink COLOR="#fffac4" DESTINATION="ID_779629114" ENDARROW="Default" ENDINCLINATION="13;-20;" ID="Arrow_ID_1083704754" STARTARROW="None" STARTINCLINATION="-69;0;"/>
|
|
|
|
|
<icon BUILTIN="messagebox_warning"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685316762484" ID="ID_779629114" MODIFIED="1685316844661" TEXT="wir nutzen Zeitsteuerung als integrierendes Agens" VSHIFT="18">
|
|
|
|
|
<linktarget COLOR="#fffac4" DESTINATION="ID_779629114" ENDARROW="Default" ENDINCLINATION="13;-20;" ID="Arrow_ID_1083704754" SOURCE="ID_1469791" STARTARROW="None" STARTINCLINATION="-69;0;"/>
|
|
|
|
|
<icon BUILTIN="idea"/>
|
|
|
|
|
<node CREATED="1685317008821" ID="ID_75624396" MODIFIED="1685317551995" TEXT="den zusätzlichen Overhead müssen wir durch Parallelisierungs-Gewinn aufwiegen">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
die wirklich recht komplexe Steuerung ist einzig und allein dadurch gerechtfertigt, daß so lange laufende und schwer vorhersehbare Sequenzen überlappend verschachtelt werden können, was bei einem strikten Pipelining oder rein Event-getriebener Verarbeitung nicht möglich wäre; letztere Ansätze funktionieren nur gut bei sehr kleinen Arbeitspaketen oder bei extremer horizontaler Skalierung
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685317084627" ID="ID_1577438401" MODIFIED="1685317709414" TEXT="es handelt sich mehr um priorisiertes Messaging, denn um Abarbeiten eines Plans">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
das heißt, die Priority-<b>Queue</b> ist das Entscheidende; das Ordnungsmaß darf gar nicht primär als ein Zeitplan verstanden werden, sondern als ein Maß an aktueller Dringlichkeit
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685317217257" ID="ID_646611844" MODIFIED="1685317967864" TEXT="eine breitere zeitliche Streuung entzerrt die Parallelisierung">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Bei einem reinen Pipelining kann es zur Stau und Lastspitzen kommen, und genau dann auch zu Lock-contention. Wir sollten also die zur Integration der widersprüchlichen Anforderungen notwendigen Pufferzeiten als eine zufällige Streuung deuten, die Lastspitzen durch Verteilung entzerrt; sofern nicht in kurzer Zeit Aktionen an <i>mehrere Threads zugleich</i>  weitergegeben werden müssen, treten auch weniger Behinderungen durch Synchronisation auf
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685317341273" ID="ID_229695512" MODIFIED="1685318290392" TEXT="das Lesen aus der Queue soll sich nach Durchsatz steuern">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Die Implementierung sollte sich von den exakten Zeiten lösen — besser sollte stets mit reichlich Puffer gearbeitet werden, dafür aber auch eine Activity in einer gewissen Toleranzzone um den definierten Zeitpunkt herum gestartet werden können. Dafür sollte im Gegenzug die Menge der jeweils aus der Queue entommenen Activities dynamisch geregelt werden, und stets nur so viel wie gut möglich getan werden. Die concurrency-Struktur sollte zum Leitmaß erhoben werden; idealerweise sollte stets nur <i>ein Thread abnehmen, </i>und auch das <i>nur so lange,</i>  bis er wieder auf eine größere Aufgabe geschickt wird.
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685319061644" ID="ID_1128872414" MODIFIED="1685320637044" TEXT="Experimente mit der Thread-Zuteilung zulassen">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
<b>Keinesfalls</b> sollte a priori eine bestimmte Thread-Struktur festgelegt werden! Im Besonderen auch nicht die Annahme, daß es einen »Scheduler-Thread« gibt, welcher Aufgaben verteilt. Denn letztlich hängen alle Leistungs-Eigenschaften an der Cache-Locality, und diese läßt sich nur empirisch optimieren, denn es ist klar, daß unser Daten-Durchsatz die Cache-Kapazität insgesamt übersteigt — inwiefern sich eine einzelne CPU für bestimmte Aufgaben überhaupt „warm laufen“ kann, muß sich in der Praxis zeigen; gut möglich, daß I/O-Limitierungen jedweden Cache-Efekt überdecken. Grundsätzlich sollte die Möglichkeit vorgesehen werden, daß <b>jeder Thread die Queue bedienen kann </b>— sowohl eingangsseitig alsauch ausgangsseitig. Natürlich darf es stets nur ein Thread sein, der die Queue bedient; andere untätige Threads legen sich schlafen.
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="yes"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685320663808" ID="ID_503599380" MODIFIED="1685320675723" TEXT="Struktur-Elemente">
|
|
|
|
|
<node CREATED="1685320702161" ID="ID_1864388669" MODIFIED="1685320717483">
|
|
|
|
|
<richcontent TYPE="NODE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
<b>zwei</b> Queues
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<node CREATED="1685320745481" ID="ID_466578017" MODIFIED="1685320767258" TEXT="eine N-zu-M lock-free Notification-Queue"/>
|
|
|
|
|
<node CREATED="1685320767988" ID="ID_721193609" MODIFIED="1685320791012" TEXT="eine Priority-Queue (not threadsafe)"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685320802441" ID="ID_55556868" MODIFIED="1685320814574" TEXT="ein passiver Thread-Pool">
|
|
|
|
|
<node CREATED="1685320820564" ID="ID_1807600749" MODIFIED="1685320829082" TEXT="keine aktive Zuteilung von Aufgaben"/>
|
|
|
|
|
<node CREATED="1685320830000" ID="ID_4129277" MODIFIED="1685320869284" TEXT="vielmehr konkurrieren die Threads um neue Aufgaben..."/>
|
|
|
|
|
<node CREATED="1685320845491" ID="ID_765952143" MODIFIED="1685320859102" TEXT="legen sich aber bei Mißerfolg schlafen"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685320923317" ID="ID_1902483191" MODIFIED="1685320942314" TEXT="die Prozeßsteuerung liegt jeweils bei einem Thread">
|
|
|
|
|
<node CREATED="1685320945310" ID="ID_1090515306" MODIFIED="1685321041735" TEXT="und zwar wer zufällig als Erster ankommt">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
reguliert über ein konventionelles Lock, oder (besser) über ein Atomic-Token mit CaS
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685320957468" ID="ID_1385375288" MODIFIED="1685321071585" TEXT="dieser entnimmt einen Chunk an Management-Aufgaben"/>
|
|
|
|
|
<node CREATED="1685321072245" ID="ID_1939345018" MODIFIED="1685321083032" TEXT="entweder bis keine dringende Aufgabe mehr anliegt"/>
|
|
|
|
|
<node CREATED="1685321086555" ID="ID_515210134" MODIFIED="1685321101687" TEXT="oder bis eine der Aufgaben ihn längerfristig beschäftigt"/>
|
|
|
|
|
<node CREATED="1685321102626" ID="ID_1134627598" MODIFIED="1685321118300" TEXT="oder bis er ein internes Chunk-Limit ausschöpft"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685321260632" ID="ID_1245306549" MODIFIED="1685321278840">
|
|
|
|
|
<richcontent TYPE="NODE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
zu den Steuerungs-Aufgaben gehört <i>gleichermaßen</i>
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<node CREATED="1685321279620" ID="ID_1359467423" MODIFIED="1685321303575" TEXT="Prio-1 : aus der Notivication-Queue neue Activities entnehmen"/>
|
|
|
|
|
<node CREATED="1685321306206" ID="ID_109301359" MODIFIED="1685321359515" TEXT="Prio-2 : diese Activities in die Priority-Queue einstellen"/>
|
|
|
|
|
<node CREATED="1685321368627" ID="ID_335558978" MODIFIED="1685321394736" TEXT="Prio-3 : von der Spitze der Priority-Queue aktuell dringende Activities abnehmen"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685321415479" ID="ID_1947189271" MODIFIED="1685321424565" TEXT="die Notification-Queue ist der Eingang zum System">
|
|
|
|
|
<node CREATED="1685321426804" ID="ID_746352881" MODIFIED="1685321444736" TEXT="hier werden grundsätzlich neue Activities auf den Weg geschickt"/>
|
|
|
|
|
<node CREATED="1685321445292" ID="ID_79914114" MODIFIED="1685321462397" TEXT="aber auch Activities rekursiv re-priorisiert"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685321483574" ID="ID_1477143023" MODIFIED="1685321501986" TEXT="Tile-based Activity Storage">
|
|
|
|
|
<node CREATED="1685321607585" ID="ID_1565711693" MODIFIED="1685321636487">
|
|
|
|
|
<richcontent TYPE="NODE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Activities werden in/aus der Notification-Queue <b>verschoben</b>
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685321654984" ID="ID_1291294754" MODIFIED="1685321668634" TEXT="geht das direkt?">
|
|
|
|
|
<icon BUILTIN="help"/>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685321679399" ID="ID_1492241069" MODIFIED="1685321797340" TEXT="Grund: lock-contention auf Memory-Management vermeiden">
|
|
|
|
|
<richcontent TYPE="NOTE"><html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<p>
|
|
|
|
|
Die Koordination von Memory-Management ist ein gefährlicher Verzögerungs-Faktor (weil sie zu einem globalen flush der Cache-Hierarchie führen kann).
|
|
|
|
|
</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html></richcontent>
|
|
|
|
|
<icon BUILTIN="idea"/>
|
|
|
|
|
<node CREATED="1685321805315" ID="ID_1461293102" MODIFIED="1685321813542" TEXT="die Laufzeit für Notifications ist kurz"/>
|
|
|
|
|
<node CREATED="1685321814058" ID="ID_1167518732" MODIFIED="1685321822805" TEXT="aber Notifications können aus allen Threads kommen"/>
|
|
|
|
|
<node CREATED="1685321823825" ID="ID_135604936" MODIFIED="1685321848244" TEXT="das Konsumieren der Notifications dagegen passiert im mit der Prozeßsteuerung"/>
|
|
|
|
|
<node CREATED="1685321848944" ID="ID_1429281514" MODIFIED="1685321863381" TEXT="und diese wird chunk-wise single-threaded ausgeführt"/>
|
|
|
|
|
<node CREATED="1685321874220" ID="ID_1713195430" MODIFIED="1685321882281" TEXT="ab diesem Punkt sind Activities langlebig"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node CREATED="1685321970159" ID="ID_1733911974" MODIFIED="1685321991606" TEXT="Activities müssen bis zu ihrer Abarbeitung erhalten bleiben"/>
|
|
|
|
|
<node CREATED="1685322001687" ID="ID_1323039724" MODIFIED="1685322028521" TEXT="da sie sich benachrichtigen können, brauchen sie stabile Adressen">
|
|
|
|
|
<node CREATED="1685322042500" ID="ID_150807049" MODIFIED="1685322061645" TEXT="Vorsicht: das widerspricht dem Verschieben durch die Eingangsqueue"/>
|
|
|
|
|
<node CREATED="1685322088414" ID="ID_1024187625" MODIFIED="1685322105261" TEXT="es sei denn, man verwendet zunächt symbolische Referenzen"/>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
</node>
|
|
|
|
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1684869810400" TEXT="Scheduler">
|
|
|
|
|
<icon BUILTIN="stop"/>
|
|
|
|
|
<node CREATED="1680563512563" ID="ID_960191744" MODIFIED="1680563516470" TEXT="Layer-2"/>
|
|
|
|
|
|