From 0b0a974111e059faf450989680ed4f7b40c35555 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Tue, 8 Nov 2016 10:39:02 +0100 Subject: some work on alternate averaging strategy --- main.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/main.cpp b/main.cpp index ba7e3f3..4ef5346 100644 --- a/main.cpp +++ b/main.cpp @@ -256,15 +256,15 @@ struct Benchmark { Benchmark(const QString &file) : fileName(file) - , completed(false) { } QString fileName; QSize windowSize; - bool completed; QList operationsPerFrame; + + QHash> averageBuckets; }; @@ -596,25 +596,50 @@ void BenchmarkRunner::abortAll() void BenchmarkRunner::recordOperationsPerFrame(qreal ops) { Benchmark &bm = benchmarks[m_currentBenchmark]; - bm.completed = true; bm.operationsPerFrame << ops; ResultRecorder::recordOperationsPerFrame(bm.fileName, ops); - int repetitions = options.repeat + options.medianReduce * 2; - if (bm.operationsPerFrame.size() == repetitions && repetitions > 1) { - - QList results = bm.operationsPerFrame; - std::sort(results.begin(), results.end()); - for (int i=0; i 1) { + + // QList results = bm.operationsPerFrame; + // std::sort(results.begin(), results.end()); + // for (int i=0; i bucket; + for (QHash>::iterator it = bm.averageBuckets.begin(), end = bm.averageBuckets.end(); it != end; ++it) { + qreal avg = it.key(); + qreal dev = qAbs(ops - avg) / avg; + qDebug() << " -- looking at average bucket" << avg << "of size" << it.value().size() << "- deviation:" << dev; + if (dev < 0.05) { + bucket = it.value(); + bm.averageBuckets.erase(it); + qDebug() << " ---> found matching bucket..."; + break; } + } + bucket.append(ops); - qreal avg = 0; - foreach (qreal r, results) - avg += r; + qreal avg = 0; + foreach (qreal r, bucket) + avg += r; + avg /= bucket.size(); + if (bucket.size() == 1) + qDebug() << " ---> forming a new bucket" << avg; + bm.averageBuckets.insert(avg, bucket); + + if (bucket.size() >= options.repeat) + ResultRecorder::recordOperationsPerFrameAverage(bm.fileName, avg, bucket.size()); - ResultRecorder::recordOperationsPerFrameAverage(bm.fileName, avg / options.repeat, options.repeat); - } complete(); } @@ -623,9 +648,12 @@ void BenchmarkRunner::complete() m_component->deleteLater(); m_component = 0; - int repetitions = options.repeat + options.medianReduce * 2; + // int repetitions = options.repeat + options.medianReduce * 2; + int biggestBucket = 0; + foreach (const QList &bucket, benchmarks[m_currentBenchmark].averageBuckets) + biggestBucket = qMax(biggestBucket, bucket.size()); - if (benchmarks[m_currentBenchmark].operationsPerFrame.size() < repetitions) + if (biggestBucket < options.repeat) QMetaObject::invokeMethod(this, "start", Qt::QueuedConnection); else QMetaObject::invokeMethod(this, "maybeStartNext", Qt::QueuedConnection); -- cgit v1.2.3