Scheduler-test: complete and integrate computational load
This basically completes the Chain-Load framework; a simple Scheduler integration run with all relevant features can now be demonstrated.
This commit is contained in:
parent
db1ff7ded7
commit
347b9b24be
4 changed files with 408 additions and 207 deletions
|
|
@ -50,7 +50,7 @@ END
|
|||
|
||||
|
||||
|
||||
PLANNED "Synthetic Load for Test" TestChainLoad_test <<END
|
||||
TEST "Synthetic Load for Test" TestChainLoad_test <<END
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -28,22 +28,14 @@
|
|||
#include "lib/test/run.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "test-chain-load.hpp"
|
||||
//#include "vault/real-clock.hpp"
|
||||
//#include "lib/time/timevalue.hpp"
|
||||
#include "vault/gear/job.h"
|
||||
#include "lib/format-cout.hpp" ////////////////////////////////////TODO Moo-oh
|
||||
#include "lib/test/diagnostic-output.hpp"//////////////////////////TODO TOD-oh
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <array>
|
||||
|
||||
//using lib::time::Time;
|
||||
//using lib::time::FSecs;
|
||||
|
||||
using util::isnil;
|
||||
using util::isSameObject;
|
||||
//using lib::test::randStr;
|
||||
//using lib::test::randTime;
|
||||
using std::array;
|
||||
|
||||
|
||||
|
|
@ -86,36 +78,31 @@ namespace test {
|
|||
showcase_StablePattern();
|
||||
verify_computation_load();
|
||||
verify_reseed_recalculate();
|
||||
verify_runtime_reference();
|
||||
verify_scheduling_setup();
|
||||
}
|
||||
|
||||
|
||||
/** @test TODO demonstrate simple usage of the test-load
|
||||
* @todo WIP 11/23 🔁 define ⟶ 🔁 implement
|
||||
/** @test demonstrate simple usage of the test-load
|
||||
* @todo WIP 11/23 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
void
|
||||
usageExample()
|
||||
{
|
||||
auto anchor = RealClock::now();
|
||||
auto offset = [&](Time when =RealClock::now()){ return _raw(when) - _raw(anchor); };
|
||||
|
||||
auto testLoad =
|
||||
TestChainLoad{64}
|
||||
.configureShape_simple_short_segments()
|
||||
.configureShape_short_segments3_interleaved()
|
||||
.buildToplolgy();
|
||||
SHOW_EXPR(offset())
|
||||
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
||||
SHOW_EXPR(testLoad.getHash())
|
||||
CHECK (testLoad.getHash() == 0xD2F292D864CF8086);
|
||||
SHOW_EXPR(offset())
|
||||
|
||||
testLoad.setupSchedule(scheduler)
|
||||
.launch_and_wait();
|
||||
SHOW_EXPR(offset())
|
||||
SHOW_EXPR(testLoad.getHash())
|
||||
|
||||
CHECK (testLoad.getHash() == 0xD2F292D864CF8086);
|
||||
}
|
||||
|
||||
|
|
@ -691,6 +678,7 @@ SHOW_EXPR(testLoad.getHash())
|
|||
CHECK (stat.indicators[STAT_EXIT].pL == "0.48076923"_expect); // ½ exit per level
|
||||
|
||||
|
||||
// »short_segments_interleaved«
|
||||
// Increased seed probability combined with overall seed value 0 ◁──── (crucial, other seeds produce larger graphs)
|
||||
// produces what seems to be the best stable repetition loop:
|
||||
// same shape as in preceding, yet interwoven by 2 steps
|
||||
|
|
@ -864,8 +852,8 @@ SHOW_EXPR(testLoad.getHash())
|
|||
|
||||
|
||||
|
||||
/** @test WIP verify calibration of a configurable computational load.
|
||||
* @todo WIP 12/23 🔁 define ⟶ 🔁 implement
|
||||
/** @test verify calibration of a configurable computational load.
|
||||
* @todo WIP 12/23 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
void
|
||||
verify_computation_load()
|
||||
|
|
@ -874,74 +862,51 @@ SHOW_EXPR(testLoad.getHash())
|
|||
CHECK (cpuLoad.timeBase == 100us);
|
||||
|
||||
double micros = cpuLoad.invoke();
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros < 2000);
|
||||
CHECK (micros > 2);
|
||||
|
||||
cpuLoad.calibrate();
|
||||
|
||||
micros = cpuLoad.invoke();
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros < 133);
|
||||
CHECK (micros > 80);
|
||||
|
||||
micros = cpuLoad.benchmark();
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros < 110);
|
||||
CHECK (micros > 90);
|
||||
|
||||
cpuLoad.useAllocation = true;
|
||||
SHOW_EXPR(cpuLoad.useAllocation)
|
||||
micros = cpuLoad.invoke();
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros < 133);
|
||||
CHECK (micros > 80);
|
||||
|
||||
micros = cpuLoad.benchmark();
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros < 110);
|
||||
CHECK (micros > 90);
|
||||
|
||||
cpuLoad.timeBase = 1ms;
|
||||
cpuLoad.sizeBase *= 100;
|
||||
SHOW_EXPR(cpuLoad.sizeBase)
|
||||
|
||||
cpuLoad.useAllocation = false;
|
||||
micros = cpuLoad.benchmark();
|
||||
SHOW_EXPR(micros)
|
||||
cpuLoad.useAllocation = true;
|
||||
micros = cpuLoad.benchmark();
|
||||
SHOW_EXPR(micros)
|
||||
|
||||
cpuLoad.calibrate();
|
||||
|
||||
cpuLoad.useAllocation = false;
|
||||
micros = cpuLoad.benchmark();
|
||||
SHOW_EXPR(micros)
|
||||
cpuLoad.useAllocation = true;
|
||||
micros = cpuLoad.benchmark();
|
||||
SHOW_EXPR(micros)
|
||||
SHOW_EXPR(5)
|
||||
|
||||
cpuLoad.useAllocation = false;
|
||||
micros = cpuLoad.invoke();
|
||||
CHECK (micros > 900);
|
||||
micros = cpuLoad.invoke(5);
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros > 4600);
|
||||
micros = cpuLoad.invoke(10);
|
||||
CHECK (micros > 9500);
|
||||
micros = cpuLoad.invoke(100);
|
||||
CHECK (micros > 95000);
|
||||
|
||||
cpuLoad.useAllocation = true;
|
||||
micros = cpuLoad.invoke();
|
||||
CHECK (micros > 900);
|
||||
micros = cpuLoad.invoke(5);
|
||||
SHOW_EXPR(micros)
|
||||
SHOW_EXPR(10)
|
||||
cpuLoad.useAllocation = false;
|
||||
CHECK (micros > 4600);
|
||||
micros = cpuLoad.invoke(10);
|
||||
SHOW_EXPR(micros)
|
||||
cpuLoad.useAllocation = true;
|
||||
micros = cpuLoad.invoke(10);
|
||||
SHOW_EXPR(micros)
|
||||
SHOW_EXPR(100)
|
||||
cpuLoad.useAllocation = false;
|
||||
CHECK (micros > 9500);
|
||||
micros = cpuLoad.invoke(100);
|
||||
SHOW_EXPR(micros)
|
||||
cpuLoad.useAllocation = true;
|
||||
micros = cpuLoad.invoke(100);
|
||||
SHOW_EXPR(micros)
|
||||
CHECK (micros > 95000);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1059,6 +1024,18 @@ SHOW_EXPR(micros)
|
|||
|
||||
|
||||
|
||||
/** @test TODO compute synchronous execution time for reference
|
||||
* @todo WIP 12/23 🔁 define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
verify_runtime_reference()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/** @test setup for running a chain-load as scheduled task
|
||||
* - running an isolated Node recalculation
|
||||
* - dispatch of this recalculation packaged as render job
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@
|
|||
** pass over all nodes; yet alternatively each node can be _scheduled_ as an individual
|
||||
** computation job, which obviously requires that it's predecessor nodes have already
|
||||
** been computed, otherwise the resulting hash will not match up with expectation.
|
||||
** If significant per-node computation time is required, the hashing can be
|
||||
** arbitrarily repeated at each node.
|
||||
** If significant per-node computation time is required, an artificial computational
|
||||
** load can be generated, controlled by a weight setting computed for each node.
|
||||
**
|
||||
** The topology of connectivity is generated randomly, yet completely deterministic through
|
||||
** configurable _control functions_ driven by each node's (hash)value. This way, each node
|
||||
|
|
@ -54,6 +54,11 @@
|
|||
** controlling the topology can be configured using the lib::RandomDraw component, allowing
|
||||
** either just to set a fixed probability or to define elaborate dynamic configurations
|
||||
** based on the graph height or node connectivity properties.
|
||||
** - expansionRule: controls forking of the graph behind the current node
|
||||
** - reductionRule: controls joining of the graph into a combining successor node
|
||||
** - seedingRule: controls injection of new start nodes in the middle of the graph
|
||||
** - pruningRule: controls insertion of exit nodes to cut-off some chain immediately
|
||||
** - weightRule: controls assignment of a Node::weight to command the ComputationalLoad
|
||||
**
|
||||
** ## Usage
|
||||
** A TestChainLoad instance is created with predetermined maximum fan factor and a fixed
|
||||
|
|
@ -70,6 +75,9 @@
|
|||
** and showing predecessor -> successor connectivity. Seed nodes are distinguished by
|
||||
** circular shape.
|
||||
**
|
||||
** Moreover, Statistics can be computed over the generated graph, allowing to draw some
|
||||
** conclusions regarding node distribution and connectivity.
|
||||
**
|
||||
** @see TestChainLoad_test
|
||||
** @see SchedulerStress_test
|
||||
** @see random-draw.hpp
|
||||
|
|
@ -83,17 +91,12 @@
|
|||
#include "vault/common.hpp"
|
||||
#include "lib/test/transiently.hpp"
|
||||
|
||||
//#include "lib/hash-value.h"
|
||||
#include "vault/gear/job.h"
|
||||
#include "vault/gear/scheduler.hpp"
|
||||
#include "vault/gear/special-job-fun.hpp"
|
||||
//#include "vault/gear/nop-job-functor.hpp"
|
||||
#include "lib/uninitialised-storage.hpp"
|
||||
#include "lib/test/microbenchmark.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
//#include "lib/meta/variadic-helper.hpp"
|
||||
//#include "lib/meta/function.hpp"
|
||||
//#include "lib/wrapper.hpp"
|
||||
#include "lib/time/quantiser.hpp"
|
||||
#include "lib/iter-explorer.hpp"
|
||||
#include "lib/format-string.hpp"
|
||||
|
|
@ -117,17 +120,6 @@ namespace vault{
|
|||
namespace gear {
|
||||
namespace test {
|
||||
|
||||
using std::string;
|
||||
using std::function;
|
||||
using lib::time::Time;
|
||||
using lib::time::TimeValue;
|
||||
using lib::time::FrameRate;
|
||||
using lib::time::Duration;
|
||||
using lib::test::benchmarkTime;
|
||||
using lib::test::microBenchmark;
|
||||
// using lib::time::FSecs;
|
||||
// using lib::time::Offset;
|
||||
// using lib::meta::RebindVariadic;
|
||||
using util::_Fmt;
|
||||
using util::min;
|
||||
using util::max;
|
||||
|
|
@ -136,15 +128,22 @@ namespace test {
|
|||
using util::unConst;
|
||||
using util::toString;
|
||||
using util::showHashLSB;
|
||||
using lib::meta::_FunRet;
|
||||
using lib::time::Time;
|
||||
using lib::time::TimeValue;
|
||||
using lib::time::FrameRate;
|
||||
using lib::time::Duration;
|
||||
using lib::test::benchmarkTime;
|
||||
using lib::test::microBenchmark;
|
||||
using lib::test::Transiently;
|
||||
using lib::meta::_FunRet;
|
||||
|
||||
using std::string;
|
||||
using std::function;
|
||||
using std::make_pair;
|
||||
using std::forward;
|
||||
using std::string;
|
||||
using std::swap;
|
||||
using std::move;
|
||||
// using boost::hash_combine;
|
||||
using std::chrono_literals::operator ""s;
|
||||
|
||||
namespace err = lumiera::error;
|
||||
|
|
@ -160,9 +159,12 @@ namespace test {
|
|||
const size_t DEFAULT_CHUNKSIZE = 64; ///< number of computation jobs to prepare in each planning round
|
||||
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)
|
||||
const microseconds LOAD_DEFAULT_TIME = 100us; ///< default time delay produced by ComputationalLoad at `Node.weight==1`
|
||||
const size_t LOAD_DEFAULT_MEM_SIZE = 1000; ///< default allocation base size used if ComputationalLoad.useAllocation
|
||||
const microseconds PLANNING_TIME_PER_NODE = 80us; ///< time budget to reserve for each node to be planned and scheduled
|
||||
}
|
||||
|
||||
|
||||
struct Statistic;
|
||||
|
||||
|
||||
|
|
@ -405,6 +407,7 @@ namespace test {
|
|||
|
||||
/** Abbreviation for starting rules */
|
||||
static Rule rule() { return Rule(); }
|
||||
static Rule value(size_t v) { return Rule().fixedVal(v); }
|
||||
|
||||
static Rule
|
||||
rule_atStart (uint v)
|
||||
|
|
@ -449,13 +452,33 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
/** preconfigured topology: isolated simple 2-step chains */
|
||||
TestChainLoad&&
|
||||
configureShape_short_chains2()
|
||||
{
|
||||
pruningRule(rule().probability(0.8));
|
||||
weightRule(value(1));
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
/** preconfigured topology: simple 3-step chains, starting interleaved */
|
||||
TestChainLoad&&
|
||||
configureShape_short_chains3_interleaved()
|
||||
{
|
||||
pruningRule(rule().probability(0.6));
|
||||
seedingRule(rule_atStart(1));
|
||||
weightRule(value(1));
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
/** preconfigured topology: simple interwoven 3-step graph segments */
|
||||
TestChainLoad&&
|
||||
configureShape_simple_short_segments()
|
||||
configureShape_short_segments3_interleaved()
|
||||
{
|
||||
seedingRule(rule().probability(0.8).maxVal(1));
|
||||
reductionRule(rule().probability(0.75).maxVal(3));
|
||||
pruningRule(rule_atJoin(1));
|
||||
weightRule(value(1));
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
|
@ -1077,6 +1100,23 @@ namespace test {
|
|||
|
||||
/**
|
||||
* A calibratable CPU load to be invoked from a node job functor.
|
||||
* Two distinct methods for load generation are provided
|
||||
* - tight loop with arithmetics in register
|
||||
* - repeatedly accessing and adding memory marked as `volatile`
|
||||
* The `timeBase` multiplied with the given `scaleStep´ determines
|
||||
* the actual run time. When using the _memory method_ (`useAllocation`),
|
||||
* a heap block of `staleStep*sizeBase` is used, and the number of
|
||||
* repetitions is chosen such as to match the given timing goal.
|
||||
* @note since performance depends on the platform, it is mandatory
|
||||
* to invoke the [self calibration](\ref ComputationalLoad::calibrate)
|
||||
* at least once prior to use. Performing the calibration with default
|
||||
* base settings is acceptable, since mostly the overall expense is
|
||||
* growing linearly; obviously the calibration is more precisely
|
||||
* however when using the actual `timeBase` and `sizeBase` of
|
||||
* the intended usage. The calibration watches processing
|
||||
* speed in a microbenchmark with `LOAD_BENCHMARK_RUNS`
|
||||
* repetitions; the result is stored in a static
|
||||
* variable and can thus be reused.
|
||||
*/
|
||||
class ComputationalLoad
|
||||
{
|
||||
|
|
@ -1093,43 +1133,49 @@ namespace test {
|
|||
}
|
||||
|
||||
public:
|
||||
microseconds timeBase = 100us;
|
||||
size_t sizeBase = 1000;
|
||||
microseconds timeBase = LOAD_DEFAULT_TIME;
|
||||
size_t sizeBase = LOAD_DEFAULT_MEM_SIZE;
|
||||
bool useAllocation = false;
|
||||
|
||||
/** cause a delay by computational load */
|
||||
double
|
||||
invoke (uint scaleStep =1)
|
||||
{
|
||||
if (scaleStep == 0) return 0;
|
||||
if (scaleStep == 0 or timeBase < 1us)
|
||||
return 0; // disabled
|
||||
return useAllocation? benchmarkTime ([this,scaleStep]{ causeMemProcessLoad (scaleStep); })
|
||||
: benchmarkTime ([this,scaleStep]{ causeComputationLoad(scaleStep); });
|
||||
}
|
||||
|
||||
/** @return averaged runtime in current configuration */
|
||||
double
|
||||
benchmark (uint scaleStep =1)
|
||||
{
|
||||
return microBenchmark ([&]{ invoke(scaleStep);}
|
||||
,LOAD_BENCHMARK_RUNS)
|
||||
.first;
|
||||
.first; // ∅ runtime in µs
|
||||
}
|
||||
|
||||
void
|
||||
calibrate()
|
||||
{
|
||||
cout<<">CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(1)<<endl;
|
||||
TRANSIENTLY(useAllocation) = false;
|
||||
performIncrementalCalibration();
|
||||
useAllocation = true;
|
||||
performIncrementalCalibration();
|
||||
cout<<"<CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(1)<<endl;
|
||||
}
|
||||
|
||||
static void
|
||||
calibrate (microseconds timeBase)
|
||||
void
|
||||
maybeCalibrate()
|
||||
{
|
||||
ComputationalLoad probe;
|
||||
probe.timeBase = timeBase;
|
||||
probe.calibrate();
|
||||
if (not isCalibrated())
|
||||
calibrate();
|
||||
}
|
||||
|
||||
bool
|
||||
isCalibrated() const
|
||||
{
|
||||
return computationSpeed(false) != LOAD_SPEED_BASELINE;
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -1144,7 +1190,7 @@ cout<<"<CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(
|
|||
allocNeeded (uint scaleStep)
|
||||
{
|
||||
auto cnt = roundsNeeded(scaleStep);
|
||||
auto siz = scaleStep * sizeBase;
|
||||
auto siz = max (scaleStep * sizeBase, 1u);
|
||||
auto rep = max (cnt/siz, 1u);
|
||||
// increase size to fit
|
||||
siz = cnt / rep;
|
||||
|
|
@ -1192,7 +1238,6 @@ cout<<"<CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(
|
|||
do {
|
||||
speed = determineSpeed();
|
||||
delta = abs(1.0 - speed/prev);
|
||||
cout<<".CAL: "<<prev<<"->"<<speed<<" Δ="<<delta<<endl;
|
||||
prev = speed;
|
||||
}
|
||||
while (delta > 0.05);
|
||||
|
|
@ -1293,10 +1338,12 @@ cout<<".CAL: "<<prev<<"->"<<speed<<" Δ="<<delta<<endl;
|
|||
using Node = typename TestChainLoad<maxFan>::Node;
|
||||
|
||||
Node* startNode_;
|
||||
ComputationalLoad* compuLoad_;
|
||||
|
||||
public:
|
||||
RandomChainCalcFunctor(Node& startNode)
|
||||
RandomChainCalcFunctor(Node& startNode, ComputationalLoad* load =nullptr)
|
||||
: startNode_{&startNode}
|
||||
, compuLoad_{load}
|
||||
{ }
|
||||
|
||||
|
||||
|
|
@ -1309,7 +1356,9 @@ cout<<".CAL: "<<prev<<"->"<<speed<<" Δ="<<delta<<endl;
|
|||
Node& target = startNode_[nodeIdx];
|
||||
ASSERT (target.level == level);
|
||||
// invoke the »media calculation«
|
||||
cout<<_Fmt{"\n!◆! %s: calc(i=%d, lev:%d)"} % markThread() % nodeIdx % level <<endl;
|
||||
cout<<_Fmt{"\n!◆! %s: calc(i=%d, lev:%d)"} % markThread() % nodeIdx % level <<endl;
|
||||
if (compuLoad_ and target.weight)
|
||||
compuLoad_->invoke (target.weight);
|
||||
target.calculate();
|
||||
}
|
||||
|
||||
|
|
@ -1363,7 +1412,7 @@ cout<<_Fmt{"\n!◆! %s: calc(i=%d, lev:%d)"} % markThread() % nodeIdx % level <<
|
|||
{
|
||||
size_t reachedLevel{0};
|
||||
size_t targetNodeIDX = decodeNodeID (param.invoKey);
|
||||
cout<<_Fmt{"\n!◆!plan...to:%d%19t|curr=%d (max:%d)"} % targetNodeIDX % currIdx_ % maxCnt_<<endl;
|
||||
cout<<_Fmt{"\n!◆!plan...to:%d%19t|curr=%d (max:%d)"} % targetNodeIDX % currIdx_ % maxCnt_<<endl;
|
||||
for ( ; currIdx_<maxCnt_; ++currIdx_)
|
||||
{
|
||||
Node* n = &nodes_[currIdx_];
|
||||
|
|
@ -1413,7 +1462,7 @@ cout<<_Fmt{"%16t|n.(%d,lev:%d)"} % currIdx_ % n->level <<endl;
|
|||
lib::UninitialisedDynBlock<ScheduleSpec> schedule_;
|
||||
|
||||
FrameRate levelSpeed_{1, Duration{_uTicks(1ms)}};
|
||||
uint loadFactor_{2};
|
||||
uint blockLoadFactor_{2};
|
||||
size_t chunkSize_{DEFAULT_CHUNKSIZE};
|
||||
TimeVar startTime_{Time::ANYTIME};
|
||||
microseconds preRoll_{guessPlanningPreroll (chunkSize_)};
|
||||
|
|
@ -1422,6 +1471,7 @@ cout<<_Fmt{"%16t|n.(%d,lev:%d)"} % currIdx_ % n->level <<endl;
|
|||
|
||||
std::promise<void> signalDone_{};
|
||||
|
||||
std::unique_ptr<ComputationalLoad> compuLoad_;
|
||||
std::unique_ptr<RandomChainCalcFunctor<maxFan>> calcFunctor_;
|
||||
std::unique_ptr<RandomChainPlanFunctor<maxFan>> planFunctor_;
|
||||
|
||||
|
|
@ -1476,6 +1526,7 @@ cout <<"--> reschedule to ..."<<nextChunkEndNode<<endl;
|
|||
size_t firstChunkEndNode = calcNextChunkEnd(0)-1;
|
||||
cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
|
||||
schedule_.allocate (numNodes);
|
||||
compuLoad_->maybeCalibrate();
|
||||
startTime_ = anchorStartTime();
|
||||
scheduler_.seedCalcStream (planningJob(firstChunkEndNode)
|
||||
,manID_
|
||||
|
|
@ -1487,7 +1538,8 @@ cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
|
|||
ScheduleCtx (TestChainLoad& mother, Scheduler& scheduler)
|
||||
: chainLoad_{mother}
|
||||
, scheduler_{scheduler}
|
||||
, calcFunctor_{new RandomChainCalcFunctor<maxFan>{chainLoad_.nodes_[0]}}
|
||||
, compuLoad_{new ComputationalLoad}
|
||||
, calcFunctor_{new RandomChainCalcFunctor<maxFan>{chainLoad_.nodes_[0], compuLoad_.get()}}
|
||||
, planFunctor_{new RandomChainPlanFunctor<maxFan>{chainLoad_.nodes_[0], chainLoad_.numNodes_
|
||||
,[this](size_t i, size_t l){ disposeStep(i,l); }
|
||||
,[this](auto* p, auto* s) { setDependency(p,s);}
|
||||
|
|
@ -1515,7 +1567,7 @@ cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
|
|||
ScheduleCtx&&
|
||||
withLoadFactor (uint factor_on_levelSpeed)
|
||||
{
|
||||
loadFactor_ = factor_on_levelSpeed;
|
||||
blockLoadFactor_ = factor_on_levelSpeed;
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
|
|
@ -1543,6 +1595,33 @@ cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
|
|||
manID_ = manID;
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withLoadTimeBase (microseconds timeBase =LOAD_DEFAULT_TIME)
|
||||
{
|
||||
compuLoad_->timeBase = timeBase;
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
deactivateLoad()
|
||||
{
|
||||
compuLoad_->timeBase = 0us;
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withLoadMem (size_t sizeBase =LOAD_DEFAULT_MEM_SIZE)
|
||||
{
|
||||
if (not sizeBase)
|
||||
{
|
||||
compuLoad_->sizeBase = LOAD_DEFAULT_MEM_SIZE;
|
||||
compuLoad_->useAllocation =false;
|
||||
}
|
||||
else
|
||||
{
|
||||
compuLoad_->sizeBase = sizeBase;
|
||||
compuLoad_->useAllocation =true;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
/** push away any existing wait state and attach new clean state */
|
||||
std::future<void>
|
||||
|
|
@ -1609,7 +1688,7 @@ cout<<"ANCHOR="+relT(ank)+" preRoll="+util::toString(_raw(_uTicks(preRoll_)))<<e
|
|||
FrameRate
|
||||
calcLoadHint()
|
||||
{
|
||||
return FrameRate{levelSpeed_ * loadFactor_};
|
||||
return FrameRate{levelSpeed_ * blockLoadFactor_};
|
||||
}
|
||||
|
||||
size_t
|
||||
|
|
@ -1631,7 +1710,7 @@ cout<<"ANCHOR="+relT(ank)+" preRoll="+util::toString(_raw(_uTicks(preRoll_)))<<e
|
|||
the chain-load graph only defines dependencies over one level
|
||||
thus the first level in the next chunk must still be able to attach
|
||||
dependencies to the last row of the preceding chunk, implying that
|
||||
those still need to be ahead of schedule.
|
||||
those still need to be ahead of schedule, and not yet dispatched.
|
||||
*/
|
||||
size_t nextChunkLevel = chainLoad_.nodes_[lastNodeIDX].level;
|
||||
nextChunkLevel = nextChunkLevel>2? nextChunkLevel-2 : 0;
|
||||
|
|
|
|||
|
|
@ -96379,8 +96379,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1699745687140" ID="ID_703752888" MODIFIED="1699745716356" TEXT="es gibt eine Sammlung von Standard-Bausteinen zur Parametrisierung der Steuergrößen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697740857815" ID="ID_1544079509" MODIFIED="1701477281049" TEXT="in separatem Test entwerfen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1697740857815" ID="ID_1544079509" MODIFIED="1702317805054" TEXT="in separatem Test entwerfen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1697741633966" ID="ID_787175245" MODIFIED="1701476481436" TEXT="Nutzen vorher klären">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1697741661950" ID="ID_1735458016" MODIFIED="1697741661950" TEXT="Darstellung der Abhängigkeits-Struktur">
|
||||
|
|
@ -96396,8 +96396,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1697740877587" ID="ID_1275890321" MODIFIED="1702317799986" TEXT="TestChainLoad_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1699747322625" ID="ID_1190216980" MODIFIED="1699804627509" TEXT="verify_Node">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1699753108010" ID="ID_1374103098" MODIFIED="1699754432064" TEXT="Default-Konstruktion">
|
||||
|
|
@ -96767,14 +96767,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702180165409" ID="ID_168687387" MODIFIED="1702234110735" TEXT="verify_computation_load">
|
||||
<node COLOR="#338800" CREATED="1702180165409" ID="ID_168687387" MODIFIED="1702317795714" 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="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180170904" ID="ID_1257116598" MODIFIED="1702180207372" TEXT="prüft die konfigurierbare CPU-Last">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1702180170904" ID="ID_1257116598" MODIFIED="1702317797128" TEXT="prüft die konfigurierbare CPU-Last">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180201092" ID="ID_852013156" MODIFIED="1702180207372" TEXT="verifiziert den Eichungs-Prozeß">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1702180201092" ID="ID_852013156" MODIFIED="1702317798195" TEXT="verifiziert den Eichungs-Prozeß">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701374229504" ID="ID_1338953492" MODIFIED="1701374413822" TEXT="reseed_recalculate">
|
||||
|
|
@ -96813,15 +96813,23 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701838479658" ID="ID_120274201" MODIFIED="1701838586016" TEXT="usageExample">
|
||||
<linktarget COLOR="#bb1868" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" SOURCE="ID_111682569" STARTARROW="None" STARTINCLINATION="-428;0;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1701838479658" ID="ID_120274201" MODIFIED="1702317754549" TEXT="usageExample">
|
||||
<linktarget COLOR="#7718bb" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" SOURCE="ID_111682569" STARTARROW="None" STARTINCLINATION="-428;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1701838487567" ID="ID_535031858" MODIFIED="1701838516891" TEXT="das ist zugleich ein einfacher Integrations-Test">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1701838497798" ID="ID_1377336908" MODIFIED="1701838519142" TEXT="verwendet also einen voll funktionalen Scheduler (und Threadpool)">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1702317761795" ID="ID_662891478" MODIFIED="1702317771621" TEXT="verwendet einen einfachen vorkonfigurierten Graphen"/>
|
||||
<node COLOR="#338800" CREATED="1702317772680" ID="ID_1058689959" MODIFIED="1702317791471" TEXT="alles auf Default-Einstellungen (-> 100µs compuLoad)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701374229504" ID="ID_521071616" MODIFIED="1702319695136" TEXT="verify_runtime_reference">
|
||||
<linktarget COLOR="#51c3bc" DESTINATION="ID_521071616" ENDARROW="Default" ENDINCLINATION="-721;75;" ID="Arrow_ID_734579827" SOURCE="ID_393831927" STARTARROW="None" STARTINCLINATION="-378;-41;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1701017861080" ID="ID_797249846" MODIFIED="1701017874112" TEXT="nur begrenzte Verifikation">
|
||||
|
|
@ -99442,8 +99450,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699746891934" ID="ID_1003055056" MODIFIED="1699803875494" TEXT="Node">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1699746891934" ID="ID_1003055056" MODIFIED="1702317366383" TEXT="Node">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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">
|
||||
|
|
@ -99483,8 +99491,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#621ebb" DESTINATION="ID_96811527" ENDARROW="Default" ENDINCLINATION="374;25;" ID="Arrow_ID_1925771236" SOURCE="ID_1681365504" STARTARROW="None" STARTINCLINATION="135;10;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</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="1699747521150" FOLDED="true" ID="ID_356376425" MODIFIED="1702317355301" TEXT="kann durch Repetitionen aufwendig gemacht werden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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"/>
|
||||
|
|
@ -99536,8 +99544,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702175359697" ID="ID_514427629" MODIFIED="1702264066131" TEXT="entwickle eine einfache reine lokale CPU-Last">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1702175359697" ID="ID_514427629" MODIFIED="1702267758299" TEXT="entwickle eine einfache reine lokale CPU-Last">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1702175912809" ID="ID_163082441" MODIFIED="1702264184671" TEXT="als eigenständige Komponente realisiert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
|
|
@ -99567,37 +99575,49 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1702238439254" ID="ID_1895497300" MODIFIED="1702238456061">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
also: <b>beides</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702252767113" ID="ID_688715635" MODIFIED="1702252791529">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
legt die Eichungs-Konstanten <i><font color="#152eb7">statisch </font></i>ab
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1702252795573" ID="ID_1426973621" MODIFIED="1702252808439" TEXT="wichtig für effizienten Einsatz in Lasttest-Szenarien"/>
|
||||
<node CREATED="1702252814273" ID="ID_184752238" MODIFIED="1702252838764" TEXT="muß dafür eine gewisse Kohärenz der Eichung gewährleisten">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702311347888" ID="ID_1541319663" MODIFIED="1702311350974" TEXT="Konfiguration">
|
||||
<node CREATED="1702311351992" ID="ID_1339903427" MODIFIED="1702311362539" TEXT="direkt per Zuweisung an public-Felder"/>
|
||||
<node CREATED="1702311363310" ID="ID_1357141980" MODIFIED="1702311365148" TEXT="timeBase">
|
||||
<node CREATED="1702311372795" ID="ID_1086898760" MODIFIED="1702311385352" TEXT="0 ⟹ deaktiviert global"/>
|
||||
<node COLOR="#338800" CREATED="1702311434066" ID="ID_1184187363" MODIFIED="1702311445277" TEXT="per explizitem Check in invoke()">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702311365794" ID="ID_918700853" MODIFIED="1702311367890" TEXT="sizeBase">
|
||||
<node CREATED="1702311387387" ID="ID_1522029265" MODIFIED="1702311419281" TEXT="0 ⟹ 1 Repetition und Allokation in benötigter Größe">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702311422412" ID="ID_1741888978" MODIFIED="1702311430647" TEXT="gegen division by zero schützen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702311368502" ID="ID_735670100" MODIFIED="1702311371089" TEXT="useAllocation"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702176870348" ID="ID_1843992678" MODIFIED="1702264178196" 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">
|
||||
|
|
@ -99606,7 +99626,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#435e98" CREATED="1702177290852" ID="ID_67369431" MODIFIED="1702264175024" TEXT="muß dafür mehrere microbenchmark-Läufe machen">
|
||||
<node COLOR="#435e98" CREATED="1702177290852" FOLDED="true" ID="ID_67369431" MODIFIED="1702264175024" TEXT="muß dafür mehrere microbenchmark-Läufe machen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<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"/>
|
||||
|
|
@ -99626,8 +99646,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702180295927" ID="ID_773261601" MODIFIED="1702264050859" TEXT="Komponente testen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1702180295927" ID="ID_773261601" MODIFIED="1702267755882" TEXT="Komponente testen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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"/>
|
||||
|
|
@ -99636,9 +99656,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#c26a36" DESTINATION="ID_168687387" ENDARROW="Default" ENDINCLINATION="-214;715;" ID="Arrow_ID_917319622" STARTARROW="None" STARTINCLINATION="-169;-474;"/>
|
||||
<node COLOR="#435e98" CREATED="1702245098652" ID="ID_1449908056" MODIFIED="1702263276344" TEXT="Fehler im Test?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
schwierig...
|
||||
|
|
@ -99653,8 +99671,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Stelle schon mal fest: der Einzel-Lauf streut ganz deutlich. Und Cache-Effekte könnten auch noch ein gewisses Problem darstellen (wenngleich auch der vorangegangene Test grundsätzlich den Code schon <i>vorgewärmt</i>  hat. Also setze mal  ±30% für den Einzeltest an, aber nur ±10% für den Benchmark
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702263260126" ID="ID_1499147739" MODIFIED="1702264010690" TEXT="funktioniert ordentlich">
|
||||
|
|
@ -99664,9 +99681,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702265746035" ID="ID_1709742498" MODIFIED="1702265757916" TEXT="größere Timebase ⟶ schneller"/>
|
||||
<node CREATED="1702263578440" ID="ID_1625923973" MODIFIED="1702264017267" TEXT="mem wird langsamer">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
bei..
|
||||
|
|
@ -99678,15 +99693,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
sizeBase = 100000 ⟼ +10-20%
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</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 COLOR="#338800" CREATED="1702178041646" ID="ID_1422218309" MODIFIED="1702317312550" TEXT="für den konkreten Test wird dann eine Skalen-Stufe gewählt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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="1702232275607" ID="ID_94944522" MODIFIED="1702232381062" TEXT="timeBase in µs">
|
||||
|
|
@ -99696,22 +99710,70 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702178113354" ID="ID_1844351587" MODIFIED="1702178121761" TEXT="der Eichfaktor aus der Kalibrierung">
|
||||
<node CREATED="1702232275607" ID="ID_1593878835" MODIFIED="1702264132798" TEXT="computationSpeed()">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
repetitions/µs
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#61778b" DESTINATION="ID_1593878835" ENDARROW="Default" ENDINCLINATION="138;-14;" ID="Arrow_ID_193276040" SOURCE="ID_683123783" STARTARROW="None" STARTINCLINATION="54;3;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702264216478" ID="ID_1256970210" MODIFIED="1702265717124" TEXT="per default mit 100µs aktiv">
|
||||
<node COLOR="#338800" CREATED="1702310848627" FOLDED="true" ID="ID_1289981656" MODIFIED="1702317329910" TEXT="Einbindung: erst über den konkreten ScheduleCtx">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1702312063775" ID="ID_1912884451" MODIFIED="1702312437576" TEXT="dort in einem unique_ptr gehalten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702310867865" ID="ID_598880651" MODIFIED="1702312441519" TEXT="default-konstruiert und in den RandomChainCalcFunctor injiziert (ctor-DI)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702310926577" ID="ID_160715907" MODIFIED="1702313285602" TEXT="setter-Builder">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1702310949446" ID="ID_1499329976" MODIFIED="1702313288220" TEXT="withLoadTimeBase(...)">
|
||||
<node CREATED="1702311075735" ID="ID_1004880566" MODIFIED="1702313351230" TEXT="0 deaktiviert insgesamt">
|
||||
<linktarget COLOR="#6d7b8c" DESTINATION="ID_1004880566" ENDARROW="Default" ENDINCLINATION="-21;33;" ID="Arrow_ID_38394156" SOURCE="ID_1684899351" STARTARROW="None" STARTINCLINATION="36;6;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702313291182" ID="ID_1684899351" MODIFIED="1702313356715" TEXT="deactivateLoad()">
|
||||
<arrowlink COLOR="#6d7b8c" DESTINATION="ID_1004880566" ENDARROW="Default" ENDINCLINATION="-21;33;" ID="Arrow_ID_38394156" STARTARROW="None" STARTINCLINATION="36;6;"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702310996616" ID="ID_9783829" MODIFIED="1702313288221" TEXT="withLoadMem(sizeBase)">
|
||||
<node CREATED="1702311031331" ID="ID_321137191" MODIFIED="1702311042151" TEXT="0 deaktiviert / schaltet auf CPU-Load zurück"/>
|
||||
<node CREATED="1702313163837" ID="ID_1098561635" MODIFIED="1702313171544" TEXT="sonst: aktiviert auch die Memory-Methode"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702311129039" ID="ID_331667454" MODIFIED="1702312496254" TEXT="automatisch einmal kalibrieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1702312477365" ID="ID_1388538795" MODIFIED="1702312495685" TEXT="im performRun()">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702312482009" ID="ID_1090639427" MODIFIED="1702312494941" TEXT="prüft ob statische Kalibrierung vom Default abweicht">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702312397572" ID="ID_1288275386" MODIFIED="1702312421687" TEXT="im RandomChainCalcFunctor optional">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1702312422706" ID="ID_468355442" MODIFIED="1702312433486" TEXT="aufrufen wenn vorhanden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702312427184" ID="ID_1377239804" MODIFIED="1702312432800" TEXT="und Node eine weight hat">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702264216478" ID="ID_1256970210" MODIFIED="1702313387597" TEXT="per default mit 100µs aktiv">
|
||||
<arrowlink COLOR="#f41958" DESTINATION="ID_880925728" ENDARROW="Default" ENDINCLINATION="91;4;" ID="Arrow_ID_669621335" STARTARROW="None" STARTINCLINATION="-10;15;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1702310607196" ID="ID_1584452918" MODIFIED="1702313392698" TEXT="jdoch keine default-Node-Regel (default = pobability 0)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702310617411" ID="ID_495203598" MODIFIED="1702313394870" TEXT="ComputationLoad wird zwar aufgerufen, kehrt aber sofort zurück">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702310654134" ID="ID_1971907846" MODIFIED="1702317309286" TEXT="in Standard-Regelsätze mit scaleStep = 1 eingebaut">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702264248082" ID="ID_880925728" MODIFIED="1702265717124" TEXT="⟹ Konsequenz: muß Graph-Berechnung statisch messen können">
|
||||
|
|
@ -99739,7 +99801,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702158518149" ID="ID_1079943297" MODIFIED="1702173712470" TEXT="Hash aus mehreren Exit-Nodes kombinieren">
|
||||
<node COLOR="#338800" CREATED="1702158518149" FOLDED="true" ID="ID_1079943297" MODIFIED="1702173712470" TEXT="Hash aus mehreren Exit-Nodes kombinieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1702158566367" ID="ID_523736559" MODIFIED="1702163792736" TEXT="Spezialfall-Behandlung: nur eine Exit-Node">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
@ -100014,7 +100076,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#11660e" CREATED="1700761069915" ID="ID_557518427" MODIFIED="1700761165588" TEXT="Basis: »ziehen« von Zufallszahlen aus dem Hash ⟶ lib::RandomDraw">
|
||||
<arrowlink COLOR="#719f60" DESTINATION="ID_1225692248" ENDARROW="Default" ENDINCLINATION="-466;214;" ID="Arrow_ID_834549033" STARTARROW="None" STARTINCLINATION="241;10;"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701012898916" ID="ID_1931960006" MODIFIED="1701476590458" TEXT="Regel-Baukasten aufbauen">
|
||||
<node COLOR="#338800" CREATED="1701012898916" FOLDED="true" ID="ID_1931960006" MODIFIED="1702317469442" TEXT="Regel-Baukasten aufbauen">
|
||||
<arrowlink COLOR="#5a509e" DESTINATION="ID_1092101612" ENDARROW="Default" ENDINCLINATION="8;265;" ID="Arrow_ID_362060244" STARTARROW="None" STARTINCLINATION="415;-28;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1701313975373" HGAP="49" ID="ID_1693658322" MODIFIED="1701314186518" TEXT="Bausteine" VSHIFT="14">
|
||||
|
|
@ -100055,6 +100117,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702317426755" HGAP="33" ID="ID_1821826492" MODIFIED="1702317441058" TEXT="vorkonfigurierte Standard-Graphen" VSHIFT="-3">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1702317450817" MODIFIED="1702317450817" TEXT="configureShape_short_chains2"/>
|
||||
<node CREATED="1702317456195" ID="ID_1445949540" MODIFIED="1702317456195" TEXT="configureShape_short_chains3_interleaved"/>
|
||||
<node CREATED="1702317460960" ID="ID_1823731538" MODIFIED="1702317460960" TEXT="configureShape_short_segments3_interleaved"/>
|
||||
<node CREATED="1702317462619" ID="ID_739952809" MODIFIED="1702317464487" TEXT="..."/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701225831100" ID="ID_502326802" MODIFIED="1701225843337" TEXT="seed und shufle zur Auswahl von Varianten">
|
||||
|
|
@ -100916,7 +100985,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1701033623128" ID="ID_1915341389" MODIFIED="1701033635439" TEXT="durch das Löschen wird ein sehr naheliegender Fehler vermieden"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701033495195" ID="ID_193483520" MODIFIED="1701374413822" TEXT="Ergebnisse im Test verifizieren">
|
||||
<node COLOR="#338800" CREATED="1701033495195" FOLDED="true" ID="ID_193483520" MODIFIED="1701374413822" TEXT="Ergebnisse im Test verifizieren">
|
||||
<arrowlink COLOR="#51c3bc" DESTINATION="ID_1338953492" ENDARROW="Default" ENDINCLINATION="-572;68;" ID="Arrow_ID_1159113647" STARTARROW="None" STARTINCLINATION="-272;-345;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701033509532" ID="ID_1793560814" MODIFIED="1701033521653" TEXT="Filter-Prägdikate: isStart und isExit">
|
||||
|
|
@ -100996,21 +101065,27 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702264442593" ID="ID_1012991246" MODIFIED="1702264507186" TEXT="lineare Berechnungs-Zeit mühsam bis unmöglich zu ermitteln">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1702264696031" ID="ID_1280925602" MODIFIED="1702264716392" TEXT="daher Benchmark eines Berechnungs-Durchganges"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702264680182" ID="ID_1945693212" MODIFIED="1702264692151" TEXT="kann man einen theoretischen Concurrency-Faktor bestimmen?">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702264696031" ID="ID_1280925602" MODIFIED="1702319553572" TEXT="daher Benchmark eines Berechnungs-Durchganges als Operator anbieten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702319679776" ID="ID_102349499" MODIFIED="1702319686670" TEXT="calcRuntimeReference">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701033495195" ID="ID_393831927" MODIFIED="1702319695136" TEXT="einfacher Test">
|
||||
<arrowlink COLOR="#51c3bc" DESTINATION="ID_521071616" ENDARROW="Default" ENDINCLINATION="-721;75;" ID="Arrow_ID_734579827" STARTARROW="None" STARTINCLINATION="-378;-41;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702264680182" ID="ID_1945693212" MODIFIED="1702319534283" TEXT="kann man einen theoretischen Concurrency-Faktor bestimmen?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1702265262323" ID="ID_1908727445" MODIFIED="1702265353793" TEXT="ja ... die Datenstruktur ist günstig">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und zwar der Umstand, daß die Nodes <i>innerhalb eines Levels stets voneinander unabhängig sind; </i>deshalb sind <i>zumindest</i> diese Nodes komplett parallelisierbar
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1702265418472" ID="ID_565310505" MODIFIED="1702265468382" TEXT="Beschleunigungsfaktor: ∅w / floor(∅w/concurrency)">
|
||||
|
|
@ -101018,9 +101093,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700105555476" ID="ID_587761135" MODIFIED="1700105558876" TEXT="Scheduling">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1701488317653" ID="ID_502099140" MODIFIED="1702158167293" TEXT="Art der Integration festlegen">
|
||||
<node COLOR="#338800" CREATED="1700105555476" ID="ID_587761135" MODIFIED="1702317677406" TEXT="Scheduling">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701488317653" FOLDED="true" ID="ID_502099140" MODIFIED="1702317515953" TEXT="Art der Integration festlegen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701488246119" ID="ID_518382795" LINK="#ID_53693227" MODIFIED="1701488287933" TEXT="Bezug zur »Encodierung von Job-Argumenten«">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701490186822" ID="ID_658348473" MODIFIED="1701490206342" TEXT="#1295 job invocation parameter representation">
|
||||
|
|
@ -101057,7 +101132,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1701488366430" ID="ID_1676473919" MODIFIED="1702158165070" TEXT="Steuerung des Zugriffs">
|
||||
<node COLOR="#435e98" CREATED="1701488366430" FOLDED="true" ID="ID_1676473919" MODIFIED="1702158165070" TEXT="Steuerung des Zugriffs">
|
||||
<node CREATED="1701488374014" ID="ID_923328966" MODIFIED="1701488576222">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
|
|
@ -101251,17 +101326,20 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701488306399" ID="ID_437847189" MODIFIED="1701488325489" TEXT="Schinttstelle bestimmen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1701488306399" ID="ID_437847189" MODIFIED="1702317522045" TEXT="Schinttstelle bestimmen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1701735941318" ID="ID_838192654" MODIFIED="1701735953071" TEXT="die Job-Functoren sind low-Level"/>
|
||||
<node CREATED="1701735956675" ID="ID_1255143540" MODIFIED="1701735980625" TEXT="TestChainLoad hat Schedule-Operator">
|
||||
<node CREATED="1701736001878" ID="ID_512576307" MODIFIED="1701736016095" TEXT="dieser bekommt die Scheduling-Charakteristiken"/>
|
||||
<node CREATED="1701736046063" ID="ID_1447466146" MODIFIED="1701736059002" TEXT="und eine Referenz auf den Scheduler"/>
|
||||
</node>
|
||||
<node CREATED="1702317536683" ID="ID_575047185" MODIFIED="1702317601938" TEXT="Testlauf wird blockend abgewartet">
|
||||
<arrowlink COLOR="#4867b6" DESTINATION="ID_735638406" ENDARROW="Default" ENDINCLINATION="-581;-687;" ID="Arrow_ID_1897270044" STARTARROW="None" STARTINCLINATION="-174;14;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701493065993" ID="ID_1474617887" MODIFIED="1701493070377" TEXT="Implementierung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1701548966576" ID="ID_1078499413" MODIFIED="1701838335253" TEXT="Basis und Rahmen">
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701493065993" ID="ID_1474617887" MODIFIED="1702317613548" TEXT="Implementierung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701548966576" FOLDED="true" ID="ID_1078499413" MODIFIED="1701838335253" TEXT="Basis und Rahmen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701549002234" ID="ID_1561610431" MODIFIED="1701735925477" TEXT="Design-Fragen zu klären">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -101594,7 +101672,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701493082582" ID="ID_1894179968" MODIFIED="1701661794782" TEXT="Dispatcher-Job implementieren">
|
||||
<node COLOR="#338800" CREATED="1701493082582" FOLDED="true" ID="ID_1894179968" MODIFIED="1701661794782" TEXT="Dispatcher-Job implementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701661796628" ID="ID_561235182" MODIFIED="1701661828350" TEXT="verwendet einen FixedFrameQuantiser (Meyer's Singleton)">
|
||||
<linktarget COLOR="#74bda6" DESTINATION="ID_561235182" ENDARROW="Default" ENDINCLINATION="1286;0;" ID="Arrow_ID_794806390" SOURCE="ID_207437696" STARTARROW="None" STARTINCLINATION="403;33;"/>
|
||||
|
|
@ -101614,7 +101692,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701493075903" ID="ID_114421309" MODIFIED="1701735887233" TEXT="Meta-Job implementieren">
|
||||
<node COLOR="#338800" CREATED="1701493075903" FOLDED="true" ID="ID_114421309" MODIFIED="1701735887233" TEXT="Meta-Job implementieren">
|
||||
<linktarget COLOR="#546bbc" DESTINATION="ID_114421309" ENDARROW="Default" ENDINCLINATION="-34;-130;" ID="Arrow_ID_234763232" SOURCE="ID_1982023018" STARTARROW="None" STARTINCLINATION="-98;10;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1701692565258" ID="ID_706254089" MODIFIED="1701702780297" TEXT="nun doch die Operationen als λ">
|
||||
|
|
@ -101647,7 +101725,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702012511964" ID="ID_788253401" MODIFIED="1702094456903" TEXT="Logik umprogrammieren auf vorgegebene Node-Zahl">
|
||||
<node COLOR="#338800" CREATED="1702012511964" FOLDED="true" ID="ID_788253401" MODIFIED="1702094456903" TEXT="Logik umprogrammieren auf vorgegebene Node-Zahl">
|
||||
<linktarget COLOR="#466a91" DESTINATION="ID_788253401" ENDARROW="Default" ENDINCLINATION="-2;380;" ID="Arrow_ID_1856813245" SOURCE="ID_1304679964" STARTARROW="None" STARTINCLINATION="-149;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1702080463433" ID="ID_479353313" MODIFIED="1702080490992">
|
||||
|
|
@ -101677,12 +101755,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702081414108" ID="ID_273894390" MODIFIED="1702081435384" TEXT="⟹ also: Zugriff auf den Chain-Load-Grapen um die Deadline festzulegen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701493107387" ID="ID_1826192324" MODIFIED="1701814987380" TEXT="Aufruf-front-End">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1701493107387" FOLDED="true" ID="ID_1826192324" MODIFIED="1702317660104" TEXT="Aufruf-front-End">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1701814975960" ID="ID_1515169294" MODIFIED="1701814982780" TEXT="move-only">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701800889991" ID="ID_735638406" MODIFIED="1701800928579" TEXT="Gefahr: Rahmen muß am Leben bleiben bis zum Ende">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701800889991" ID="ID_735638406" MODIFIED="1702317601938" TEXT="Gefahr: Rahmen muß am Leben bleiben bis zum Ende">
|
||||
<linktarget COLOR="#4867b6" DESTINATION="ID_735638406" ENDARROW="Default" ENDINCLINATION="-581;-687;" ID="Arrow_ID_1897270044" SOURCE="ID_575047185" STARTARROW="None" STARTINCLINATION="-174;14;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1701800940860" ID="ID_962597170" MODIFIED="1701801201157" TEXT="bedingt durch das Builder-API ist das nicht klar">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
|
|
@ -101698,7 +101777,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<font NAME="SansSerif" SIZE="8"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701913043245" ID="ID_445438847" MODIFIED="1702094487984" TEXT="bessere Steuerung des Completion-Callback">
|
||||
<node COLOR="#338800" CREATED="1701913043245" FOLDED="true" ID="ID_445438847" MODIFIED="1702094487984" TEXT="bessere Steuerung des Completion-Callback">
|
||||
<linktarget COLOR="#594b6a" DESTINATION="ID_445438847" ENDARROW="Default" ENDINCLINATION="-1207;75;" ID="Arrow_ID_1132943593" SOURCE="ID_1739832819" STARTARROW="None" STARTINCLINATION="-73;-483;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1701995129106" ID="ID_1885461201" MODIFIED="1701995147012">
|
||||
|
|
@ -101885,12 +101964,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1701838412722" ID="ID_794626379" MODIFIED="1701838420687" TEXT="einfacher Intergrationstest">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701838524907" ID="ID_111682569" MODIFIED="1701838595646" TEXT="als »usageExample« für TestChainLoad">
|
||||
<arrowlink COLOR="#bb1868" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" STARTARROW="None" STARTINCLINATION="-428;0;"/>
|
||||
<node COLOR="#338800" CREATED="1701838412722" FOLDED="true" ID="ID_794626379" MODIFIED="1702317747548" TEXT="einfacher Intergrationstest">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1701838524907" ID="ID_111682569" MODIFIED="1702317738736" TEXT="als »usageExample« für TestChainLoad">
|
||||
<arrowlink COLOR="#7718bb" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" STARTARROW="None" STARTINCLINATION="-428;0;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1701838598906" ID="ID_1235285916" MODIFIED="1701990865812" TEXT="bleibt hängen ⟶ Timeout">
|
||||
<node COLOR="#435e98" CREATED="1701838598906" FOLDED="true" ID="ID_1235285916" MODIFIED="1702309489443" TEXT="bleibt hängen ⟶ Timeout">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node COLOR="#338800" CREATED="1701843677557" ID="ID_619867364" MODIFIED="1701990950803" TEXT="offensichtlicher Fehler: muß dem ersten Plan-Job natürlich einen Offset geben">
|
||||
<arrowlink COLOR="#3c5b80" DESTINATION="ID_1631524816" ENDARROW="Default" ENDINCLINATION="84;-7;" ID="Arrow_ID_1725054435" STARTARROW="None" STARTINCLINATION="80;3;"/>
|
||||
|
|
@ -102024,6 +102104,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702309463826" ID="ID_630072282" MODIFIED="1702309485702">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<u>Fazit</u>: durch Rückbau des Gate-re-Scheduling behoben
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1701912890618" ID="ID_1069989280" MODIFIED="1701912903449" TEXT="weitere Beobachtungen">
|
||||
<icon BUILTIN="list"/>
|
||||
|
|
@ -102033,7 +102124,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1701976331272" ID="ID_820013502" LINK="#ID_1254835545" MODIFIED="1701976374698" TEXT="mußte wirklich die Steuer-Logik reparieren....">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1701976387256" ID="ID_1657524395" MODIFIED="1701976708995" TEXT="jetzt funktioniert es wunschgemäß">
|
||||
<node COLOR="#435e98" CREATED="1701976387256" FOLDED="true" ID="ID_1657524395" MODIFIED="1701976708995" TEXT="jetzt funktioniert es wunschgemäß">
|
||||
<arrowlink COLOR="#6478c8" DESTINATION="ID_802885873" ENDARROW="Default" ENDINCLINATION="36;-60;" ID="Arrow_ID_676956631" STARTARROW="None" STARTINCLINATION="-30;44;"/>
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1701976413221" ID="ID_119859495" MODIFIED="1701976419769" TEXT="ignite() passiert einmal"/>
|
||||
|
|
@ -102117,7 +102208,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1702012175699" ID="ID_247790637" MODIFIED="1702012199043" TEXT="im Besonderen wenn die ganze WorkForce kurz nach dem Tick geballt auftaucht"/>
|
||||
<node CREATED="1702012202351" ID="ID_622532522" MODIFIED="1702012248862" TEXT="hat in einem Fall 5ms gedauert, bis sich der Dispatch bis an den Schedule gearbeitet hat"/>
|
||||
<node COLOR="#435e98" CREATED="1702012419402" ID="ID_2703596" MODIFIED="1702075109191" TEXT="unklar: ist der Umgang mit der Contention effizient / ineffizient?">
|
||||
<node COLOR="#435e98" CREATED="1702012419402" FOLDED="true" ID="ID_2703596" MODIFIED="1702309420662" TEXT="unklar: ist der Umgang mit der Contention effizient / ineffizient?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1702068730383" ID="ID_939170295" MODIFIED="1702068733719" TEXT="Beobachtungen">
|
||||
<node CREATED="1702068734834" ID="ID_1770589762" MODIFIED="1702068748470" TEXT="die Contention tritt (nur) auf beim Abarbeiten eines »backlog«"/>
|
||||
|
|
@ -102233,10 +102324,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#7e496c" DESTINATION="ID_616818979" ENDARROW="Default" ENDINCLINATION="1590;-261;" ID="Arrow_ID_359699316" STARTARROW="None" STARTINCLINATION="707;25;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702012250472" ID="ID_1150173173" MODIFIED="1702075177129">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702012250472" FOLDED="true" ID="ID_1150173173" MODIFIED="1702075177129">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -102376,7 +102468,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702075831901" ID="ID_1933660911" MODIFIED="1702075861290" TEXT="Karenz-Zeit(Grooming) ⟹ Dichte-Limit (DEBUG: 3 Tasks / 100µs)"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702087135999" ID="ID_1116666606" MODIFIED="1702087157529" TEXT="Drastisch entgleister Testlauf">
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702087135999" FOLDED="true" ID="ID_1116666606" MODIFIED="1702087157529" TEXT="Drastisch entgleister Testlauf">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1702087159620" ID="ID_872269266" MODIFIED="1702087167941" TEXT="muß das Zeug irgendwo dokumentieren">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
|
|
@ -102487,27 +102579,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1702076009462" ID="ID_485796782" MODIFIED="1702076013414" TEXT="TOD-Oh">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1702076118040" ID="ID_1646791544" MODIFIED="1702076135046" TEXT="Einsichten in der Mindmap aufschreiben"/>
|
||||
<node CREATED="1702076136898" ID="ID_1934895235" MODIFIED="1702076145387" TEXT="Planung der Dokumentation"/>
|
||||
<node CREATED="1702076163209" ID="ID_1341902785" MODIFIED="1702076173572" TEXT="den verf**ten Test nun endlich fertig bekommen">
|
||||
<node COLOR="#338800" CREATED="1702076310654" ID="ID_1949942178" MODIFIED="1702233605547" TEXT="pre-Roll besser schätzen">
|
||||
<node COLOR="#338800" CREATED="1702317700442" ID="ID_1710994860" MODIFIED="1702317716582" TEXT="nach Integration der Coputation-Load: weiterhin glatt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702076363983" ID="ID_1118507080" MODIFIED="1702094437747" TEXT="wake-Up-Job genauer timen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702076180112" ID="ID_587585848" MODIFIED="1702076185302" TEXT="Ticket abschließen"/>
|
||||
<node COLOR="#338800" CREATED="1702076194614" ID="ID_560462139" MODIFIED="1702233613652" TEXT="Exit-Hash-Verknüpfung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702076274883" ID="ID_53147677" LINK="#ID_514427629" MODIFIED="1702234096377" TEXT="Computation-Load">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node CREATED="1702076289573" ID="ID_1400286686" MODIFIED="1702076302209" TEXT="Ziele / Plan für KPI formuieren"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -102692,8 +102766,16 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node CREATED="1701977587127" ID="ID_359746928" MODIFIED="1701977609244" TEXT="Scheduler verfügbar nach 2ms"/>
|
||||
<node CREATED="1701977515433" ID="ID_874906164" MODIFIED="1701977547419" TEXT="Faustformel: 1·planen ≙ 100µs"/>
|
||||
<node CREATED="1702308936671" FOLDED="true" ID="ID_1786089739" MODIFIED="1702309164395" TEXT="Dispatch/Laststeuerung">
|
||||
<icon BUILTIN="clock"/>
|
||||
<node CREATED="1702308948599" ID="ID_291487865" MODIFIED="1702308965383" TEXT="Poll-Zyklus(uncontended): 15µs"/>
|
||||
<node CREATED="1702308966339" ID="ID_1363442304" MODIFIED="1702308976791" TEXT="Poll-Zyklus(contended): 50µs"/>
|
||||
<node CREATED="1702308979114" ID="ID_632440435" MODIFIED="1702309010346" TEXT="Übernahme ⟶ drop-Grooming: 30µs"/>
|
||||
<node CREATED="1702309058200" ID="ID_1888511103" MODIFIED="1702309098838" TEXT="Abarbeiten der Kette eines „praktisch leeren“ Jobs: 80µs"/>
|
||||
<node CREATED="1702309135573" ID="ID_85007648" MODIFIED="1702309146250" TEXT="Abarbeiten bis zum failed Gate-check: 25µs"/>
|
||||
</node>
|
||||
<node COLOR="#16515f" CREATED="1701977287887" HGAP="52" ID="ID_860609942" MODIFIED="1701977997582" TEXT="Timings(release)" VSHIFT="55">
|
||||
</node>
|
||||
<node COLOR="#16515f" CREATED="1701977287887" HGAP="55" ID="ID_860609942" MODIFIED="1701977997582" TEXT="Timings(release)" VSHIFT="56">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node BACKGROUND_COLOR="#8892ba" COLOR="#435e98" CREATED="1701978004448" HGAP="31" ID="ID_1521359529" MODIFIED="1701978094945" STYLE="bubble" TEXT="(wartet auf Release-Build)" VSHIFT="20">
|
||||
<font NAME="SansSerif" SIZE="9"/>
|
||||
|
|
@ -102739,7 +102821,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698449617586" ID="ID_1388229244" MODIFIED="1698450803071" TEXT="hot-polling on Grooming-Token?">
|
||||
<linktarget COLOR="#7f5d5b" DESTINATION="ID_1388229244" ENDARROW="Default" ENDINCLINATION="1570;-56;" ID="Arrow_ID_1744066292" SOURCE="ID_1023610173" STARTARROW="None" STARTINCLINATION="1233;109;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1698449890835" HGAP="30" ID="ID_913093042" MODIFIED="1698450576260" TEXT="das scheint eine ehr akademische Frage" VSHIFT="28">
|
||||
<node CREATED="1698449890835" HGAP="30" ID="ID_913093042" MODIFIED="1698450576260" TEXT="das scheint eine ehr akademische Frage" VSHIFT="64">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -102760,6 +102842,61 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<arrowlink COLOR="#9198a2" DESTINATION="ID_1389677902" ENDARROW="Default" ENDINCLINATION="-297;15;" ID="Arrow_ID_16649799" STARTARROW="None" STARTINCLINATION="209;9;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1702307651060" HGAP="14" ID="ID_38541116" MODIFIED="1702307688251" TEXT="verhält sich aber unter extremen Tests problematisch">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1702307703437" ID="ID_616818979" MODIFIED="1702309412724" TEXT="und zwar wenn....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
die eigentlichen Work-Jobs<i> praktisch nix zu tun haben</i>
|
||||
</li>
|
||||
<li>
|
||||
mehr als 3 Worker um das Grooming-Token konkurrieren (bei 3 Workern ist ∅ keine Verzögerung verststellbar, auch wenn sie ziemlich viel herumeiern)
|
||||
</li>
|
||||
<li>
|
||||
nacheinander mehrere Jobs geprüft werden, die dann jeweils nicht ausführbar sind
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Der zuletzt genannte Punkt ist <b>inhärent problematisch<i> </i></b><i>— </i>es würde sich nicht lohnen, das Grooming-Token zu droppen, da der bloße Check weniger als 1µs kostet, der Test auf das Grooming-Token danach aber wieder 10-20µs. Unter <b>Contention</b> allerdings kann sich eine solche Prüf-Kette <b>auf 100-200µs ausdehnen</b>, und während der Zeit passiert sonst praktisch nix.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#7e496c" DESTINATION="ID_616818979" ENDARROW="Default" ENDINCLINATION="1590;-261;" ID="Arrow_ID_359699316" SOURCE="ID_999152455" STARTARROW="None" STARTINCLINATION="707;25;"/>
|
||||
</node>
|
||||
<node CREATED="1702308143827" ID="ID_528067239" MODIFIED="1702308198872" TEXT="Parallelisierung prakisch unmöglich"/>
|
||||
<node CREATED="1702308199854" ID="ID_810936180" MODIFIED="1702308283316" TEXT="Verarbeitung wird durch Contention deutlich langsamer">
|
||||
<arrowlink COLOR="#b94a54" DESTINATION="ID_1972684777" ENDARROW="Default" ENDINCLINATION="62;-26;" ID="Arrow_ID_1309390811" STARTARROW="None" STARTINCLINATION="-306;0;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702308251821" ID="ID_1972684777" MODIFIED="1702308278020" TEXT="Contention-Bremse?">
|
||||
<linktarget COLOR="#b94a54" DESTINATION="ID_1972684777" ENDARROW="Default" ENDINCLINATION="62;-26;" ID="Arrow_ID_1309390811" SOURCE="ID_810936180" STARTARROW="None" STARTINCLINATION="-306;0;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702308286759" ID="ID_1416310165" MODIFIED="1702308706928" TEXT="Ausgangspunkt: Zugriffs-Phase verlängert sich deutlich unter Contention">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
unter »Zugriffs-Phase« verstehe ich die Zeit, während der die Queues modifiziert werden müssen, was nur exklusiv von einem Thread gemacht werden kann (erst danach könnte dieser mit eigentlicher Arbeit „weggehen“). Das Problem ist nun: wenn wir im Rückstau sind, dann werden alle Threads an die Head-Time geschickt. Dort <i>drehen sie dann am Rad </i>und machen dadurch alles viel langsamer
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1702308567135" ID="ID_1246493114" MODIFIED="1702308703800" TEXT="Relevanz ist noch unklar....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...wir reden hier über Abläufe in der Größenordnung der »Grund-Unschärfe« (100µs); und das Problem tritt nur auf, wenn die eigentliche Aktion in der gleichen (kurzen) Zeit erledigt sein könnte. Wenn dagegen 500µs gearbeitet werden müßte, sollte sich das Verhalten (theoretisch) von selbst entspannen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698454549032" ID="ID_1970723448" MODIFIED="1698454589468" TEXT="Activity-Lang: processing setzt auf einem Proc-State auf">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
@ -102794,6 +102931,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698933255623" ID="ID_926010770" MODIFIED="1698933271790" TEXT="ist die Auslegung der »horizons« sinnvoll?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702308749285" ID="ID_1143341374" MODIFIED="1702308778902" TEXT="sollte man innerhalb des NEAR_HORIZON vielleicht stärker fokussieren?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1702308780781" ID="ID_1202725220" MODIFIED="1702308791788" TEXT="NEAR_HORIZON: 50µs...5ms"/>
|
||||
<node CREATED="1702308794283" ID="ID_1737860337" MODIFIED="1702308811677" TEXT="derzeit verteilen wir radomisiert gleichmäßig über die nächsten 5ms"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702308812697" ID="ID_1741760241" MODIFIED="1702308844201" TEXT="man könnte stattdessen den aktuellen Abstand zum Head als Verteilungsraum nehmen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698933282432" ID="ID_918993851" MODIFIED="1698933288745" TEXT="Bedeutung der Queue-Performance">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue