Skip to content

Commit 4e905d1

Browse files
authored
More details regarding usage.
1 parent 75e15f5 commit 4e905d1

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,54 @@ Developers might want to consider our [Header-only Xor Filter library in C](http
1111
- A C++11 compiler such as GNU G++ or LLVM Clang++
1212
- Make
1313

14+
Expectations:
1415

16+
- Though it should be possible to run this benchmark on any operating system, we expect Linux and use its performance counters to measure performance.
17+
- We expect an x64 processor with AVX2 support though most filters work on any processor, if you compile on a machine that does not support AVX2 instructions, the corresponding filters that depend on AVX2 will be disabled.
1518

1619
## Usage
1720

21+
22+
Make sure to select the right GNU GCC compiler (e.g., via `export export CXX=g++-8`).
23+
You may want to disable hyperthreading and adjust page sizes. Run the benchmark
24+
on a quiet machine.
25+
26+
1827
```
28+
git clone https://github.com/FastFilter/fastfilter_cpp.git
29+
cd fastfilter_cpp
1930
cd benchmarks
2031
make
32+
# there may be compiler warnings at this point, we compile with '-Wall'
2133
./bulk-insert-and-query.exe 10000000
34+
# collect the output (it is quite verbose)
35+
./bulk-insert-and-query.exe 100000000
36+
```
37+
38+
Your results will depend on the hardware, on the compiler and how the system is configured. A sample output is as follows:
39+
40+
```
41+
$ ./bulk-insert-and-query.exe 10000000
42+
find find find find find optimal wasted million
43+
add remove 0% 25% 50% 75% 100% ε bits/item bits/item space keys
44+
45+
add cycles: 325.5/key, instructions: (303.2/key, 0.93/cycle) cache misses: 12.41/key branch misses: 1.17/key
46+
0.00% cycles: 81.7/key, instructions: ( 48.0/key, 0.59/cycle) cache misses: 3.06/key branch misses: 0.00/key
47+
0.25% cycles: 81.8/key, instructions: ( 48.0/key, 0.59/cycle) cache misses: 3.06/key branch misses: 0.00/key
48+
0.50% cycles: 81.8/key, instructions: ( 48.0/key, 0.59/cycle) cache misses: 3.06/key branch misses: 0.00/key
49+
0.75% cycles: 82.0/key, instructions: ( 48.0/key, 0.59/cycle) cache misses: 3.06/key branch misses: 0.00/key
50+
1.00% cycles: 81.9/key, instructions: ( 48.0/key, 0.59/cycle) cache misses: 3.06/key branch misses: 0.00/key
51+
Xor8 106.79 0.00 25.92 25.88 25.86 25.94 25.98 0.3892% 9.84 8.01 22.9% 10.0
52+
53+
... # many more lines omitted
2254
```
2355

56+
The `add` lines preceding the name of each algorithm gives you information regarding the construction time whereas
57+
the other five lines give you information regarding the queries where a given percentage of elements are present
58+
in the set. We use Linux performance counters to measure instructions, cache misses and branch misses.
59+
60+
As part of the benchmark, we check the correctness of the implementation.
61+
2462

2563
## Where is your code?
2664

0 commit comments

Comments
 (0)