11#include <binsparse/binsparse.h>
2+ #include <stdlib.h>
23#include <time.h>
34
45double 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
1751int 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