- Mastering High Performance with Kotlin
- Igor Kucherenko
- 252字
- 2021-06-25 20:55:25
Benchmark time units
If we want to get the result in a more readable format, we can specify a time unit. In our case, it would be better to use NANOSECONDS. To do so, we can rewrite our method as follows:
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public void testMethod() {
int a = 3;
int b = 4;
int c = a + b;
}
The output will now be:
# Run progress: 0.00% complete, ETA 00:00:10
# Fork: 1 of 1
# Warmup Iteration 1: 0.345 ns/op
# Warmup Iteration 2: 0.342 ns/op
# Warmup Iteration 3: 0.342 ns/op
# Warmup Iteration 4: 0.337 ns/op
# Warmup Iteration 5: 0.342 ns/op
Iteration 1: 0.336 ns/op
Iteration 2: 0.333 ns/op
Iteration 3: 0.342 ns/op
Iteration 4: 0.340 ns/op
Iteration 5: 0.340 ns/op
Result "org.sample.MyBenchmark.testMethod":
0.338 ±(99.9%) 0.015 ns/op [Average]
(min, avg, max) = (0.333, 0.338, 0.342), stdev = 0.004
CI (99.9%): [0.323, 0.353] (assumes normal distribution)
# Run complete. Total time: 00:00:10
Benchmark Mode Cnt Score Error Units
MyBenchmark.testMethod avgt 5 0.338 ± 0.015 ns/op
A 0.338 ns/op result is much easier to interpret than 10-9 s/op. You can specify any TimeUnit:
- NANOSECONDS
- MICROSECONDS
- MILLISECONDS
- SECONDS
- MINUTES
- HOURS
- DAYS
Let's suppose that our variables, a and b, require some time for initialization or are members of some global state. How can we share them between several benchmark methods? How can we initialize them before a scope of a benchmark method? For this, we can use a benchmark state.
推薦閱讀
- JavaScript從入門到精通(微視頻精編版)
- Reporting with Visual Studio and Crystal Reports
- Kali Linux Web Penetration Testing Cookbook
- What's New in TensorFlow 2.0
- Vue.js 2 and Bootstrap 4 Web Development
- PHP 編程從入門到實踐
- Swift 3 New Features
- 琢石成器:Windows環境下32位匯編語言程序設計
- 圖數據庫實戰
- Scratch趣味編程:陪孩子像搭積木一樣學編程
- Spring 5 Design Patterns
- 軟件體系結構
- Mudbox 2013 Cookbook
- PhoneGap 4 Mobile Application Development Cookbook
- 從零學Java設計模式