Tree:
76faa3cdfe
0.10
0.13
0.14
0.15
0.16
0.16.3-insta
0.8
add-dnsseed-keva-one
add-kex-keva-one-dns
cn
cn_merge
cn_mining
fix-qt-dpi-warning
idb-fix
inlude-qpainterpath
issue_19
jw-dev
keva-gui
kevaview
kvazar
main
master
mz_test
rx
update-boost-1-74
validate-key-value-lenght
views
wsl
zmq
0.16.6.0-rc1
0.8.3.7-cc
kvazar-1.0.0
kvazar-1.0.1
kvazar-1.1.0
kvazar-1.1.1
v0.1.5
v0.1.6test1
v0.10-mark12
v0.10.0
v0.10.0.2
v0.10.0rc1
v0.10.0rc2
v0.10.0rc3
v0.10.0rc4
v0.10.1
v0.10.1.1
v0.10.1.2
v0.10.1.2-osxsign3
v0.10.1.3
v0.10.1rc1
v0.10.1rc2
v0.10.1rc3
v0.10.2
v0.10.2.1
v0.10.2.2
v0.10.2rc1
v0.10.3.0rc1
v0.10.3rc1
v0.10.4.0
v0.10.4.0rc1
v0.13.2
v0.13.2.1
v0.13.2rc1
v0.13.2rc2
v0.13.2rc3
v0.13.3
v0.13.3rc1
v0.13.3rc2
v0.14.2
v0.14.2rc1
v0.14.2rc2
v0.15.0.1rc1
v0.15.1
v0.15.1rc1
v0.16.0
v0.16.0rc1
v0.16.2
v0.16.2rc1
v0.16.3
v0.16.3-rc1
v0.16.3-rc2
v0.16.3-rc3
v0.16.3-rc7
v0.16.3-rc8
v0.16.3.1
v0.16.4
v0.16.5
v0.16.5.1
v0.16.5.2
v0.16.5.3
v0.16.6.0
v0.16.7.0
v0.16.8.0
v0.2.0
v0.2.10
v0.2.11
v0.2.12
v0.2.13
v0.2.2
v0.2.4
v0.2.5
v0.2.6
v0.2.7
v0.2.8
v0.2.9
v0.2rc2
v0.3.0
v0.3.1
v0.3.10
v0.3.11_notexact
v0.3.12
v0.3.13
v0.3.14
v0.3.15
v0.3.17
v0.3.18
v0.3.19
v0.3.1rc1
v0.3.2
v0.3.20
v0.3.20.01_closest
v0.3.20.2_closest
v0.3.21
v0.3.21rc
v0.3.22
v0.3.22rc1
v0.3.22rc2
v0.3.22rc3
v0.3.22rc4
v0.3.22rc5
v0.3.22rc6
v0.3.23
v0.3.23rc1
v0.3.24
v0.3.24rc1
v0.3.24rc2
v0.3.24rc3
v0.3.3
v0.3.6
v0.3.7
v0.3.8
v0.3rc1
v0.3rc2
v0.3rc4
v0.4.0
v0.4.00rc1
v0.4.00rc2
v0.5.0
v0.5.0rc1
v0.5.0rc2
v0.5.0rc3
v0.5.0rc4
v0.5.0rc5
v0.5.0rc6
v0.5.0rc7
v0.5.1
v0.5.1rc1
v0.5.1rc2
v0.5.2
v0.5.3
v0.5.3rc4
v0.6.0
v0.6.0rc1
v0.6.0rc2
v0.6.0rc3
v0.6.0rc4
v0.6.0rc5
v0.6.0rc6
v0.6.1
v0.6.1rc1
v0.6.1rc2
v0.6.2
v0.6.2.1
v0.6.2.2
v0.6.3
v0.6.3a
v0.6.3b
v0.6.3c
v0.6.3rc1
v0.6.9
v0.6.9.1
v0.6.9.2
v0.7.0
v0.7.0rc1
v0.7.0rc2
v0.7.0rc3
v0.7.1
v0.7.1rc1
v0.7.2
v0.7.2rc2
v0.8.0
v0.8.0rc1
v0.8.1
v0.8.2
v0.8.2.3
v0.8.2rc1
v0.8.2rc2
v0.8.2rc3
v0.8.3
v0.8.3.1
v0.8.3.2
v0.8.3.3
v0.8.3.4
v0.8.3.5
v0.8.3.6
v0.8.3.7
v0.8.3.7-cc
v0.8.3.7-ccsec
v0.8.4
v0.8.4.1
v0.8.4.1-cc
v0.8.4.1-ccsec
v0.8.4.1-omg1
v0.8.4.1-sse2test
v0.8.4rc1
v0.8.4rc2
v0.8.5
v0.8.5-nodebloom
v0.8.5.1
v0.8.5.1-macosx
v0.8.5.1-omg1
v0.8.5.1-omg2
v0.8.5.1-omgscrypt
v0.8.5.2-rc1
v0.8.5.2-rc2
v0.8.5.2-rc3
v0.8.5.2-rc4
v0.8.5.2-rc4-detect
v0.8.5.2-rc5
v0.8.5.2-rc6
v0.8.5.2rc1
v0.8.5.3-rc1
v0.8.5.3-rc2
v0.8.5.3-rc3
v0.8.5.3-rc4
v0.8.5.3-rc4-no-mmap
v0.8.5.3-rc5
v0.8.5.3-rc6
v0.8.5.3-rc7
v0.8.5.3-rc8
v0.8.6.1
v0.8.6.2
v0.8.6.3-mark2
v0.8.6.9
v0.8.7.1
v0.8.7.2
v0.8.7.3
v0.8.7.4
v0.8.7.5
v0.9.0rc1
v0.9.0rc2
v0.9.2
v0.9.2.1
v0.9.2rc1
v0.9.2rc2
v0.9.3
v0.9.3-preview4
v0.9.3-preview5
v0.9.3rc1
v0.9.3rc2
v0.9.4
${ noResults }
6 Commits (76faa3cdfedbd3fc91be4ecfff77fc6dc18134fb)
Author | SHA1 | Message | Date |
---|---|---|---|
Wladimir J. van der Laan | 3532818746 |
bench: Add support for measuring CPU cycles
This adds cycle min/max/avg to the statistics. Supported on x86 and x86_64 (natively through rdtsc), as well as Linux (perf syscall). |
8 years ago |
Wladimir J. van der Laan | e0a9cb25b0 |
bench: Fix subtle counting issue when rescaling iteration count
Make sure that the count is a zero modulo the new mask before scaling, otherwise the next time until a measure triggers will take only 1/2 as long as accounted for. This caused the 'min time' to be potentially off by as much as 100%. |
8 years ago |
Gregory Maxwell | 63ff57db4b |
Avoid integer division in the benchmark inner-most loop.
Previously the benchmark code used an integer division (%) with a non-constant in the inner-loop. This is quite slow on many processors, especially ones like ARM that lack a hardware divide. Even on fairly recent x86_64 like haswell an integer division can take something like 100 cycles-- making it comparable to the runtime of siphash. This change avoids the division by using bitmasking instead. This was especially easy since the count was only increased by doubling. This change also restarts the timing when the execution time was very low this avoids mintimes of zero in cases where one execution ends up below the timer resolution. It also reduces the impact of the overhead on the final result. The formatting of the prints is changed to not use scientific notation make it more machine readable (in particular, gnuplot croaks on the non-fixedpoint, and it doesn't sort correctly). This also hoists out all the floating point divisions out of the semi-hot path because it was easy to do so. It might be prudent to break out the critical test into a macro just to guarantee that it gets inlined. It might also make sense to just save out the intermediate counts and times and get the floating point completely out of the timing loop (because e.g. on hardware without a fast hardware FPU like some ARM it will still be slow enough to distort the results). I haven't done either of these in this commit. |
9 years ago |
Philip Kaufmann | 214de7e54c |
[Trivial] ensure minimal header conventions
- ensure header namespaces and end comments are correct - add missing header end comments - ensure minimal formatting (add newlines etc.) |
9 years ago |
Gavin Andresen |
7072c544b5
|
Support very-fast-running benchmarks
Avoid calling gettimeofday every time through the benchmarking loop, by keeping track of how long each loop takes and doubling the number of iterations done between time checks when they take less than 1/16'th of the total elapsed time. |
9 years ago |
Gavin Andresen |
535ed9223d
|
Simple benchmarking framework
Benchmarking framework, loosely based on google's micro-benchmarking library (https://github.com/google/benchmark) Wny not use the Google Benchmark framework? Because adding Even More Dependencies isn't worth it. If we get a dozen or three benchmarks and need nanosecond-accurate timings of threaded code then switching to the full-blown Google Benchmark library should be considered. The benchmark framework is hard-coded to run each benchmark for one wall-clock second, and then spits out .csv-format timing information to stdout. It is left as an exercise for later (or maybe never) to add command-line arguments to specify which benchmark(s) to run, how long to run them for, how to format results, etc etc etc. Again, see the Google Benchmark framework for where that might end up. See src/bench/MilliSleep.cpp for a sanity-test benchmark that just benchmarks 'sleep 100 milliseconds.' To compile and run benchmarks: cd src; make bench Sample output: Benchmark,count,min,max,average Sleep100ms,10,0.101854,0.105059,0.103881 |
9 years ago |