Scheduler-test: build adapted schedule
...based on the adapted time-factor sequence implemented yesterday in TestChainLoad itself - in this case, the TimeBase from the computation load is used as level speed - this »base beat« is then modulated by the timing factor sequence - working in an additional stress factor to press the schedule uniformly - actual start time will be added as offset once the actual test commences
This commit is contained in:
parent
f4dd309476
commit
813f8721f7
4 changed files with 126 additions and 19 deletions
|
|
@ -89,6 +89,14 @@ namespace util {
|
|||
, upperBound);
|
||||
}
|
||||
|
||||
template <typename NUM, typename NB>
|
||||
inline bool constexpr
|
||||
isLimited (NB lowerBound, NUM val, NB upperBound)
|
||||
{
|
||||
return lowerBound <= val
|
||||
and val <= upperBound;
|
||||
}
|
||||
|
||||
/** positive integral number from textual representation
|
||||
* @return always a number, 0 in case of unparseable text,
|
||||
* limited to 0 <= num <= LUMIERA_MAX_ORDINAL_NUMBER */
|
||||
|
|
|
|||
|
|
@ -189,6 +189,39 @@ SHOW_EXPR(micros);
|
|||
CHECK (schedule[26] == _uTicks(26ms));
|
||||
CHECK (schedule[27] == _uTicks(27ms));
|
||||
|
||||
double stressFac = 1.0;
|
||||
testSetup.withAdaptedSchedule (stressFac, concurrency);
|
||||
schedule = testSetup.getScheduleSeq().effuse();
|
||||
CHECK (schedule.size() == testLoad.topLevel() + 2);
|
||||
SHOW_EXPR(schedule[0])
|
||||
SHOW_EXPR(schedule[1])
|
||||
SHOW_EXPR(schedule[2])
|
||||
SHOW_EXPR(schedule[3])
|
||||
SHOW_EXPR(schedule[4])
|
||||
SHOW_EXPR(schedule[5])
|
||||
SHOW_EXPR(schedule[6])
|
||||
SHOW_EXPR(schedule[7])
|
||||
SHOW_EXPR(schedule[8])
|
||||
SHOW_EXPR(schedule[9])
|
||||
SHOW_EXPR(schedule[10])
|
||||
SHOW_EXPR(schedule[11])
|
||||
SHOW_EXPR(schedule[12])
|
||||
SHOW_EXPR(schedule[13])
|
||||
SHOW_EXPR(schedule[14])
|
||||
SHOW_EXPR(schedule[15])
|
||||
SHOW_EXPR(schedule[16])
|
||||
SHOW_EXPR(schedule[17])
|
||||
SHOW_EXPR(schedule[18])
|
||||
SHOW_EXPR(schedule[19])
|
||||
SHOW_EXPR(schedule[20])
|
||||
SHOW_EXPR(schedule[21])
|
||||
SHOW_EXPR(schedule[22])
|
||||
SHOW_EXPR(schedule[23])
|
||||
SHOW_EXPR(schedule[24])
|
||||
SHOW_EXPR(schedule[25])
|
||||
SHOW_EXPR(schedule[26])
|
||||
SHOW_EXPR(schedule[27])
|
||||
|
||||
micros = testSetup.launch_and_wait();
|
||||
SHOW_EXPR(micros);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ namespace test {
|
|||
using util::limited;
|
||||
using util::unConst;
|
||||
using util::toString;
|
||||
using util::isLimited;
|
||||
using util::showHashLSB;
|
||||
using lib::time::Time;
|
||||
using lib::time::TimeValue;
|
||||
|
|
@ -161,6 +162,7 @@ namespace test {
|
|||
const auto SAFETY_TIMEOUT = 5s; ///< maximum time limit for test run, abort if exceeded
|
||||
const auto STANDARD_DEADLINE = 10ms; ///< deadline to use for each individual computation job
|
||||
const size_t DEFAULT_CHUNKSIZE = 64; ///< number of computation jobs to prepare in each planning round
|
||||
const size_t UPFRONT_PLANNING_BOOST = 2; ///< factor to increase the computed pre-roll to ensure up-front planning
|
||||
const size_t GRAPH_BENCHMARK_RUNS = 5; ///< repetition count for reference calculation of a complete node graph
|
||||
const size_t LOAD_BENCHMARK_RUNS = 500; ///< repetition count for calibration benchmark for ComputationalLoad
|
||||
const double LOAD_SPEED_BASELINE = 100; ///< initial assumption for calculation speed (without calibration)
|
||||
|
|
@ -168,6 +170,8 @@ namespace test {
|
|||
const size_t LOAD_DEFAULT_MEM_SIZE = 1000; ///< default allocation base size used if ComputationalLoad.useAllocation
|
||||
const Duration SCHEDULE_LEVEL_STEP{_uTicks(1ms)}; ///< time budget to plan for the calculation of each »time level« of jobs
|
||||
const Duration SCHEDULE_PLAN_STEP{_uTicks(100us)}; ///< time budget to reserve for each node to be planned and scheduled
|
||||
|
||||
inline uint defaultConcurr() { return work::Config::getDefaultComputationCapacity(); }
|
||||
}
|
||||
|
||||
struct LevelWeight
|
||||
|
|
@ -1697,7 +1701,7 @@ namespace test {
|
|||
{
|
||||
auto finished = attachNewCompletionSignal();
|
||||
size_t numNodes = chainLoad_.size();
|
||||
size_t firstChunkEndNode = calcNextChunkEnd(0)-1;
|
||||
size_t firstChunkEndNode = calcNextChunkEnd(0);
|
||||
schedule_.allocate (numNodes);
|
||||
compuLoad_->maybeCalibrate();
|
||||
calcFunctor_.reset (new RandomChainCalcFunctor<maxFan>{chainLoad_.nodes_[0], compuLoad_.get()});
|
||||
|
|
@ -1743,7 +1747,7 @@ namespace test {
|
|||
fillDefaultSchedule();
|
||||
|
||||
return lib::explore(startTimes_)
|
||||
.transform([&](Time jobTime) -> Time
|
||||
.transform([&](Time jobTime) -> TimeVar
|
||||
{
|
||||
return jobTime - startTimes_[0];
|
||||
});
|
||||
|
|
@ -1790,14 +1794,21 @@ namespace test {
|
|||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withAdaptedSchedule(double stressFac =1.0)
|
||||
withAdaptedSchedule (double stressFac =1.0, uint concurrency=0)
|
||||
{
|
||||
if (not concurrency) // use hardware concurrency (#cores) by default
|
||||
concurrency = defaultConcurr();
|
||||
ENSURE (isLimited (1u, concurrency, 3*defaultConcurr()));
|
||||
withLevelDuration (compuLoad_->timeBase);
|
||||
fillAdaptedSchedule (stressFac, concurrency);
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withUpfrontPlanning()
|
||||
{
|
||||
withChunkSize (chainLoad_.size());
|
||||
preRoll_ *= UPFRONT_PLANNING_BOOST;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
|
@ -1941,7 +1952,10 @@ namespace test {
|
|||
size_t numPoints = chainLoad_.topLevel()+2;
|
||||
startTimes_.clear();
|
||||
startTimes_.reserve (numPoints);
|
||||
chainLoad_.levelScheduleSequence(concurrency).effuse();
|
||||
startTimes_.push_back (Time::ZERO);
|
||||
chainLoad_.levelScheduleSequence (concurrency)
|
||||
.transform([&](double scheduleFact){ return (scheduleFact/stressFac) / levelSpeed_;})
|
||||
.effuse(startTimes_);
|
||||
}
|
||||
|
||||
Time
|
||||
|
|
|
|||
|
|
@ -107403,7 +107403,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#980e34" DESTINATION="ID_451970697" ENDARROW="Default" ENDINCLINATION="163;698;" ID="Arrow_ID_1930824070" SOURCE="ID_1994748011" STARTARROW="None" STARTINCLINATION="-607;42;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702944889122" FOLDED="true" ID="ID_816186443" MODIFIED="1704056444572" TEXT="Berechnung der systematisch-erwartbaren Ausführungszeit">
|
||||
<node COLOR="#338800" CREATED="1702944889122" FOLDED="true" ID="ID_816186443" MODIFIED="1704139827788" TEXT="Berechnung der systematisch-erwartbaren Ausführungszeit">
|
||||
<linktarget COLOR="#618eb4" DESTINATION="ID_816186443" ENDARROW="Default" ENDINCLINATION="-871;-40;" ID="Arrow_ID_888227312" SOURCE="ID_1434946452" STARTARROW="None" STARTINCLINATION="-203;20;"/>
|
||||
<linktarget COLOR="#5d567f" DESTINATION="ID_816186443" ENDARROW="Default" ENDINCLINATION="-25;77;" ID="Arrow_ID_280715198" SOURCE="ID_1983964457" STARTARROW="None" STARTINCLINATION="-621;-17;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -107650,33 +107650,76 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702945662283" ID="ID_557005311" MODIFIED="1704134638849" TEXT="Möglichkeit für hierauf abstellendes genaues Scheduling">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702945698917" ID="ID_617955437" MODIFIED="1704134635631" TEXT="ScheduleCtx stellt dieses Feature bereit">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1702945698917" ID="ID_617955437" MODIFIED="1704144780465" TEXT="ScheduleCtx stellt dieses Feature bereit">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1703797401009" ID="ID_1091284884" MODIFIED="1703797408236" TEXT="implementiert durch eine LUT"/>
|
||||
<node CREATED="1703797437806" ID="ID_139711050" MODIFIED="1703797452286" TEXT="welche auch gleich die Integration (Gesamtzeit) mit beinhaltet"/>
|
||||
<node CREATED="1704131775134" ID="ID_1368289574" MODIFIED="1704131778714" TEXT="Umbauten">
|
||||
<node COLOR="#435e98" CREATED="1704131775134" ID="ID_1368289574" MODIFIED="1704144781683" TEXT="Umbauten">
|
||||
<node COLOR="#435e98" CREATED="1704131779566" ID="ID_665664314" MODIFIED="1704131849268" TEXT="startTime_ bleibt erhalten (zur Dokumentation)">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704131789964" ID="ID_1025558471" MODIFIED="1704134610988" TEXT="aber das Schedule wird komplett fertig vorberechnet">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1704131789964" ID="ID_1025558471" MODIFIED="1704139765021" TEXT="aber das Schedule wird komplett fertig vorberechnet">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1704131859763" ID="ID_474855100" MODIFIED="1704134619233" STYLE="fork" TEXT="anchorStartTime() ⟶ anchorSchedule()"/>
|
||||
<node COLOR="#338800" CREATED="1704131877441" ID="ID_1279812512" MODIFIED="1704134622336" TEXT="füllt normalerweise das default-Schedule ein">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1704131901605" ID="ID_1726719129" MODIFIED="1704134625483" TEXT="ansonsten: schon befüllte Time-Table mit Startzeit beaufschlagen">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node COLOR="#338800" CREATED="1704131901605" ID="ID_1726719129" MODIFIED="1704139760567" TEXT="ansonsten: schon befüllte Time-Table mit Startzeit beaufschlagen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704131825817" ID="ID_552446029" MODIFIED="1704131842686" TEXT="einen Vector mit den explzitien Startzeitpunkten vorsehen">
|
||||
<node COLOR="#338800" CREATED="1704131825817" ID="ID_552446029" MODIFIED="1704139775357" TEXT="einen Vector mit den explizitien Startzeitpunkten vorsehen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702945713771" ID="ID_66050639" MODIFIED="1702945728105" TEXT="verwendet hierzu die Auswertung aus Chain-Load">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1703797265083" ID="ID_117426514" MODIFIED="1703797283385" TEXT="diese kann eine Iterations-Berechnung (one-pass) sein"/>
|
||||
<node CREATED="1703797286217" ID="ID_1277790232" MODIFIED="1703797356569" TEXT="die Zahl der Level ist bekannt — also kann man die in eine fixe Tabelle ziehen"/>
|
||||
<node COLOR="#338800" CREATED="1702945713771" ID="ID_66050639" MODIFIED="1704144784537" TEXT="verwendet hierzu die Auswertung aus Chain-Load">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1703797265083" ID="ID_117426514" MODIFIED="1704139844019" TEXT="diese ist eine Iterations-Berechnung (one-pass)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1704139798805" ID="ID_498812151" LINK="#ID_660577400" MODIFIED="1704139836566" TEXT="bereits entwickelt und getestet...">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1703797286217" ID="ID_1277790232" MODIFIED="1704143153260" TEXT="die Zahl der Level ist bekannt — also kann man die in eine fixe Tabelle ziehen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704139847919" ID="ID_400967739" MODIFIED="1704139899216" TEXT="Fencepost-Problem">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1704139860317" ID="ID_655692811" MODIFIED="1704139878702" TEXT="den punkt vor Level-0 schon vorher einfüllen"/>
|
||||
<node CREATED="1704139879314" ID="ID_1950048406" MODIFIED="1704139896128" TEXT="damit gelten alle Punkte aus der Tabelle nach dem Level"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704139903251" ID="ID_1859688800" MODIFIED="1704144774344" TEXT="mit dem Level-Spacing gemäß Load - Base-Time multiplizieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1704139942618" ID="ID_1753308073" MODIFIED="1704139949075" TEXT="Setter-Logik beachten">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1704143830785" ID="ID_1390235964" MODIFIED="1704143853479" TEXT="levelSpeed_ ist eine FrameRate"/>
|
||||
<node CREATED="1704143853969" ID="ID_921864562" MODIFIED="1704143861808" TEXT="wird bereits per Zeitangabe gesetzt"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704139950245" ID="ID_678737201" MODIFIED="1704144767694" TEXT="loadBaseTime übersteuert nun Level-Spacing">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#435e98" CREATED="1704143876275" ID="ID_206816787" MODIFIED="1704144754334" TEXT="aber nur wenn withAdaptedSchedule()">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1704143902767" ID="ID_1052292540" MODIFIED="1704144761258" TEXT="ein reiner Seiteneffekt von der LoadTimeBase wäre zu verwirrend">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1704143931324" ID="ID_577773022" MODIFIED="1704143962808">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
und withAdaptedSchedule <i>muß man explizit </i>aufrufen (wegen Stress-Faktor)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704130248910" ID="ID_279203774" MODIFIED="1704130263076" TEXT="Verifikation und Testbarkeit">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -107695,8 +107738,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702945731584" ID="ID_572123244" MODIFIED="1702945745735" TEXT="stress-Faktor relativ zu diesem Schema">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704130423451" ID="ID_828141465" MODIFIED="1704130534983" TEXT="komplett-Planung vorneweg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1704130423451" ID="ID_828141465" MODIFIED="1704143001031" TEXT="komplett-Planung vorneweg">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1704142955950" ID="ID_1769532330" MODIFIED="1704142991446" TEXT="KISS-Lösung genügt!">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704142966181" ID="ID_1582448622" MODIFIED="1704142997956" TEXT="chunk-Size maximal setzen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704142982267" ID="ID_855188480" MODIFIED="1704142999211" TEXT="errechneten pre-Roll verdoppeln">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704130413244" ID="ID_899448993" MODIFIED="1704130422596" TEXT="zusätziches Einzel-Stepping">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue