148 {
152 return r;
153 }
154
155
157 double sum = 0.0;
158 double sum_sq = 0.0;
159 for (u32 j = 0; j < repeats; ++j) {
161 for (u32 i = 0; i < iterations; ++i) {
162 sim->update();
163 }
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;
169 }
170 const double mean = sum / static_cast<double>(repeats);
171 const double variance = (sum_sq / static_cast<double>(repeats))
172 - (mean * mean);
173 double std_dev = 0.0;
174 if (variance > 0.0) {
175
176
177 double s = variance;
178 for (int k = 0; k < 6; ++k) {
179 s = 0.5 * (s + variance / s);
180 }
181 std_dev = s;
182 }
187 r.
std_dev_pct = (mean > 0.0) ? (100.0 * std_dev / mean) : 0.0;
188 return r;
189}
bool isValidRepeats(u32 repeats) FL_NO_EXCEPT
fl::unique_ptr< WaveSimulation2D_Real > makeBenchSim(u32 W, u32 H, LaplacianStencil stencil) FL_NO_EXCEPT
bool isValidIterations(u32 iterations) FL_NO_EXCEPT
bool isValidGrid(u32 W, u32 H) FL_NO_EXCEPT
double mean_us_per_update
double std_dev_us_per_update
fl::u32 micros()
Universal microsecond timer - returns microseconds since system startup.