Skip to content

Commit 0100ebb

Browse files
committed
Implemented benchmark_read
1 parent ca47078 commit 0100ebb

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

examples/benchmark_read.c

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <binsparse/binsparse.h>
2+
#include <stdlib.h>
23
#include <time.h>
34

45
double gettime() {
@@ -11,7 +12,40 @@ int compar(const void* a, const void* b) {
1112
double x = *((const double*) a);
1213
double y = *((const double*) b);
1314

14-
return x - y;
15+
double diff = x - y;
16+
17+
if (diff > 0) {
18+
return 1;
19+
} else if (diff < 0) {
20+
return -1;
21+
} else {
22+
return 0;
23+
}
24+
}
25+
26+
double compute_variance(double* x, size_t n) {
27+
double sum = 0;
28+
29+
for (size_t i = 0; i < n; i++) {
30+
sum += x[i];
31+
}
32+
33+
double mean = sum / n;
34+
35+
double sum_of_squares = 0;
36+
for (size_t i = 0; i < n; i++) {
37+
sum_of_squares += (x[i] - mean) * (x[i] - mean);
38+
}
39+
40+
return sum_of_squares / (n - 1);
41+
}
42+
43+
void flush_cache() {
44+
#ifdef __APPLE__
45+
system("bash -c \"sync && sudo purge\"");
46+
#else
47+
static_assert(false);
48+
#endif
1549
}
1650

1751
int main(int argc, char** argv) {
@@ -29,17 +63,32 @@ int main(int argc, char** argv) {
2963
double durations[num_trials];
3064

3165
for (size_t i = 0; i < num_trials; i++) {
66+
flush_cache();
3267
double begin = gettime();
3368
bsp_matrix_t mat = bsp_read_matrix(file_name, NULL);
3469
double end = gettime();
3570
durations[i] = end - begin;
3671
bsp_destroy_matrix_t(mat);
3772
}
3873

74+
printf("[");
75+
for (size_t i = 0; i < num_trials; i++) {
76+
printf("%lf", durations[i]);
77+
if (i + 1 < num_trials) {
78+
printf(", ");
79+
}
80+
}
81+
printf("]\n");
82+
3983
qsort(durations, num_trials, sizeof(double), compar);
4084

85+
double variance = compute_variance(durations, num_trials);
86+
4187
printf("Read file in %lf seconds\n", durations[num_trials / 2]);
4288

89+
printf("Variance is %lf seconds, standard devication is %lf seconds\n",
90+
variance, sqrt(variance));
91+
4392
printf("[");
4493
for (size_t i = 0; i < num_trials; i++) {
4594
printf("%lf", durations[i]);

0 commit comments

Comments
 (0)