Preheat CPU in benchtests.

A benchmark could be skewed by CPU initialy working on minimal
frequency and speeding up later. We first run code in loop
to partialy fix this issue.
This commit is contained in:
Ondrej Bilka 2013-05-08 08:21:05 +02:00
parent ba85394732
commit bb7cf681e9
2 changed files with 21 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2013-05-08 Ondřej Bílka <neleai@seznam.cz>
* benchtests/bench-skeleton.c (main): Preheat CPU.
2013-05-07 Aurelien Jarno <aurelien@aurel32.net>
* misc/sys/param.h (DEV_BSIZE): Define only if not already defined.

View File

@ -22,6 +22,21 @@
#include <time.h>
#include <inttypes.h>
volatile unsigned int dontoptimize = 0;
void startup ()
{
/* This loop should cause CPU to switch to maximal freqency.
This makes subsequent measurement more accurate. We need a side effect
to prevent the loop being deleted by compiler.
This should be enough to cause CPU to speed up and it is simpler than
running loop for constant time. This is used when user does not have root
access to set a constant freqency. */
int k;
for (k = 0; k < 10000000; k++)
dontoptimize += 23 * dontoptimize + 2;
}
#define TIMESPEC_AFTER(a, b) \
(((a).tv_sec == (b).tv_sec) ? \
((a).tv_nsec > (b).tv_nsec) : \
@ -32,6 +47,8 @@ main (int argc, char **argv)
unsigned long i, k;
struct timespec start, end, runtime;
startup();
memset (&runtime, 0, sizeof (runtime));
memset (&start, 0, sizeof (start));
memset (&end, 0, sizeof (end));