KISS code block execution-speed benchmark






4.40/5 (5 votes)
Nov 11, 2005

55782

380
A utility for "Keep It Simple Stupid" code block execution-speed benchmarking.
Motivation
"Yesterday I was working on some code, that I think is time critical. So I wrote myself a file, a really little test project, to visualize the elapsed CPU cycles (of my life) that passed while executing the mentioned code block. As the work progressed I also wanted to see the differences, measured in cycles, between single versions, or in other words how good or bad I was in optimizing it. I wasn't quite finished with my work when I suddenly saw, that the little speed testing utility could be something, that I might share." I wrote this text some time ago. Since then my benchmark evolved...
Description
Usage
- Create new empty console project.
- Add benchmark.h and benchmark.cpp into the project.
- Add an empty .cpp file into the project. Your .cpp file should have following layout:
#include <benchmark.h> // put all your include files here together with globals START_BENCHMARK // expands to int main(int, char**) // - don't define your own !!! //------------------------------------------------------------- // repeat following code for each test you wish to run //------------------------------------------------------------- // below are helper macros for safe access to test parameters // each parameter once set is valid for all consecutive tests // until changed by a call to it`s appropriate setter // parameters are set in this order: // 1. default values - "Generic Test" in dirty environment // with 5 chaching and 10,000 testing iterations // 2. command line arguments - override default values // (see below for possible switches) // 3. macro setters //sets test description - may be omitted SET_DESCRIPTION(formatting string) //sets number of chaching iterations - may be omitted SET_CACHING_ITERATIONS(integer) //sets number of testing iterations - may be omitted SET_TESTING_ITERATIONS(integer) //sets clean environment on or off - may be omitted SET_ENVIRONMENT(boolean) // use following macros to encapsulate chaching // of tested code - may be omitted BEGIN_CACHING // put both tested code blocks here FINISH_CACHING // this is the actual test EXEBLOCK_A // put first tested code block here EXEBLOCK_B // put second tested code block here EVALUATE //------------------------------------------------------------- // end of a single test //------------------------------------------------------------- CLOSE_BENCHMARK
- Compile the project and run the benchmark:
<appname> [[-f name | -c state | -a number | -i number] | [-h]] f - specify log file 'name', if you omit this parameter the default name 'benchmark.log' will be used c - runs the tests in 'state' 0 (dirty) or 1 (clean) if you have hard coded the 'states' of your tests, this parameter has no effect a - sets the global 'number' of caching iterations, if you have hard coded this value for your tests, this parameter has no effect i - sets the global 'number' of testing iterations, if you have hard coded this value for your tests, this parameter has no effect h - shows this help
Last Words
That's all. For further info on this topic take a look at the:
- Approximate Math Library for Intel® Streaming SIMD Extensions.
- How to optimize for the Pentium family of microprocessors, By Agner Fog, Ph.D. Copyright © 1996 - 2004.