48 return W >= 4 &&
H >= 4 &&
W <= 1024 &&
H <= 1024;
51 return iterations >= 1 && iterations <= 100000;
54 return repeats >= 2 && repeats <= 64;
64 sim->setHalfDuplex(
false);
65 sim->setStencil(stencil);
66 for (u32
y = 0;
y <
H; ++
y) {
67 for (u32
x = 0;
x <
W; ++
x) {
68 sim->setf(
static_cast<fl::size
>(
x),
69 static_cast<fl::size
>(
y),
70 ((
x +
y) & 1u) ? -0.5f : 0.5f);
91 for (u32 i = 0; i < iterations; ++i) {
97 const double cells_per_update =
static_cast<double>(
W) *
H;
99 /
static_cast<double>(iterations);
117 volatile fl::i32 sink = 0;
119 for (u32 i = 0; i < iterations; ++i) {
121 for (u32
y = 0;
y <
H; ++
y) {
122 for (u32
x = 0;
x <
W; ++
x) {
123 acc += sim->geti16(
static_cast<fl::size
>(
x),
124 static_cast<fl::size
>(
y));
133 const double cells_per_update =
static_cast<double>(
W) *
H;
135 /
static_cast<double>(iterations);
147 u32
W, u32
H, u32 iterations, u32 repeats,
159 for (u32 j = 0; j < repeats; ++j) {
161 for (u32 i = 0; i < iterations; ++i) {
165 const double us_per_update =
166 static_cast<double>(t1 - t0) /
static_cast<double>(iterations);
167 sum += us_per_update;
168 sum_sq += us_per_update * us_per_update;
170 const double mean = sum /
static_cast<double>(repeats);
171 const double variance = (sum_sq /
static_cast<double>(repeats))
173 double std_dev = 0.0;
174 if (variance > 0.0) {
178 for (
int k = 0; k < 6; ++k) {
179 s = 0.5 * (s + variance / s);
187 r.
std_dev_pct = (mean > 0.0) ? (100.0 * std_dev / mean) : 0.0;
FastLED chrono implementation - duration types for time measurements.
bool isValidRepeats(u32 repeats) FL_NO_EXCEPT
WavePerfRepeatResult runWavePerfRepeat(u32 W, u32 H, u32 iterations, u32 repeats, LaplacianStencil stencil) FL_NO_EXCEPT
fl::unique_ptr< WaveSimulation2D_Real > makeBenchSim(u32 W, u32 H, LaplacianStencil stencil) FL_NO_EXCEPT
WavePerfResult runWavePerf(u32 W, u32 H, u32 iterations, LaplacianStencil stencil) FL_NO_EXCEPT
bool isValidIterations(u32 iterations) FL_NO_EXCEPT
bool isValidGrid(u32 W, u32 H) FL_NO_EXCEPT
WavePerfResult runWavePerfLoadsOnly(u32 W, u32 H, u32 iterations, LaplacianStencil stencil) FL_NO_EXCEPT
double us_per_cell_per_update
double mean_us_per_update
double fps_at_one_update_per_frame
double std_dev_us_per_update
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique(Args &&... args) FL_NO_EXCEPT
fl::u32 micros()
Universal microsecond timer - returns microseconds since system startup.
InputGamut g FL_NO_EXCEPT
Base definition for an LED controller.