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
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user