-
Notifications
You must be signed in to change notification settings - Fork 206
/
speed.c
49 lines (40 loc) · 1.16 KB
/
speed.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* Test speed of memiszero */
#include <ccan/time/time.h>
#include <ccan/mem/mem.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#define MAX_TEST 65536
int main(int argc, char *argv[])
{
size_t n, i, max = argv[1] ? atol(argv[1]) : 100000000, runs;
char *arr;
size_t total = 0;
arr = calloc(1, max + MAX_TEST + 1);
runs = max;
/* First test even sizes case. */
for (n = 1; n <= MAX_TEST; n *= 2) {
struct timeabs start = time_now();
struct timerel each;
for (i = 0; i < runs; i++)
total += memeqzero(arr + i, n);
each = time_divide(time_between(time_now(), start), runs);
assert(each.ts.tv_sec == 0);
printf("%zu: %uns\n", n, (unsigned int)each.ts.tv_nsec);
/* Reduce runs over time, as bigger take longer. */
runs = runs * 2 / 3;
}
runs = max;
for (n = 1; n <= MAX_TEST; n *= 2) {
struct timeabs start = time_now();
struct timerel each;
for (i = 0; i < runs; i++)
total += memeqzero(arr + i, n+1);
each = time_divide(time_between(time_now(), start), runs);
assert(each.ts.tv_sec == 0);
printf("%zu: %uns\n", n+1, (unsigned int)each.ts.tv_nsec);
runs = runs * 2 / 3;
}
printf("total = %zu\n", total);
return 0;
}