Changed calculation autoEvaluatedNumberOfMeasureIteration to reduce duration

This commit is contained in:
Elena Lepilkina
2020-09-17 10:17:16 +03:00
committed by LepilkinaElena
parent cc940e9012
commit 88b2955bb3
3 changed files with 20 additions and 10 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
kotlin.native.home=../dist
org.jetbrains.kotlin.native.jvmArgs=-Xmx6G
jvmWarmup = 1000
nativeWarmup = 20
attempts = 40
nativeWarmup = 10
attempts = 30
jvmBenchResults = jvmBenchResults.json
nativeBenchResults = nativeBenchResults.json
nativeTextReport = nativeReport.txt
@@ -76,13 +76,12 @@ abstract class Launcher {
val benchmarkInstance = (benchmark as? BenchmarkEntryWithInit)?.ctor?.invoke()
logger.log("Warm up iterations for benchmark $name\n")
runBenchmark(benchmarkInstance, benchmark, numWarmIterations)
val expectedDuration = 2000L * 1_000_000 // 2s
var autoEvaluatedNumberOfMeasureIteration = 1
while (benchmark.useAutoEvaluatedNumberOfMeasure) {
var j = autoEvaluatedNumberOfMeasureIteration
val time = runBenchmark(benchmarkInstance, benchmark, j)
if (time >= 2000L * 1_000_000) // 2s
break
autoEvaluatedNumberOfMeasureIteration *= 2
if (benchmark.useAutoEvaluatedNumberOfMeasure) {
val time = runBenchmark(benchmarkInstance, benchmark, 1)
if (time < expectedDuration)
autoEvaluatedNumberOfMeasureIteration = (expectedDuration / time).toInt() / 4 * 4
}
logger.log("Running benchmark $name ")
for (k in 0.until(numberOfAttempts)) {
@@ -71,9 +71,20 @@ fun geometricMean(values: Collection<Double>, totalNumber: Int = values.size) =
}
fun computeMeanVariance(samples: List<Double>): MeanVariance {
val removedBroadSamples = 0.2
val zStar = 1.67 // Critical point for 90% confidence of normal distribution.
val mean = samples.sum() / samples.size
val variance = samples.indices.sumByDouble { (samples[it] - mean) * (samples[it] - mean) } / samples.size
// Skip several minimal and maximum values.
val filteredSamples = if (samples.size >= 1/removedBroadSamples) {
samples.sorted().subList((samples.size * removedBroadSamples).toInt(),
samples.size - (samples.size * removedBroadSamples).toInt())
} else {
samples
}
val mean = filteredSamples.sum() / filteredSamples.size
val variance = samples.indices.sumByDouble {
(samples[it] - mean) * (samples[it] - mean)
} / samples.size
val confidenceInterval = sqrt(variance / samples.size) * zStar
return MeanVariance(mean, confidenceInterval)
}