-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchmark.cpp
84 lines (74 loc) · 2.16 KB
/
benchmark.cpp
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "Reader.h"
#include "SATree.h"
#include <iostream>
#include <benchmark/benchmark.h>
static void BM_SATreeBuild(benchmark::State &state)
{
char filename[] = "dataset/siftsmall/siftsmall_base.fvecs";
FVecsReader reader;
reader.open(filename);
Points input;
int counter{0};
while(!reader.eof())
{
float *v = reader.readvec();
std::vector<float> vf(v, v + reader.dimension());
input.push_back(Point{counter, vf});
counter++;
}
for(auto _: state)
SATree tree(input);
}
static void BM_SATreeRangeSearch(benchmark::State &state)
{
char bvecs_filename[] = "dataset/siftsmall/siftsmall_base.fvecs";
FVecsReader reader;
reader.open(bvecs_filename);
Points input;
int counter{0};
while(!reader.eof())
{
float *v = reader.readvec();
std::vector<float> vf(v, v + reader.dimension());
input.push_back(Point{counter, vf});
counter++;
}
reader.close();
char query_filename[] = "dataset/siftsmall/siftsmall_query.fvecs";
reader.open(query_filename);
float *qvec = reader.readvec();
std::vector<float> qv(qvec, qvec + reader.dimension());
Point query{-1, qv};
SATree tree(input);
for(auto _: state)
tree.range_search(query, 20.0);
}
static void BM_SATreekNNSearch(benchmark::State &state)
{
char bvecs_filename[] = "dataset/siftsmall/siftsmall_base.fvecs";
FVecsReader reader;
reader.open(bvecs_filename);
Points input;
int counter{0};
while(!reader.eof())
{
float *v = reader.readvec();
std::vector<float> vf(v, v + reader.dimension());
input.push_back(Point{counter, vf});
counter++;
}
reader.close();
char query_filename[] = "dataset/siftsmall/siftsmall_query.fvecs";
reader.open(query_filename);
float *qvec = reader.readvec();
std::vector<float> qv(qvec, qvec + reader.dimension());
Point query{-1, qv};
SATree tree(input);
for(auto _: state)
tree.nearest_neighbour_search(query, 100);
}
BENCHMARK(BM_SATreeBuild);
BENCHMARK(BM_SATreeRangeSearch);
BENCHMARK(BM_SATreekNNSearch);
// Run the benchmark
BENCHMARK_MAIN();