5 #define lsize sizeof(unsigned long)
7 long long usec_diff(const struct timeval *a, const struct timeval *b)
9 long long usec_a, usec_b;
10 usec_a = a->tv_sec * 1000000 + a->tv_usec;
11 usec_b = b->tv_sec * 1000000 + b->tv_usec;
12 return usec_b - usec_a;
15 int main(int argc, char *argv[])
17 int iterations, j, k, count, size, mask, latcount;
18 unsigned long *buf, i, tmp = 0;
19 struct timeval start, end;
22 iterations = atoi(argv[1]);
27 count = atoi(argv[2]);
30 latcount = count / 10;
32 printf("Doing %d runs with buffer size goin up to %dk\n",
33 iterations, 1 << (iterations - 10));
34 printf("Running each round %d times\n", count);
35 printf("Size of unsigned long is %lu bits\n\n", lsize * 8);
53 "-----------------------"
54 "-----------------------\n"
59 "-----------------------"
60 "-----------------------\n"
63 for (; j < iterations + 1; j++) {
64 size = (1 << j) / lsize;
65 buf = malloc(size * lsize);
69 printf("Malloc failed\n");
74 for (i = 0; i < size; i++)
77 printf("%8luk |", size * lsize / 1024);
83 gettimeofday(&start, 0);
84 for (k = 0; k < count; k++) {
86 for (i = 0; i < size; i++)
90 gettimeofday(&end, 0);
92 printf("% 9.2f ", (double)(size * lsize) *
93 (1000000 / (1024.0 * 1024.0)) * count /
94 (double) usec_diff(&start, &end));
100 gettimeofday(&start, 0);
101 for (k = 0; k < latcount; k++) {
103 for (i = 0; i < size; i++)
104 tmp += buf[random() & mask];
107 gettimeofday(&end, 0);
109 printf("% 9.3f |", usec_diff(&start, &end) * 1000 /
110 ((double) (size * latcount )));
115 /* Write bandwidth */
117 gettimeofday(&start, 0);
118 for (k = 0; k < count; k++)
119 for (i = 0; i < size; i++)
121 gettimeofday(&end, 0);
123 printf("% 9.2f ", (double)(size * lsize) *
124 (1000000 / (1024.0 * 1024.0)) * count /
125 (double) usec_diff(&start, &end));
131 gettimeofday(&start, 0);
132 for (k = 0; k < latcount; k++)
133 for (i = 0; i < size; i++)
134 buf[random() % mask] = i;
135 gettimeofday(&end, 0);
137 printf("% 9.3f |", usec_diff(&start, &end) * 1000 /
138 ((double) (size * latcount )));