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 kotlin.native.home=../dist
org.jetbrains.kotlin.native.jvmArgs=-Xmx6G org.jetbrains.kotlin.native.jvmArgs=-Xmx6G
jvmWarmup = 1000 jvmWarmup = 1000
nativeWarmup = 20 nativeWarmup = 10
attempts = 40 attempts = 30
jvmBenchResults = jvmBenchResults.json jvmBenchResults = jvmBenchResults.json
nativeBenchResults = nativeBenchResults.json nativeBenchResults = nativeBenchResults.json
nativeTextReport = nativeReport.txt nativeTextReport = nativeReport.txt
@@ -76,13 +76,12 @@ abstract class Launcher {
val benchmarkInstance = (benchmark as? BenchmarkEntryWithInit)?.ctor?.invoke() val benchmarkInstance = (benchmark as? BenchmarkEntryWithInit)?.ctor?.invoke()
logger.log("Warm up iterations for benchmark $name\n") logger.log("Warm up iterations for benchmark $name\n")
runBenchmark(benchmarkInstance, benchmark, numWarmIterations) runBenchmark(benchmarkInstance, benchmark, numWarmIterations)
val expectedDuration = 2000L * 1_000_000 // 2s
var autoEvaluatedNumberOfMeasureIteration = 1 var autoEvaluatedNumberOfMeasureIteration = 1
while (benchmark.useAutoEvaluatedNumberOfMeasure) { if (benchmark.useAutoEvaluatedNumberOfMeasure) {
var j = autoEvaluatedNumberOfMeasureIteration val time = runBenchmark(benchmarkInstance, benchmark, 1)
val time = runBenchmark(benchmarkInstance, benchmark, j) if (time < expectedDuration)
if (time >= 2000L * 1_000_000) // 2s autoEvaluatedNumberOfMeasureIteration = (expectedDuration / time).toInt() / 4 * 4
break
autoEvaluatedNumberOfMeasureIteration *= 2
} }
logger.log("Running benchmark $name ") logger.log("Running benchmark $name ")
for (k in 0.until(numberOfAttempts)) { 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 { fun computeMeanVariance(samples: List<Double>): MeanVariance {
val removedBroadSamples = 0.2
val zStar = 1.67 // Critical point for 90% confidence of normal distribution. val zStar = 1.67 // Critical point for 90% confidence of normal distribution.
val mean = samples.sum() / samples.size // Skip several minimal and maximum values.
val variance = samples.indices.sumByDouble { (samples[it] - mean) * (samples[it] - mean) } / samples.size 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 val confidenceInterval = sqrt(variance / samples.size) * zStar
return MeanVariance(mean, confidenceInterval) return MeanVariance(mean, confidenceInterval)
} }