1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-10-12 19:04:54 +03:00

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> 2013-05-07 Aurelien Jarno <aurelien@aurel32.net>
* misc/sys/param.h (DEV_BSIZE): Define only if not already defined. * misc/sys/param.h (DEV_BSIZE): Define only if not already defined.

View File

@@ -22,6 +22,21 @@
#include <time.h> #include <time.h>
#include <inttypes.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) \ #define TIMESPEC_AFTER(a, b) \
(((a).tv_sec == (b).tv_sec) ? \ (((a).tv_sec == (b).tv_sec) ? \
((a).tv_nsec > (b).tv_nsec) : \ ((a).tv_nsec > (b).tv_nsec) : \
@@ -32,6 +47,8 @@ main (int argc, char **argv)
unsigned long i, k; unsigned long i, k;
struct timespec start, end, runtime; struct timespec start, end, runtime;
startup();
memset (&runtime, 0, sizeof (runtime)); memset (&runtime, 0, sizeof (runtime));
memset (&start, 0, sizeof (start)); memset (&start, 0, sizeof (start));
memset (&end, 0, sizeof (end)); memset (&end, 0, sizeof (end));