learnedsystems / sosd Goto Github PK
View Code? Open in Web Editor NEWA Benchmark for Learned Indexes
License: GNU General Public License v3.0
A Benchmark for Learned Indexes
License: GNU General Public License v3.0
Caught it in our test suite, which runs sanitizer checks including Google's LeakSanitizer
.
Suggested fix -> add a destructor that ensures the radix_hint_
heap allocated vector gets freed correctly:
~RadixSpline() {
if (radix_hint_ != nullptr) {
delete[](radix_hint_);
}
}
Thank you!
I have run the RMI on wiki_ts_200M and books_200M successfully. I found that there are duplicated values in "wiki_ts" dataset, is it? and i would like to know more information about dataset, where can i find the description of dataset?
There is only the primary key, but I find that when the length of each record is extended, the performance of learned index will be greatly affected, the mapping between key to position becomes complicated, so i would like trying to complete the true record length to see the mapping of keys to positions.
Best wishes!
Thank you for your help!
On a system with 16GB data, the benchmark crashes while building the benchmark:
[100%] Built target benchmark
Generating lookups for osm_cellids_200M_uint64
Generating lookups for osm_cellids_400M_uint64
Generating lookups for osm_cellids_600M_uint64
read 600000000 values from ../data/osm_cellids_600M_uint64 in 2095 ms (286.396 M values/s)
terminate called after throwing an instance of 'std::bad_alloc'
To upgrade the memory, I wonder what is the peak memory usage of the benchmark. Do you have any rough estimate?
Apparently a bit more than 16GB is enough for the build of osm_cellids_600M_uint64, but then perhaps the benchmark execution could take more memory. right?
ARTPrimary::applicable(...)
always returns true
, indicating that data with non-unique keys is supported by the ARTPrimary
implementation. Based on the return value of ARTPrimaryLB::applicable(...)
, I assume that the ARTPrimaryLB
implementation does not support non-unique keys. However, the Build
functions in both classes look very similar. More precisely, both functions contain the following snippet:
if (data_key == last_key)
continue;
Thus, I actually expect that both versions do not support key duplicates. But I have to admit that I haven't studied the source code in detail and didn't run the benchmark. Could you briefly explain how the support for key duplicates was realized? My goal is to benchmark index implementations that support key duplicates. Thus, if the ARTPrimary implementation does so, I would like to benchmark it.
Hi, I am running prepare.sh, but I got the following errors. It looks like there are some missing files.
[ 75%] Building CXX object CMakeFiles/benchmark.dir/benchmarks/benchmark_rbs.cc.o
[ 75%] Building CXX object CMakeFiles/benchmark.dir/benchmarks/benchmark_pgm.cc.o
[ 75%] Building CXX object CMakeFiles/benchmark.dir/benchmarks/benchmark_rmi.cc.o
[ 75%] Building CXX object CMakeFiles/benchmark.dir/benchmarks/benchmark_rs.cc.o
In file included from /Users/.../SOSD-master/benchmarks/benchmark_rmi.cc:3:
/Users/.../SOSD-master/dtl/../competitors/rmi_search.h:4:10: fatal error: 'rmi/all_rmis.h' file not found
#include "rmi/all_rmis.h"
^~~~~~~~~~~~~~~~
In file included from /Users/.../SOSD-master/benchmarks/benchmark_pgm.cc:4:
In file included from /Users/.../SOSD-master/dtl/../competitors/pgm_index.h:11:
In file included from /Users/.../SOSD-master/competitors/PGM-index/include/pgm_index.hpp:24:
/Users/.../SOSD-master/competitors/PGM-index/include/piecewise_linear_model.hpp:20:6: fatal error: Compile with -fopenmp
#error Compile with -fopenmp
^
4 warnings and 1 error generated.
4 warnings and 1 error generated.
make[2]: *** [CMakeFiles/benchmark.dir/benchmarks/benchmark_rmi.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/benchmark.dir/benchmarks/benchmark_pgm.cc.o] Error 1
make[1]: *** [CMakeFiles/benchmark.dir/all] Error 2
make: *** [all] Error 2
Hi, I have generated the result files for the experiments. (execute.sh) My output only has results for the RMI and RS index methods. I am wondering if it is correct or I did something wrong in the other steps. Should we see the results for all index methods? Thanks!
The commit used in the SOSD SysML paper is for 12 Dec 2019:
87d34ef
Please tag this commit so that we can refer to it in the papers that are already concluded and are under review.
Also, what is the next stable, cite-able release after the SOSD SysML paper?
In the new benchmark (VLDB 2020), the fb_200M_uint64
dataset is wrong. It's not the facebook IDs, but it is actually the lognormal dataset.
Here is the distribution of data/fb_200M_uint64
on the new benchmark (vldb_2020
tag):
The fb data used to be like a uniform distribution. Here is the plot of the fb dataset downloaded by the earlier scripts in mlforsys19
tag:
Would you please correct the download scripts?
Also, are the VLDB paper results for the new or old fb file?
Hi Team,
Thank you so much for the benchmark paper and implementation of various index structures.
Is there any more documentation about the source code. It is little difficult to understand the models represented in rust, generating the C++ code for indexes.
Also few days back i saw the paper "Learning to Search" mentioned in ML for systems conference'19 accepted papers. Is this paper same of that?
Thanks,
Vinayak N B
The benchmark doesn't compile. I can compile and run the previous version (NeuroIPS 2019) but the new version has something missing such that prepare.sh
stops:
[100%] Building CXX object CMakeFiles/benchmark.dir/benchmarks/benchmark_wormhole.cc.o
[100%] Linking CXX executable benchmark
/usr/bin/ld: ../fast64/target/release/libfast64.a(std-c32b051c3aafd36c.std.4p3qj3su-cgu.0.rcgu.o): undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/benchmark.dir/build.make:3217: recipe for target 'benchmark' failed
make[2]: *** [benchmark] Error 1
CMakeFiles/Makefile2:170: recipe for target 'CMakeFiles/benchmark.dir/all' failed
make[1]: *** [CMakeFiles/benchmark.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
Hi there!
We noticed that RadixSpline throws a SIGSEGV when key = 0 due to an out-of-bounds access onto the spline
array. The key in question is present in our input (sorted) data array. The version of the code we have is the one with process implemented like so:
inline uint32_t process(uint64_t x) const {
// Compute index.
uint32_t index;
const uint64_t p = (x - min_) >> shift_bits_;
uint32_t begin = radix_hint_[p];
uint32_t end = radix_hint_[p + 1];
switch (end - begin) {
case 0:
index = end;
break;
case 1:
index = (spline[begin].first >= x) ? begin : end;
break;
case 2:
index = ((spline[begin].first >= x)
? begin
: ((spline[begin + 1].first >= x) ? (begin + 1) : end));
break;
case 3:
index =
((spline[begin].first >= x)
? begin
: ((spline[begin + 1].first >= x)
? (begin + 1)
: ((spline[begin + 2].first > x) ? (begin + 2) : end)));
break;
default:
index =
std::lower_bound(spline.begin() + begin, spline.begin() + end, x,
[](const Coord& a, const uint64_t lookup_key) {
return a.first < lookup_key;
}) -
spline.begin();
break;
}
return index - 1;
}
When key = 0, process
gets called with x = 0
, which ends up falling into case 2
and setting index
to 0. The return statement at the end is index - 1
(or 4294967295 as uint32_t
), which is then used as index into the spline
array in segmentInterpolation
, causing the out-of-bounds access.
I noticed that the latest implementation of process
is not too different, so at a quick glance it seems that a similar bug could still be present there. We'd be interested in confirming that this out-of-bounds access is no longer present in the latest version before migrating our copy over.
Cheers,
Joana
When I use the SOSD benchmark, the cache-misses are high and don't seem real:
index, time sec, cycles, instructions, L1-misses, LLC-misses, branch-misses, task-clock, scale, IPC, CPUs, GHz
RESULT: Oracle, 0.00, 6.05, 11.02, 0.25, 0.33, 0.00, 1.52, 1000000, 1.82, 1.01, 3.99
RESULT: rmi, 0.31, 831.12, 228.74, 15.36, 38.71, 3.83, 214.89, 1000000, 0.28, 0.70, 3.87
RESULT: RadixSpline, 0.31, 1238.91, 281.28, 21.08, 51.05, 3.12, 313.53, 1000000, 0.23, 1.00, 3.95
RESULT: BinarySearch, 0.65, 2570.39, 398.27, 87.29, 185.30, 13.59, 645.73, 1000000, 0.15, 1.00, 3.98
In RMI, for example, L1-miss = 15.36, LLC-misses=38.71. First of all, how is it possible that the L1 miss rate is less than LLC miss rate (I suppose all LLC misses were caused by an L1-miss, no?
More importantly, the numbers don't make sense. For Binary search over 200M records, we have at most log(200M,2)=27 memory accesses. Considering that some of the accesses will be cached, I expect both L1 and LLC misses to be 20-something, NOT what the benchmark reports for binary search (L1-misses=87.29, LLC-misses=185.30) !!
Besides, when I manually run the indexes (or the whole benchmark) in Intel VTune and see the miss-rates on each section, the miss rates are entirely different and are close to what I expect (For binary search: LLC miss rate = 20.3).
Why are the measurements so different? I am just very confused.
I use the original commit of SOSD for theMLforSys paper but I suppose all version use the same probing mechanism.
Hi, I encountered an error when I run the script prepare.sh. Some error logs are shown as follows.
Compiling benchmark...
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pfl/workspace/SOSD/build
[ 5%] Generating competitors/rmi/all_rmis.h
[ 15%] Built target generate
Scanning dependencies of target benchmark
[ 21%] Building CXX object CMakeFiles/benchmark.dir/benchmark.cc.o
/home/pfl/workspace/SOSD/benchmark.cc: In function ‘int main(int, char**)’:
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘normal_200M_uint32_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:87:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint32, normal_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:1:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/normal_200M_uint32_rmi.h:6:12: note: ‘normal_200M_uint32_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "normal_200M_uint32_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘lognormal_200M_uint32_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:88:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint32, lognormal_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:3:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/lognormal_200M_uint32_rmi.h:6:12: note: ‘lognormal_200M_uint32_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "lognormal_200M_uint32_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘books_200M_uint32_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:89:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, books_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:11:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/books_200M_uint32_rmi.h:6:12: note: ‘books_200M_uint32_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "books_200M_uint32_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘books_200M_uint32_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:89:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, books_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:89:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, books_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:89:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, books_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘fb_200M_uint32_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:90:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, fb_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:13:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/fb_200M_uint32_rmi.h:6:12: note: ‘fb_200M_uint32_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "fb_200M_uint32_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘fb_200M_uint32_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:90:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, fb_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:90:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, fb_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:90:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint32, fb_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘uniform_dense_200M_uint32_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:91:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint32, uniform_dense_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:5:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/uniform_dense_200M_uint32_rmi.h:6:12: note: ‘uniform_dense_200M_uint32_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "uniform_dense_200M_uint32_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘uniform_sparse_200M_uint32_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:92:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint32, uniform_sparse_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:7:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/uniform_sparse_200M_uint32_rmi.h:6:12: note: ‘uniform_sparse_200M_uint32_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "uniform_sparse_200M_uint32_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘wiki_ts_200M_uint64_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:114:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, wiki_ts_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:10:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/wiki_ts_200M_uint64_rmi.h:6:12: note: ‘wiki_ts_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "wiki_ts_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘wiki_ts_200M_uint64_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:114:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, wiki_ts_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<long unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:114:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, wiki_ts_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = long unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:114:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, wiki_ts_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘osm_cellids_200M_uint64_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:115:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, osm_cellids_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:9:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/osm_cellids_200M_uint64_rmi.h:6:12: note: ‘osm_cellids_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "osm_cellids_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘osm_cellids_200M_uint64_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:115:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, osm_cellids_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<long unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:115:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, osm_cellids_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = long unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:115:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, osm_cellids_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘normal_200M_uint64_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:116:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint64, normal_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:2:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/normal_200M_uint64_rmi.h:6:12: note: ‘normal_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "normal_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘lognormal_200M_uint64_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:117:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, lognormal_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:4:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/lognormal_200M_uint64_rmi.h:6:12: note: ‘lognormal_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "lognormal_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘lognormal_200M_uint64_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:117:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, lognormal_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<long unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:117:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, lognormal_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = long unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:117:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, lognormal_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘books_200M_uint64_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:118:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, books_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:12:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/books_200M_uint64_rmi.h:6:12: note: ‘books_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "books_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘books_200M_uint64_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:118:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, books_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<long unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:118:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, books_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = long unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:118:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, books_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:274: error: the value of ‘fb_200M_uint64_rmi::NAME’ is not usable in a constant expression
e, _, dtype, _, suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:119:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, fb_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:14:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/fb_200M_uint64_rmi.h:6:12: note: ‘fb_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "fb_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:30:314: error: could not convert template argument ‘fb_200M_uint64_rmi::lookup’ to ‘uint64_t (*)(uint64_t, size_t*) {aka long unsigned int (*)(long unsigned int, long unsigned int*)}’
(name, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>();
^
/home/pfl/workspace/SOSD/benchmark.cc:119:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, fb_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: no matching function for call to ‘sosd::Benchmark<long unsigned int>::Run()’
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:119:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, fb_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/benchmark.cc:1:0:
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: candidate: template<class Index, bool ignore_errors> void sosd::Benchmark<KeyType>::Run() [with Index = Index; bool ignore_errors = ignore_errors; KeyType = long unsigned int]
void Run() {
^
/home/pfl/workspace/SOSD/benchmark.h:51:8: note: template argument deduction/substitution failed:
/home/pfl/workspace/SOSD/benchmark.cc:30:323: error: template argument 1 is invalid
ame, _, dtype, _,suffix)::NAME, NAME5(name, _, dtype, _, suffix)::lookup>>(); }
^
/home/pfl/workspace/SOSD/benchmark.cc:119:7: note: in expansion of macro ‘run_rmi_binary’
run_rmi_binary(uint64, fb_200M, rmi);
^
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘uniform_dense_200M_uint64_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:120:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint64, uniform_dense_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:6:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/uniform_dense_200M_uint64_rmi.h:6:12: note: ‘uniform_dense_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "uniform_dense_200M_uint64_rmi";
^
/home/pfl/workspace/SOSD/benchmark.cc:28:273: error: the value of ‘uniform_sparse_200M_uint64_rmi::NAME’ is not usable in a constant expression
me, _, dtype, _,suffix)::RMI_SIZE, NAME5(name, _, dtype, _,suffix)::NAME, NAME5
^
/home/pfl/workspace/SOSD/benchmark.cc:121:7: note: in expansion of macro ‘run_rmi_linear’
run_rmi_linear(uint64, uniform_sparse_200M, rmi);
^
In file included from /home/pfl/workspace/SOSD/competitors/rmi/all_rmis.h:8:0,
from /home/pfl/workspace/SOSD/competitors/rmi_search.h:4,
from /home/pfl/workspace/SOSD/benchmark.cc:8:
/home/pfl/workspace/SOSD/competitors/rmi/uniform_sparse_200M_uint64_rmi.h:6:12: note: ‘uniform_sparse_200M_uint64_rmi::NAME’ was not declared ‘constexpr’
const char NAME[] = "uniform_sparse_200M_uint64_rmi";
^
CMakeFiles/benchmark.dir/build.make:86: recipe for target 'CMakeFiles/benchmark.dir/benchmark.cc.o' failed
make[2]: *** [CMakeFiles/benchmark.dir/benchmark.cc.o] Error 1
CMakeFiles/Makefile2:97: recipe for target 'CMakeFiles/benchmark.dir/all' failed
make[1]: *** [CMakeFiles/benchmark.dir/all] Error 2
Makefile:103: recipe for target 'all' failed
make: *** [all] Error 2
I run the codes on a ubuntu 16.04 server with gcc 5.4, g++5.4 and cmake 3.17.
The execute_perf.sh
benchmark does not run (Ubuntu 18.04, followed all README instructions).
Is there any extra package/tool that needs to be installed?
Here is the output:
SOSD$ scripts/execute_perf.sh
Executing perf benchmark and saving results...
Executing workload normal_200M_uint32
Repeating lookup code 1 time(s).
read 200000000 values from ./data/normal_200M_uint32 in 1974 ms (101.317 M values/s)
data is unique
read 1000000 values from ./data/normal_200M_uint32_equality_lookups_1M in 37 ms (27.027 M values/s)
Error opening counter cycles
index, time sec,
RESULT: Oracle, 0.00,
Error opening counter cycles
RESULT: rmi, 0.07,
Error opening counter cycles
RESULT: RadixSpline, 0.06,
Error opening counter cycles
RESULT: BinarySearch, 0.81,
Error opening counter cycles
RESULT: InterpolationSearch, 10.93,
Error opening counter cycles
RESULT: RadixBinarySearch18, 0.33,
Error opening counter cycles
RESULT: FAST, 0.30,
Error opening counter cycles
RESULT: ART, 0.24,
Error opening counter cycles
RESULT: TIP, 0.97,
Error opening counter cycles
RESULT: stx::btree_multimap, 0.48,
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.