25 #include <glog/logging.h> 35 std::vector<uint8_t> ret(n);
36 std::default_random_engine
rng(1729);
37 std::uniform_int_distribution<uint16_t>
dist(0, 255);
38 std::generate(ret.begin(), ret.end(), [&]() {
return dist(rng); });
44 template <
class Hasher>
45 void bmHasher(Hasher hasher,
size_t k,
size_t iters) {
46 CHECK_LE(k, benchData.size());
47 for (
size_t i = 0, pos = 0;
i < iters; ++
i, ++pos) {
48 if (pos == benchData.size() - k + 1) {
55 template <
class Hasher>
57 static std::deque<std::string> names;
59 for (
size_t i = 0;
i < 16; ++
i) {
60 auto k = size_t(1) <<
i;
88 gflags::ParseCommandLineFlags(&argc, &argv,
true);
89 google::InitGoogleLogging(argv[0]);
91 std::deque<std::string> names;
93 #define BENCHMARK_HASH(HASHER) \ 94 detail::addHashBenchmark<detail::HASHER>(FB_STRINGIZE(HASHER)); 107 Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
108 $ hash_benchmark --bm_min_usec=100000
109 ============================================================================
111 ============================================================================
112 SpookyHashV2:
k=2^0 11.67ns 85.66M
113 SpookyHashV2:
k=2^1 12.49ns 80.07M
114 SpookyHashV2:
k=2^2 11.87ns 84.22M
115 SpookyHashV2:
k=2^3 12.36ns 80.89M
116 SpookyHashV2:
k=2^4 21.47ns 46.58M
117 SpookyHashV2:
k=2^5 22.21ns 45.02M
118 SpookyHashV2:
k=2^6 31.47ns 31.78M
119 SpookyHashV2:
k=2^7 49.86ns 20.05M
120 SpookyHashV2:
k=2^8 69.56ns 14.38M
121 SpookyHashV2:
k=2^9 102.99ns 9.71M
122 SpookyHashV2:
k=2^10 153.72ns 6.51M
123 SpookyHashV2:
k=2^11 271.43ns 3.68M
124 SpookyHashV2:
k=2^12 498.85ns 2.00M
125 SpookyHashV2:
k=2^13 961.55ns 1.04M
126 SpookyHashV2:
k=2^14 1.88us 532.57K
127 SpookyHashV2:
k=2^15 3.73us 268.42K
128 --------------------------------------------------------------------------
129 FNV64:
k=2^0 2.67ns 374.83M
130 FNV64:
k=2^1 4.67ns 214.24M
131 FNV64:
k=2^2 10.30ns 97.07M
132 FNV64:
k=2^3 23.16ns 43.17M
133 FNV64:
k=2^4 48.77ns 20.51M
134 FNV64:
k=2^5 100.45ns 9.96M
135 FNV64:
k=2^6 201.74ns 4.96M
136 FNV64:
k=2^7 399.42ns 2.50M
137 FNV64:
k=2^8 801.64ns 1.25M
138 FNV64:
k=2^9 1.59us 627.32K
139 FNV64:
k=2^10 3.19us 313.51K
140 FNV64:
k=2^11 6.38us 156.80K
141 FNV64:
k=2^12 12.75us 78.45K
142 FNV64:
k=2^13 25.49us 39.23K
143 FNV64:
k=2^14 50.98us 19.62K
144 FNV64:
k=2^15 101.93us 9.81K
145 ----------------------------------------------------------------------------
146 ============================================================================
uint64_t operator()(const uint8_t *data, size_t size) const
uint64_t fnv64_buf(const void *buf, size_t n, uint64_t hash=FNV_64_HASH_START) noexcept
std::vector< uint8_t > benchData
std::string sformat(StringPiece fmt, Args &&...args)
—— Concurrent Priority Queue Implementation ——
#define BENCHMARK_HASH(HASHER)
int main(int argc, char **argv)
void bmHasher(Hasher hasher, size_t k, size_t iters)
constexpr auto size(C const &c) -> decltype(c.size())
static uint64_t Hash64(const void *message, size_t length, uint64_t seed)
void addHashBenchmark(const std::string &name)
std::uniform_int_distribution< milliseconds::rep > dist
std::vector< uint8_t > randomBytes(size_t n)
std::enable_if< boost::function_types::function_arity< decltype(&Lambda::operator())>::value==2 >::type addBenchmark(const char *file, const char *name, Lambda &&lambda)
static constexpr uint64_t data[1]
uint64_t operator()(const uint8_t *data, size_t size) const
std::chrono::nanoseconds time()
auto doNotOptimizeAway(const T &datum) -> typename std::enable_if< !detail::DoNotOptimizeAwayNeedsIndirect< T >::value >::type