Changed calculation autoEvaluatedNumberOfMeasureIteration to reduce duration
This commit is contained in:
committed by
LepilkinaElena
parent
cc940e9012
commit
88b2955bb3
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user