From c400e01c6295f45e395bdeff5e6c37bd5777aa98 Mon Sep 17 00:00:00 2001 From: Guillaume Chatelet Date: Thu, 15 Oct 2020 08:01:26 +0000 Subject: [PATCH] [libc][NFC] Add probability distributions for memory function sizes This patch adds memory function size distributions sampled from different applications running in production. This will be used to benchmark and compare memory functions implementations. Differential Revision: https://reviews.llvm.org/D89401 --- libc/benchmarks/CMakeLists.txt | 2 + libc/benchmarks/MemorySizeDistributions.cpp | 63 +++++++++++++++++++++++++++++ libc/benchmarks/MemorySizeDistributions.h | 44 ++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 libc/benchmarks/MemorySizeDistributions.cpp create mode 100644 libc/benchmarks/MemorySizeDistributions.h diff --git a/libc/benchmarks/CMakeLists.txt b/libc/benchmarks/CMakeLists.txt index c85e410..be26e4c 100644 --- a/libc/benchmarks/CMakeLists.txt +++ b/libc/benchmarks/CMakeLists.txt @@ -111,6 +111,8 @@ add_library(libc-memory-benchmark EXCLUDE_FROM_ALL LibcMemoryBenchmark.cpp LibcMemoryBenchmark.h + MemorySizeDistributions.cpp + MemorySizeDistributions.h ) target_link_libraries(libc-memory-benchmark PUBLIC libc-benchmark) fix_rtti(libc-memory-benchmark) diff --git a/libc/benchmarks/MemorySizeDistributions.cpp b/libc/benchmarks/MemorySizeDistributions.cpp new file mode 100644 index 0000000..02c3d64 --- /dev/null +++ b/libc/benchmarks/MemorySizeDistributions.cpp @@ -0,0 +1,63 @@ +#include "MemorySizeDistributions.h" + +namespace llvm { +namespace libc_benchmarks { + +// clang-format off +static constexpr double kMemcmpGoogleA[] = {0.311594, 0.0483092, 0.0229469, 0.0748792, 0.0422705, 0.00241546, 0.044686, 0.0326087, 0.0205314, 0.013285, 0.00362319, 0, 0.0108696, 0.00966184, 0.089372, 0.00845411, 0.00724638, 0, 0, 0.00362319, 0, 0.179952, 0.00120773, 0.00483092, 0.00483092, 0.00241546, 0.00120773, 0.0108696, 0.00120773, 0, 0.0144928, 0.00241546, 0.00120773, 0.00120773, 0, 0, 0, 0, 0, 0.00483092, 0, 0.00362319, 0.00241546, 0, 0.00603865, 0, 0, 0.00120773, 0, 0, 0, 0, 0, 0, 0, 0, 0.00120773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00120773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00362319, 0.00362319}; +static constexpr double kMemcmpGoogleB[] = {0.0191339, 0.0151057, 0.0926485, 0.0281974, 0.0271903, 0.0483384, 0.0654582, 0.0261833, 0.0443102, 0.0553877, 0.0433031, 0.0120846, 0.0120846, 0.0422961, 0.0161128, 0.020141, 0.0261833, 0.020141, 0.0100705, 0.0332326, 0.0231621, 0.0292044, 0.0372608, 0.0161128, 0.0161128, 0.0100705, 0.0110775, 0.00704935, 0.0120846, 0.00704935, 0.00503525, 0.00906344, 0.0040282, 0.00805639, 0.00704935, 0.0060423, 0.0060423, 0.00503525, 0.0040282, 0.0191339, 0.0040282, 0.0140987, 0.0020141, 0.00100705, 0.0020141, 0, 0.0020141, 0.00100705, 0.0020141, 0, 0, 0, 0.0020141, 0, 0.0020141, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0.00100705, 0, 0, 0, 0, 0, 0.00100705, 0, 0.0020141, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0.00503525, 0.00100705, 0, 0, 0, 0, 0.0020141, 0.0020141, 0.00302115, 0.0020141, 0, 0.0020141, 0, 0, 0, 0.00100705, 0.0020141, 0, 0, 0.00100705, 0.00100705, 0, 0.00100705, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00302115, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0040282, 0, 0, 0, 0, 0, 0, 0, 0.00302115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0.00302115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705}; +static constexpr double kMemcmpGoogleD[] = {0, 0, 0, 0.0045045, 0.202703, 0.0518018, 0.0653153, 0.256757, 0.173423, 0, 0, 0, 0, 0.0698198, 0, 0, 0.00225225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.130631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00225225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00675676, 0, 0, 0, 0, 0, 0, 0, 0.0337838}; +static constexpr double kMemcmpGoogleL[] = {0.0191339, 0.0151057, 0.0926485, 0.0281974, 0.0271903, 0.0483384, 0.0654582, 0.0261833, 0.0443102, 0.0553877, 0.0433031, 0.0120846, 0.0120846, 0.0422961, 0.0161128, 0.020141, 0.0261833, 0.020141, 0.0100705, 0.0332326, 0.0231621, 0.0292044, 0.0372608, 0.0161128, 0.0161128, 0.0100705, 0.0110775, 0.00704935, 0.0120846, 0.00704935, 0.00503525, 0.00906344, 0.0040282, 0.00805639, 0.00704935, 0.0060423, 0.0060423, 0.00503525, 0.0040282, 0.0191339, 0.0040282, 0.0140987, 0.0020141, 0.00100705, 0.0020141, 0, 0.0020141, 0.00100705, 0.0020141, 0, 0, 0, 0.0020141, 0, 0.0020141, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0.00100705, 0, 0, 0, 0, 0, 0.00100705, 0, 0.0020141, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0.00503525, 0.00100705, 0, 0, 0, 0, 0.0020141, 0.0020141, 0.00302115, 0.0020141, 0, 0.0020141, 0, 0, 0, 0.00100705, 0.0020141, 0, 0, 0.00100705, 0.00100705, 0, 0.00100705, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00302115, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0040282, 0, 0, 0, 0, 0, 0, 0, 0.00302115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0.00302115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705}; +static constexpr double kMemcmpGoogleM[] = {0.0275, 0.0337, 0.1648, 0.0696, 0.0715, 0.1059, 0.108, 0.115, 0.0216, 0.0109, 0.1201, 0.0167, 0.0039, 0.0027, 0.0012, 0.0301, 0.0085, 0.0035, 0.0036, 0.0037, 0.0108, 0.0076, 0.0088, 0.0031, 0.0023, 0.0042, 0.0028, 0.0004, 0.0005, 0.0001, 0.0042, 0, 0.0003, 0.0021, 0.0028, 0, 0.0005, 0.0005, 0.0076, 0, 0, 0, 0, 0.0001, 0, 0, 0.0092, 0, 0, 0, 0.0001, 0.0052, 0.0013, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0.0003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0009, 0, 0, 0, 0, 0, 0, 0, 0.001}; +static constexpr double kMemcmpGoogleQ[] = {0.0985062, 0.051215, 0.00598885, 0.0212707, 0.034281, 0.0360019, 0.0353824, 0.0235424, 0.0256075, 0.0131479, 0.298823, 0.0168651, 0.00268466, 0.00392373, 0.0203759, 0.00653955, 0.00378605, 0.00172093, 0.0035107, 0.00929304, 0.00592001, 0.00275349, 0.00282233, 0.00839816, 0.00509396, 0.00757211, 0.0016521, 0.00206512, 0.0113582, 0.00178977, 0.00247814, 0.00240931, 0.00385489, 0.00357954, 0.00468094, 0.00158326, 0.00103256, 0.00137675, 0.00117023, 0.00103256, 0.00261582, 0.000550699, 0.00103256, 0.00123907, 0.000826048, 0.0051628, 0.000894885, 0.00275349, 0.000688373, 0.0040614, 0.00123907, 0.00117023, 0.00832932, 0.00151442, 0.00172093, 0.00137675, 0.000963723, 0.000894885, 0.00178977, 0.000550699, 0.000619536, 0.000963723, 0.00130791, 0.000826048, 0.000757211, 0.00123907, 0.00137675, 0.000688373, 0.000413024, 0.00151442, 0.00103256, 0.000688373, 0.000826048, 0.000688373, 0.000963723, 0.000757211, 0.000757211, 0.00103256, 0.000481861, 0.000550699, 0.0222345, 0.000757211, 0.0011014, 0.000619536, 0.000275349, 0.000413024, 0.000688373, 0.000137675, 0.0146624, 0.000688373, 0.000550699, 0.000413024, 0.000275349, 0.000757211, 0.000688373, 0.000550699, 0.00998141, 0.000619536, 0.000619536, 0.000275349, 0.000481861, 0.000619536, 0.000619536, 0.000275349, 0.00688373, 0.000826048, 0.000413024, 0.000206512, 0.000550699, 0.000550699, 0.000550699, 0.000206512, 0.00199628, 0.000137675, 0.000137675, 0.000757211, 0.000206512, 0.000344187, 0.000206512, 0.000344187, 0.00151442, 0.000550699, 0.000550699, 0.000275349, 0.000206512, 6.88373e-05, 0.000344187, 0.000206512, 0.000688373, 0.000688373, 0.000619536, 0.000137675, 0.000413024, 0.000344187, 0.000275349, 0.000550699, 0.000619536, 0.000137675, 0.000344187, 0.000344187, 0.000757211, 0.000137675, 0.000413024, 6.88373e-05, 0.000137675, 6.88373e-05, 0.000550699, 0.000275349, 0.000137675, 0.000413024, 0.000344187, 0.000206512, 0.000550699, 6.88374e-05, 0.000413024, 0.000275349, 0.000137675, 0.000481861, 0.000206512, 0.000206512, 0.000206512, 0.000481861, 0.000137675, 0.000206512, 0.000481861, 0.000344187, 0.000206512, 0.000275349, 0.000275349, 0.000206512, 0.000481861, 0.000413024, 0.000206512, 0.000413024, 0.000137675, 0.000137675, 0.000344187, 0.000137675, 0.000275349, 0.000206512, 0.000481861, 0.000550699, 0, 0.000344187, 0.000275349, 0.000275349, 0.000413024, 0, 0.000344187, 0.000206512, 0.000550699, 0.000206512, 0.000344187, 0.000413024, 0.000688373, 0.000275349, 0.000413024, 0.000275349, 0.000344187, 0.000481861, 0.000550699, 0.000206512, 0.000275349, 0.000137675, 0.000206512, 0.000481861, 0.000344187, 0.000275349, 0.000344187, 0.000413024, 0.000413024, 0.000344187, 0.000206512, 0.000275349, 0.000137675, 0.000481861, 0.000275349, 0.000206512, 0.000413024, 0.000481861, 0.000206512, 0.000137675, 0.000275349, 0.000137675, 0.000206512, 0.000344187, 0.000413024, 0.000413024, 0.000344187, 0.000344187, 0.000275349, 6.88373e-05, 0.000137675, 0.000275349, 6.88374e-05, 0.000344187, 0.000413024, 0.000344187, 0.000206512, 0.000344187, 0.000481861, 0.000481861, 0.000206512, 0.000344187, 0.000137675, 6.88373e-05, 0.000275349, 0.000413024, 0.000137675, 6.88373e-05, 0.000137675, 0.000137675, 0.000206512, 0.000413024, 6.88373e-05, 0.000206512, 0.000137675, 0.000206512, 0.000275349, 0.000344187, 0.000275349, 6.88373e-05, 0.000137675, 0.000344187, 0, 0.000206512, 0, 6.88374e-05, 0.000137675, 0.000550699, 0.000344187, 0.000137675, 0, 0.000344187, 0.000344187, 0.000550699, 0.000344187, 0.000206512, 0.000275349, 6.88373e-05, 0.000275349, 0.000275349, 0.000137675, 6.88374e-05, 6.88373e-05, 0.000206512, 0.000137675, 0.000137675, 0.000137675, 0.000137675, 0.000137675, 0, 0, 6.88373e-05, 0.000137675, 0, 0.000275349, 0.000137675, 6.88374e-05, 0.000206512, 0.000344187, 6.88373e-05, 0.000137675, 6.88373e-05, 0.000275349, 0.000206512, 0, 0.000206512, 0.000275349, 0.000206512, 0.000344187, 0.000137675, 0.000275349, 6.88374e-05, 6.88373e-05, 0.000137675, 6.88373e-05, 0.000206512, 0.000206512, 0.000275349, 0.000344187, 6.88373e-05, 0.000137675, 0.000137675, 0.000275349, 0.000344187, 0.000206512, 0.000344187, 0.000137675, 0.000275349, 0.000137675, 0.000137675, 0.000206512, 0.000137675, 0.000137675, 0.000137675, 6.88374e-05, 0.000206512, 6.88373e-05, 0, 6.88374e-05, 0.000344187, 6.88374e-05, 0.000137675, 0.000137675, 0.000481861, 0.000206512, 0, 0.000206512, 0, 0.000206512, 0, 6.88374e-05, 6.88373e-05, 6.88373e-05, 0.000206512, 0.000206512, 0, 6.88373e-05, 0, 0.000206512, 0.000206512, 0.000137675, 0.000275349, 0.000137675, 6.88374e-05, 0.000275349, 0.000137675, 0.000344187, 0, 0.000275349, 0, 0.000206512, 6.88374e-05, 0.000344187, 6.88373e-05, 0.000206512, 0.000137675, 0.000206512, 6.88373e-05, 0.000413024, 6.88373e-05, 0.000275349, 6.88374e-05, 0.000137675, 0, 0.000413024, 0, 0.000344187, 0, 0.000206512, 0, 0.000481861, 0, 0.000413024, 0, 0.000206512, 0, 0.000344187, 0, 0.000413024, 0, 0.000206512, 0, 0.000481861, 0, 0.000137675, 0, 0.000206512, 0, 0.000344187, 0, 6.88374e-05, 0, 0.000137675, 0, 0.000275349, 0, 0.000206512, 0, 0.000206512, 0, 0.000137675, 0, 0.000688373, 0, 0.000206512, 0, 0.000137675, 0, 0, 0, 0.000275349, 0, 0.000481861, 0, 0.000206512, 0, 0.000206512, 0, 0.000344187, 0, 0.000137675, 0, 0.000206512, 0, 0.000344187, 0, 0.000275349, 0, 6.88373e-05, 0, 0.000137675, 0, 6.88373e-05, 0, 0.000137675, 0, 0.000137675, 0, 0.000275349, 0, 0.000275349, 0, 6.88373e-05, 0, 6.88374e-05, 0, 6.88373e-05, 0, 0.000275349, 0, 0, 0, 0.000206512, 0, 0.000206512, 0, 0.000413024, 0, 6.88373e-05, 0, 0.000206512, 0, 0.000206512, 0, 0.000344187, 0, 0.000137675, 0, 0.000413024, 0, 0.000344187, 0, 0, 0, 0.000413024, 0, 6.88373e-05, 0, 0.000206512, 0, 0, 0, 0.000206512, 0, 0.000275349, 0, 0, 0, 0.000137675, 0, 0.000550699, 0, 6.88374e-05, 0, 0, 0, 0.000137675, 0, 0.000344187, 0, 0.000344187, 0, 0.000206512, 0, 6.88374e-05, 0, 0.000275349, 0, 0.000275349, 0, 0.000137675, 0, 6.88373e-05, 0, 0.000206512, 0, 0.000206512, 0, 0.000137675, 0, 0.000137675, 0, 0.000137675, 0, 6.88374e-05, 0, 0.000137675, 0, 6.88373e-05, 0, 0.000206512, 0, 6.88373e-05, 0, 6.88374e-05, 0, 6.88373e-05, 0, 0.000137675, 0, 0.000206512, 0, 0.000206512, 0, 0.000137675, 0, 6.88373e-05, 0, 0.000206512, 0, 0, 0, 6.88374e-05, 0, 6.88373e-05, 0, 0.000206512, 0, 0.000137675, 0, 0.000137675, 0, 0.000206512, 0, 6.88373e-05, 0, 6.88374e-05, 0, 0.000206512, 0, 6.88373e-05, 0, 0.000137675, 0, 6.88373e-05, 0, 0.000137675}; +static constexpr double kMemcmpGoogleS[] = {0, 0.0729167, 0.0208333, 0.0104167, 0.0416667, 0.0729167, 0.0416667, 0.0104167, 0, 0, 0, 0.28125, 0, 0, 0, 0, 0, 0, 0.125, 0.0833333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0416667, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0208333, 0, 0.0104167, 0.0208333, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0.0208333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0104167, 0.0104167}; +static constexpr double kMemcmpGoogleU[] = {0, 0.0052, 0.0134, 0.0199, 0.0122, 0.0093, 0.0164, 0.0123, 0.7309, 0.0108, 0.0096, 0.0124, 0.0109, 0.0086, 0.0129, 0.0082, 0.0236, 0.0076, 0.0161, 0.004, 0.0055, 0.0027, 0.0022, 0.0023, 0.0125, 0.0016, 0.0019, 0.0011, 0.0007, 0.0008, 0.0017, 0.0007, 0.0015, 0.0005, 0.001, 0.0005, 0.0004, 0.0013, 0.0006, 0.0003, 0.0002, 0.0105, 0.0002, 0.0009, 0.0001, 0.0002, 0.0017, 0.0003, 0.0001, 0.0001, 0, 0.0001, 0, 0.0001, 0, 0.0009, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001}; +static constexpr double kMemcmpGoogleW[] = {0.0191339, 0.0151057, 0.0926485, 0.0281974, 0.0271903, 0.0483384, 0.0654582, 0.0261833, 0.0443102, 0.0553877, 0.0433031, 0.0120846, 0.0120846, 0.0422961, 0.0161128, 0.020141, 0.0261833, 0.020141, 0.0100705, 0.0332326, 0.0231621, 0.0292044, 0.0372608, 0.0161128, 0.0161128, 0.0100705, 0.0110775, 0.00704935, 0.0120846, 0.00704935, 0.00503525, 0.00906344, 0.0040282, 0.00805639, 0.00704935, 0.0060423, 0.0060423, 0.00503525, 0.0040282, 0.0191339, 0.0040282, 0.0140987, 0.0020141, 0.00100705, 0.0020141, 0, 0.0020141, 0.00100705, 0.0020141, 0, 0, 0, 0.0020141, 0, 0.0020141, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0.00100705, 0, 0, 0, 0, 0, 0.00100705, 0, 0.0020141, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0.00503525, 0.00100705, 0, 0, 0, 0, 0.0020141, 0.0020141, 0.00302115, 0.0020141, 0, 0.0020141, 0, 0, 0, 0.00100705, 0.0020141, 0, 0, 0.00100705, 0.00100705, 0, 0.00100705, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00302115, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0040282, 0, 0, 0, 0, 0, 0, 0, 0.00302115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0.00302115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0.0020141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00100705}; +static constexpr double kMemcpyGoogleA[] = {0, 0, 0.020339, 0.0915254, 0.0644068, 0.0135593, 0.0271186, 0.00338983, 0.332203, 0, 0, 0.0271186, 0.00338983, 0, 0, 0, 0.166102, 0, 0.00338983, 0.00677966, 0.0135593, 0, 0, 0, 0, 0, 0, 0, 0.00338983, 0, 0, 0, 0.0610169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0271186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0440678, 0, 0, 0, 0, 0, 0, 0, 0.00677966, 0, 0, 0, 0, 0, 0, 0, 0.00338983, 0, 0, 0, 0.00677966, 0, 0, 0, 0.0169492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0135593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00338983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00677966, 0, 0, 0, 0.0101695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0135593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00338983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00338983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00338983}; +static constexpr double kMemcpyGoogleB[] = {0.0755418, 0.0204334, 0.00464396, 0.0473684, 0.0260062, 0.00371517, 0.0145511, 0.00433437, 0.0377709, 0.113313, 0.0501548, 0.0108359, 0.00154799, 0.000619195, 0.000928793, 0.00154799, 0.237152, 0.00897833, 0.0733746, 0.00402477, 0.00216718, 0.00278638, 0.0216718, 0.00154799, 0.000619195, 0.000619195, 0.00309598, 0.00123839, 0.0198142, 0.00216718, 0.000928793, 0.00216718, 0.0291022, 0.00278638, 0.000619195, 0.00247678, 0.000619195, 0.00247678, 0.000928793, 0.0111455, 0.00588235, 0.000309598, 0.000619195, 0.000619195, 0, 0.0216718, 0.00123839, 0.00340557, 0.00123839, 0.000619195, 0.000928793, 0.0201238, 0.0260062, 0.000619195, 0, 0.00309598, 0.00897833, 0.00866873, 0.000928793, 0.000928793, 0, 0.00154799, 0, 0.000309597, 0.00247678, 0.0170279, 0.000309598, 0, 0.000309597, 0, 0.000309598, 0.000619195, 0.000309598, 0.000309597, 0.000309598, 0, 0.000309598, 0, 0.000309597, 0, 0.000309598, 0, 0, 0.000619195, 0, 0, 0.000619195, 0.000928793, 0.000309597, 0.000309598, 0, 0, 0, 0, 0.000309598, 0, 0.000928792, 0, 0.000309598, 0, 0.000309598, 0.000309598, 0.000309597, 0, 0, 0, 0.000309598, 0, 0, 0, 0.000928792, 0.000309598, 0, 0, 0.000309598, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0.000309597, 0, 0, 0, 0, 0.000309598, 0, 0.000309597, 0, 0.000309598, 0, 0, 0.000309598, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0.000309597, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0.000309598, 0, 0, 0.000309597, 0, 0, 0.000309598, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0.000619195, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0.000309597, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0.000309597, 0, 0, 0, 0, 0.000309598, 0, 0, 0.00216718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0.000309597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000619195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598, 0, 0.000309598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000309598}; +static constexpr double kMemcpyGoogleD[] = {0.0234987, 0.0137076, 0.0104439, 0.0117493, 0.022846, 0.017624, 0.0672324, 0.0372063, 0.0391645, 0.0372063, 0.0248042, 0.0456919, 0.0267624, 0.0359008, 0.0156658, 0.00522193, 0.0306789, 0.0124021, 0.0104439, 0.0137076, 0.00261097, 0.0150131, 0.0365535, 0.00391645, 0.00652742, 0.0443864, 0.0163185, 0.0430809, 0.00587467, 0.0169713, 0.0110966, 0.00130548, 0.0293734, 0, 0.000652742, 0.00195822, 0.0248042, 0.00391645, 0.00979112, 0.000652742, 0.0365535, 0.000652742, 0.00130548, 0.000652742, 0.000652742, 0.000652741, 0.00913838, 0, 0.000652742, 0, 0, 0.000652741, 0, 0, 0.00130548, 0, 0.0163185, 0.000652741, 0.000652742, 0.000652742, 0, 0, 0.000652742, 0, 0.00913838, 0.000652742, 0, 0, 0.000652741, 0, 0, 0, 0.00130548, 0, 0.000652742, 0, 0, 0.00130548, 0, 0, 0, 0, 0, 0, 0, 0.00261097, 0, 0.00913838, 0.0300261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00195822, 0, 0, 0.00130548, 0.000652742, 0.00456919, 0, 0, 0, 0, 0, 0, 0.00130548, 0.0130548, 0, 0, 0, 0, 0, 0.000652741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00261097, 0, 0, 0, 0, 0.000652742, 0, 0, 0.00326371, 0, 0.00130548, 0, 0, 0, 0.000652742, 0, 0.00130548, 0, 0, 0, 0, 0, 0, 0, 0.00130548, 0, 0, 0, 0, 0, 0.000652742, 0, 0.00195822, 0, 0.000652741, 0, 0, 0, 0, 0, 0.00130548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0.000652741, 0, 0, 0, 0, 0, 0, 0, 0.00195822, 0, 0, 0, 0.000652741, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00130548, 0, 0, 0, 0, 0, 0.000652741, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0.000652741, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0.00326371, 0, 0, 0.000652742, 0.000652741, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0.000652741, 0, 0.000652742, 0.00195822, 0.00195822, 0, 0, 0, 0, 0, 0, 0, 0.00130548, 0, 0, 0, 0, 0, 0.000652741, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652741, 0, 0, 0, 0, 0, 0, 0, 0.00130548, 0, 0, 0, 0, 0, 0.000652742, 0.000652741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0.000652741, 0, 0, 0, 0, 0, 0, 0.000652742, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652741, 0.000652742, 0.000652741, 0, 0.00326371, 0, 0, 0, 0, 0, 0.00261097, 0.000652742, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652741, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0.000652741, 0, 0.000652742, 0, 0.000652741, 0, 0.000652742, 0, 0.000652741, 0, 0.00130548, 0, 0.000652742, 0, 0.00130548, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0.00130548, 0, 0, 0, 0, 0, 0.000652741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0.000652741, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652741, 0, 0.000652742, 0, 0.00130548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000652742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00130548}; +static constexpr double kMemcpyGoogleL[] = {0.1405, 0.0487, 0, 0.0324, 0.0216, 0, 0.0379, 0, 0.027, 0.0054, 0, 0.2108, 0.0162, 0.0217, 0.0919, 0, 0.0432, 0.0919, 0, 0.0703, 0, 0, 0, 0.0973, 0, 0, 0, 0.0054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0054, 0, 0.0108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0054, 0, 0, 0, 0, 0, 0.0054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0054}; +static constexpr double kMemcpyGoogleM[] = {0.0721535, 0.0325991, 0.068308, 0.0556539, 0.0563932, 0.0461322, 0.0532884, 0.0617689, 0.0828007, 0.0433771, 0.0594034, 0.0279377, 0.0207739, 0.0242924, 0.0185332, 0.0384378, 0.0360666, 0.0178533, 0.0215373, 0.0189424, 0.00918205, 0.00407135, 0.00558588, 0.0164542, 0.00517671, 0.00187243, 0.00539378, 0.00443405, 0.00281149, 0.0020793, 0.00188286, 0.00131771, 0.0237737, 0.00349755, 0.00316146, 0.000935628, 0.00276963, 0.0021735, 0.00301304, 0.000647972, 0.00162138, 0.000899166, 0.000446994, 0.000298311, 0.000419752, 0.000250476, 0.000173168, 0.000251647, 0.00166741, 0.000240198, 0.000212313, 0.000251685, 0.000494377, 0.000263776, 0.000282404, 0.000370745, 0.000823369, 0.000437322, 0.000194252, 0.00019667, 0.000828546, 0.000114224, 0.000515272, 0.000150837, 0.0101547, 8.00283e-05, 7.56452e-05, 8.59983e-05, 9.46888e-05, 6.64257e-05, 6.00779e-05, 0.000211406, 0.000262491, 5.85287e-05, 6.83906e-05, 6.7257e-05, 0.00014294, 6.28362e-05, 5.11607e-05, 4.88935e-05, 0.000250324, 5.18408e-05, 4.29614e-05, 9.52933e-05, 8.53938e-05, 4.32636e-05, 4.22434e-05, 3.61601e-05, 0.000140484, 3.77471e-05, 7.67788e-05, 3.37796e-05, 4.91958e-05, 5.22565e-05, 3.06813e-05, 4.11099e-05, 0.00285317, 2.89054e-05, 3.44598e-05, 2.82631e-05, 4.53418e-05, 2.21041e-05, 2.75451e-05, 2.1953e-05, 0.000106667, 2.45979e-05, 2.74318e-05, 2.0555e-05, 2.30487e-05, 2.49002e-05, 2.88298e-05, 2.31244e-05, 8.13507e-05, 3.09836e-05, 5.78108e-05, 5.58837e-05, 6.01913e-05, 4.32258e-05, 3.97119e-05, 3.91451e-05, 0.000372181, 1.63986e-05, 1.63608e-05, 1.20911e-05, 1.70788e-05, 1.63986e-05, 2.1953e-05, 1.25068e-05, 0.00486468, 9.7863e-06, 2.28976e-05, 1.33002e-05, 1.22045e-05, 1.71921e-05, 1.13355e-05, 0.000251571, 0.000526834, 9.7863e-06, 1.06175e-05, 1.36026e-05, 1.92702e-05, 1.36781e-05, 1.02775e-05, 1.00508e-05, 2.18774e-05, 1.76455e-05, 9.2951e-06, 1.55296e-05, 1.03908e-05, 9.7485e-06, 1.78722e-05, 8.7661e-06, 1.85901e-05, 1.03908e-05, 1.09954e-05, 1.47361e-05, 7.4058e-06, 7.8593e-06, 8.1993e-06, 1.34514e-05, 0.000588612, 9.6729e-06, 8.0482e-06, 9.0306e-06, 9.5218e-06, 1.60207e-05, 1.12599e-05, 9.3329e-06, 0.000758153, 1.00508e-05, 1.7381e-05, 1.4056e-05, 1.05419e-05, 7.4814e-06, 9.673e-06, 1.50005e-05, 1.4925e-05, 1.20912e-05, 9.7485e-06, 8.9928e-06, 1.63608e-05, 1.10332e-05, 1.14866e-05, 1.49627e-05, 1.46606e-05, 1.39804e-05, 9.7862e-06, 1.01264e-05, 9.7484e-06, 9.2951e-06, 1.31869e-05, 7.557e-06, 0.000428593, 7.3681e-06, 9.0683e-06, 1.99882e-05, 1.11088e-05, 5.3276e-06, 7.6326e-06, 5.2898e-06, 2.19152e-05, 5.4411e-06, 8.1993e-06, 4.9876e-06, 5.5543e-06, 1.21667e-05, 5.8189e-06, 5.8189e-06, 1.06931e-05, 2.9321e-05, 1.16755e-05, 5.7433e-06, 0.000636939, 5.4788e-06, 5.7811e-06, 0.000331675, 0.000737333, 5.1765e-06, 5.9322e-06, 6.499e-06, 0.000642644, 6.1211e-06, 4.0808e-06, 7.1791e-06, 0.000196405, 1.28469e-05, 6.1967e-06, 5.2143e-06, 0.000352004, 6.0078e-06, 1.75322e-05, 7.1035e-06, 8.6527e-06, 7.8593e-06, 2.34266e-05, 1.53406e-05, 1.37159e-05, 1.26957e-05, 1.35648e-05, 1.26579e-05, 0.000177513, 5.8189e-06, 4.1941e-06, 5.4032e-06, 4.8743e-06, 1.03908e-05, 4.6475e-06, 7.1792e-06, 5.441e-06, 3.2873e-06, 1.17133e-05, 3.2872e-06, 3.4385e-06, 5.2143e-06, 5.5543e-06, 1.27713e-05, 0.00346324}; +static constexpr double kMemcpyGoogleQ[] = {0.0178373, 0.114968, 0.0227802, 0.0150139, 0.188859, 0.00455751, 0.0233952, 0.0106787, 0.341347, 0.00630641, 0.050229, 0.00491322, 0.00606186, 0.00478724, 0.0110566, 0.00501697, 0.0128277, 0.00962636, 0.00522447, 0.0112196, 0.00589142, 0.00513554, 0.00491322, 0.00341628, 0.00472796, 0.00269004, 0.00394985, 0.00325325, 0.00183042, 0.00234916, 0.00129685, 0.00220095, 0.0034311, 0.0016822, 0.000837397, 0.00180818, 0.001119, 0.00357932, 0.0012598, 0.00108195, 0.00443894, 0.0013265, 0.00113382, 0.00103007, 0.000933735, 0.0016081, 0.00108195, 0.00116346, 0.000726238, 0.00250478, 0.00100043, 0.0010523, 0.00117087, 0.00113382, 0.000778112, 0.00108936, 0.001119, 0.00169703, 0.00145989, 0.000941145, 0.00181559, 0.000963377, 0.000637311, 0.000829986, 0.00169703, 0.00120793, 0.00138578, 0.00074847, 0.000792933, 0.000474278, 0.00075588, 0.000444636, 0.000704006, 0.000511331, 0.000437225, 0.000518741, 0.000333477, 0.000414993, 0.00037794, 0.00228246, 0.00904092, 0.000466867, 0.000259371, 0.000392761, 0.00025196, 0.000296424, 0.000289013, 0.000148212, 0.000852218, 0.000177854, 0.000103748, 0.000133391, 0.000192675, 0.000192675, 0.000185265, 0.000111159, 0.000407583, 0.000578026, 0.000111159, 0.00111159, 0.000118569, 0.000340887, 0.000177854, 0.000170444, 0.000133391, 0.000118569, 0.000155622, 8.89271e-05, 4.44635e-05, 7.41059e-05, 9.63377e-05, 5.92848e-05, 9.63376e-05, 0.000111159, 5.92847e-05, 0.00012598, 7.41059e-05, 5.18741e-05, 0.000155623, 3.70529e-05, 0.000177854, 0.000244549, 5.92847e-05, 5.92848e-05, 5.18741e-05, 0.000200086, 0.000103748, 2.22317e-05, 0.000555794, 2.96423e-05, 5.92848e-05, 5.18741e-05, 3.7053e-05, 3.70529e-05, 2.96424e-05, 2.22318e-05, 0.00012598, 2.96424e-05, 5.18741e-05, 2.22318e-05, 2.96423e-05, 5.18742e-05, 1.48212e-05, 2.96423e-05, 0.000140801, 2.96423e-05, 8.89271e-05, 7.41059e-05, 5.18742e-05, 7.41059e-05, 5.18741e-05, 7.4106e-06, 0.00037794, 4.44635e-05, 5.18742e-05, 5.18741e-05, 5.92847e-05, 4.44636e-05, 5.18741e-05, 2.22318e-05, 5.92847e-05, 2.96424e-05, 2.22317e-05, 4.44636e-05, 1.48212e-05, 3.70529e-05, 7.4106e-06, 5.18742e-05, 5.92847e-05, 3.70529e-05, 3.7053e-05, 2.96424e-05, 2.96423e-05, 5.18742e-05, 4.44635e-05, 2.96424e-05, 0.000274192, 7.41059e-05, 6.66953e-05, 6.66953e-05, 0.000140801, 5.18742e-05, 2.96424e-05, 7.41059e-05, 8.89271e-05, 5.18741e-05, 8.89271e-05, 6.66953e-05, 8.89271e-05, 0.000111159, 7.41059e-05, 3.70529e-05, 0.000185265, 8.89271e-05, 7.41059e-05, 5.92848e-05, 7.4106e-06, 5.92847e-05, 4.44635e-05, 4.44636e-05, 0.000155622, 6.66953e-05, 8.89271e-05, 3.7053e-05, 6.66953e-05, 4.44635e-05, 5.18742e-05, 2.22317e-05, 0.000155623, 5.18741e-05, 3.7053e-05, 7.41059e-05, 3.70529e-05, 8.15165e-05, 3.7053e-05, 1.48212e-05, 4.44635e-05, 3.7053e-05, 4.44635e-05, 4.44636e-05, 3.70529e-05, 6.66953e-05, 6.66954e-05, 2.22317e-05, 0.000155622, 5.92848e-05, 4.44635e-05, 6.66953e-05, 2.96424e-05, 2.96424e-05, 3.70529e-05, 2.96424e-05, 3.7053e-05, 5.18741e-05, 7.4106e-06, 2.22318e-05, 5.92847e-05, 2.96424e-05, 2.22317e-05, 2.22318e-05, 8.15165e-05, 1.48212e-05, 4.44635e-05, 2.22318e-05, 4.44636e-05, 2.22317e-05, 3.7053e-05, 2.22318e-05, 8.15165e-05, 3.70529e-05, 3.7053e-05, 5.92847e-05, 1.48212e-05, 1.48212e-05, 1.48211e-05, 1.48212e-05, 0.000207497, 3.70529e-05, 2.96424e-05, 3.7053e-05, 3.70529e-05, 1.48212e-05, 3.7053e-05, 1.48211e-05, 0.00012598, 2.96424e-05, 2.22317e-05, 2.96424e-05, 2.22318e-05, 2.96423e-05, 2.22318e-05, 2.96424e-05, 4.44635e-05, 2.22318e-05, 2.96424e-05, 3.70529e-05, 1.48212e-05, 2.22318e-05, 2.22317e-05, 2.96424e-05, 2.96424e-05, 2.96423e-05, 1.48212e-05, 2.22318e-05, 1.48212e-05, 1.48212e-05, 2.96423e-05, 1.48212e-05, 2.22318e-05, 1.48212e-05, 2.96423e-05, 1.48212e-05, 1.48212e-05, 1.48212e-05, 1.48212e-05, 7.4105e-06, 6.66954e-05, 1.48212e-05, 2.96423e-05, 2.96424e-05, 2.22318e-05, 1.48211e-05, 7.4106e-06, 7.4106e-06, 7.4106e-06, 0, 2.96424e-05, 0, 2.22317e-05, 2.22318e-05, 1.48212e-05, 2.22318e-05, 7.4106e-06, 1.48212e-05, 7.4105e-06, 2.22318e-05, 2.22318e-05, 2.22318e-05, 7.4106e-06, 2.96423e-05, 0.000207497, 7.4106e-06, 2.96423e-05, 7.4106e-06, 7.4106e-06, 7.4106e-06, 7.4106e-06, 1.48212e-05, 7.4106e-06, 1.48212e-05, 7.4105e-06, 5.18742e-05, 7.4106e-06, 1.48212e-05, 1.48211e-05, 1.48212e-05, 8.15165e-05, 0, 1.48212e-05, 7.4106e-06, 1.48212e-05, 0, 7.4106e-06, 1.48212e-05, 2.96423e-05, 7.4106e-06, 2.22318e-05, 2.22318e-05, 2.22317e-05, 7.4106e-06, 3.7053e-05, 2.22318e-05, 7.4105e-06, 7.4106e-06, 7.4106e-06, 1.48212e-05, 4.44636e-05, 2.22317e-05, 7.4106e-06, 1.48212e-05, 2.22318e-05, 2.22317e-05, 0, 1.48212e-05, 0, 2.96424e-05, 1.48212e-05, 7.4106e-06, 0.000118569, 2.96424e-05, 7.4106e-06, 1.48212e-05, 1.48212e-05, 2.22317e-05, 1.48212e-05, 7.4106e-06, 1.48212e-05, 1.48212e-05, 5.18741e-05, 7.4106e-06, 0, 0, 1.48212e-05, 2.22317e-05, 0.000185265, 0, 2.22318e-05, 0, 7.4106e-06, 0, 3.70529e-05, 0, 3.7053e-05, 0, 3.7053e-05, 0, 3.70529e-05, 0, 4.44636e-05, 0, 7.41059e-05, 0, 1.48212e-05, 0, 1.48211e-05, 0, 4.44636e-05, 0, 5.92847e-05, 0, 0, 0, 2.96424e-05, 0, 2.96423e-05, 0, 7.4106e-06, 0, 2.22318e-05, 0, 2.96424e-05, 0, 2.22318e-05, 0, 1.48211e-05, 0, 2.96424e-05, 0, 1.48212e-05, 0, 2.22318e-05, 0, 3.70529e-05, 0, 1.48212e-05, 0, 1.48212e-05, 0, 2.22318e-05, 0, 1.48211e-05, 0, 2.22318e-05, 0, 2.22318e-05, 0, 7.4106e-06, 0, 7.41059e-05, 0, 1.48212e-05, 0, 2.96423e-05, 0, 1.48212e-05, 0, 1.48212e-05, 0, 1.48212e-05, 0, 1.48212e-05, 0, 2.22317e-05, 0, 7.4106e-06, 0, 0, 0, 2.22318e-05, 0, 1.48212e-05, 0, 2.96423e-05, 0, 2.22318e-05, 0, 2.22318e-05, 0, 0, 0, 5.18741e-05, 0, 3.7053e-05, 0, 7.4106e-06, 0, 2.96423e-05, 0, 4.44636e-05, 0, 2.22318e-05, 0, 2.22317e-05, 0, 2.96424e-05, 0, 0.000207497, 0, 2.96423e-05, 0, 2.96424e-05, 0, 3.70529e-05, 0, 1.48212e-05, 0, 3.7053e-05, 0, 1.48212e-05, 0, 2.96423e-05, 0, 0.000155622, 0, 1.48212e-05, 0, 7.4106e-06, 0, 2.96424e-05, 0, 2.22318e-05, 0, 4.44635e-05, 0, 1.48212e-05, 0, 3.70529e-05, 0, 2.96424e-05, 0, 2.22318e-05, 0, 1.48212e-05, 0, 7.4106e-06, 0, 7.4105e-06, 0, 2.22318e-05, 0, 2.96424e-05, 0, 7.4106e-06, 0, 1.48212e-05, 0, 2.22317e-05, 0, 7.4106e-06, 0, 2.96424e-05, 0, 7.4106e-06, 0, 0, 0, 0, 0, 2.96423e-05, 0, 2.96424e-05, 0, 3.7053e-05, 0, 2.22317e-05, 0, 7.4106e-06, 0, 8.89271e-05, 0, 0, 0, 7.4106e-06, 0, 2.96424e-05, 0, 5.92847e-05, 0, 1.48212e-05, 0, 2.96424e-05, 0, 7.4105e-06, 0, 2.22318e-05, 0, 1.48212e-05, 0, 2.96424e-05, 0, 0, 0, 1.48212e-05, 0, 2.22317e-05, 0, 1.48212e-05, 0, 7.4106e-06}; +static constexpr double kMemcpyGoogleS[] = {0.0184049, 0.0306748, 0.00613497, 0.0122699, 0.0306748, 0.0122699, 0.0245399, 0.0245399, 0.00613497, 0.0122699, 0.00613497, 0.0122699, 0.0490798, 0.0920245, 0.0122699, 0, 0.0122699, 0.00613497, 0.147239, 0.239264, 0.00613497, 0.0184049, 0.0245399, 0, 0.0122699, 0.00613497, 0.00613497, 0.0122699, 0.00613497, 0, 0, 0.00613497, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0.0184049, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0122699, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0.00613497, 0.00613497, 0, 0.0122699, 0.0122699, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00613497}; +static constexpr double kMemcpyGoogleU[] = {0.0177, 0.2767, 0.0548, 0.011, 0.0156, 0.1325, 0.0614, 0.0195, 0.1576, 0.0099, 0.0066, 0.0083, 0.0066, 0.0087, 0.0054, 0.0051, 0.0243, 0.0059, 0.0124, 0.0062, 0.0045, 0.0055, 0.0061, 0.0044, 0.0121, 0.0028, 0.0038, 0.0031, 0.0033, 0.0028, 0.0028, 0.0026, 0.0109, 0.0019, 0.0013, 0.0013, 0.0008, 0.001, 0.0009, 0.0011, 0.0003, 0.0094, 0.0003, 0.0008, 0.0004, 0.0003, 0.0008, 0.0014, 0.0007, 0.0004, 0.0001, 0.0003, 0.0002, 0.0004, 0.0002, 0.0003, 0.0003, 0.0002, 0.0003, 0.0002, 0.0002, 0.0003, 0.0001, 0.0002, 0.0097, 0.0002, 0.0001, 0.0001, 0.0003, 0.0001, 0.0001, 0.0001, 0.0002, 0.0001, 0.0001, 0.0001, 0.0002, 0.0001, 0.0001, 0.0001, 0.0002, 0.0002, 0, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0004, 0, 0.0002, 0.0002, 0.0002, 0.0001, 0.0002, 0.0001, 0.0005, 0, 0.0001, 0.0001, 0.0002, 0.0001, 0.0001, 0, 0.0002, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0002, 0.0002, 0.0001, 0.0001, 0.0014, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0, 0.0001, 0.0001, 0, 0.0033, 0, 0, 0.0004, 0.0001, 0.0001, 0, 0, 0.0002, 0.0001, 0, 0, 0.0001, 0.0001, 0, 0, 0.0011, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0.0001, 0, 0, 0.0001, 0.0001, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0.0001, 0.0001, 0, 0, 0.0001, 0.0045, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0.0003, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0048, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0.0001, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0013, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0.0005, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0001}; +static constexpr double kMemcpyGoogleW[] = {0.0199353, 0, 0.0245151, 0, 0.102101, 0, 0.0301724, 0, 0.0347522, 0, 0.0309806, 0, 0.0242457, 0, 0.0239763, 0, 0.0360991, 0, 0.0358297, 0, 0.03125, 0, 0.0188578, 0, 0.0261315, 0, 0.028556, 0, 0.00942888, 0, 0.0118534, 0, 0.0282866, 0, 0.0172414, 0, 0.0180496, 0, 0.0185884, 0, 0.012931, 0, 0.0145474, 0, 0.00915948, 0, 0.0107759, 0, 0.0153556, 0, 0.0115841, 0, 0.00969828, 0, 0.0123922, 0, 0.0105065, 0, 0.00996767, 0, 0.0121228, 0, 0.0107759, 0, 0.0307112, 0, 0.0102371, 0, 0.00727371, 0, 0.0113147, 0, 0.00889009, 0, 0.00915948, 0, 0.00835129, 0, 0.00915948, 0, 0.0105065, 0, 0.00484914, 0, 0.00835129, 0, 0.00538793, 0, 0.00996767, 0, 0.00538793, 0, 0.00862069, 0, 0.00511853, 0, 0.00592672, 0, 0.00565733, 0, 0.00511853, 0, 0.0080819, 0, 0.00377155, 0, 0.00404095, 0, 0.00511853, 0, 0.00457974, 0, 0.00431034, 0, 0.00296336, 0, 0.00242457, 0, 0.00404095, 0, 0.00565733, 0, 0.00188578, 0, 0.00215517, 0, 0.00242457, 0, 0.0080819, 0, 0.00080819, 0, 0.00080819, 0, 0.000269397, 0, 0.00188578, 0, 0.00161638, 0, 0, 0, 0.000269397, 0, 0.00269397, 0, 0.00107759, 0, 0, 0, 0.000269397, 0, 0.000538793, 0, 0, 0, 0.000269397, 0, 0.00134698, 0, 0.00134698, 0, 0.000538793, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0.000538793, 0, 0.00215517, 0, 0.00080819, 0, 0.000269397, 0, 0.000269397, 0, 0.000538793, 0, 0.000538793, 0, 0.00107759, 0, 0.00161638, 0, 0.00134698, 0, 0.00296336, 0, 0.000538793, 0, 0.000269397, 0, 0.000269397, 0, 0.00134698, 0, 0, 0, 0.00107759, 0, 0.00161638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0.00080819, 0, 0.000269397, 0, 0.00080819, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0, 0, 0.00161638, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0.000538793, 0, 0, 0, 0, 0, 0, 0, 0.00404095, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0.000269396, 0, 0.000538793, 0, 0.000269397, 0, 0.000538793, 0, 0.000269397, 0, 0, 0, 0.000538793, 0, 0.000269397, 0, 0, 0, 0.000538793, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0.000269396, 0, 0.00080819, 0, 0.000269397, 0, 0.000538793, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0.000538793, 0, 0.000269397, 0, 0.000538793, 0, 0, 0, 0, 0, 0.000269396, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000269396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000538793, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0.000269397, 0, 0.000269397, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0.000269397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00215517}; +static constexpr double kMemsetGoogleB[] = {0, 0, 0, 0, 0, 0, 0, 0, 0.0681818, 0, 0, 0, 0, 0, 0.5, 0, 0.0227273, 0, 0, 0, 0, 0, 0.0227273, 0, 0.0454545, 0.0227273, 0, 0, 0, 0, 0, 0.0227273, 0.0227273, 0, 0, 0, 0, 0, 0, 0.0227273, 0.0227273, 0, 0, 0, 0, 0, 0, 0, 0.0454545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0227273, 0, 0, 0, 0, 0, 0, 0, 0.0227273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0681818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0227273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0227273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0227273}; +static constexpr double kMemsetGoogleD[] = {0.0243902, 0, 0, 0, 0, 0, 0, 0, 0.0487805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0243902, 0, 0, 0, 0, 0, 0, 0.0609756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0.0121951, 0, 0, 0, 0.0365854, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0.0609756, 0, 0, 0, 0, 0, 0, 0, 0.0243902, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0.0609756, 0, 0, 0, 0, 0, 0, 0, 0.0487805, 0, 0, 0, 0, 0, 0, 0, 0.0243902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0853659, 0, 0, 0, 0, 0, 0, 0, 0.0487805, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0.0853659, 0, 0, 0, 0, 0, 0, 0, 0.0731707, 0, 0, 0, 0, 0, 0, 0, 0.0365854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0243902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0365854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0121951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0365854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0365854}; +static constexpr double kMemsetGoogleQ[] = {0, 0, 0.0043, 0.0055, 0.0033, 0.0025, 0.0037, 0.0026, 0.0038, 0.0024, 0.0023, 0.003, 0.0025, 0.0008, 0.001, 0.0012, 0.0035, 0.0013, 0.001, 0.0002, 0.0004, 0.0009, 0.0011, 0.0007, 0.0008, 0.0014, 0.001, 0.0005, 0.0006, 0, 0.0007, 0.0021, 0.2082, 0.0013, 0.0004, 0.0003, 0.0005, 0.0005, 0.0008, 0.0003, 0.0005, 0.0007, 0.0002, 0.0001, 0.0007, 0.0005, 0.0005, 0.001, 0.0007, 0, 0.0005, 0.0001, 0.0002, 0, 0.0003, 0.0004, 0.0543, 0, 0.0005, 0.0003, 0.0003, 0.0004, 0.0001, 0, 0.0602, 0.0001, 0.0002, 0, 0, 0, 0.0003, 0.0004, 0.1578, 0, 0.0003, 0.0002, 0.001, 0, 0, 0.0013, 0.1236, 0, 0.0001, 0.0002, 0.0028, 0.0002, 0, 0.0002, 0.033, 0.0002, 0, 0, 0.0002, 0.0001, 0.0002, 0, 0.0129, 0.0002, 0.0002, 0.0003, 0.0018, 0, 0, 0.0002, 0.0126, 0.0002, 0.0002, 0.0003, 0.0007, 0.0001, 0, 0.0004, 0.0166, 0, 0.0001, 0, 0.0014, 0.0001, 0, 0, 0.0002, 0, 0, 0, 0.002, 0.0066, 0, 0, 0, 0, 0, 0, 0.0005, 0, 0, 0, 0.0002, 0, 0, 0, 0.0005, 0, 0, 0.0005, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0.0003, 0, 0, 0, 0.0013, 0, 0, 0, 0.0023, 0, 0, 0, 0.0017, 0, 0, 0, 0, 0, 0, 0, 0.0017, 0, 0, 0, 0.0064, 0, 0, 0, 0, 0, 0, 0, 0.0009, 0, 0, 0, 0.0005, 0, 0, 0, 0.0702, 0, 0, 0, 0.0015, 0, 0, 0, 0.0017, 0, 0, 0, 0.0018, 0, 0, 0, 0.0002, 0, 0, 0, 0.0028, 0, 0, 0, 0.003, 0, 0, 0, 0, 0, 0, 0, 0.0121, 0, 0, 0, 0, 0, 0, 0, 0.0039, 0, 0, 0, 0.0021, 0, 0, 0, 0.0005, 0, 0, 0, 0.0037, 0, 0, 0, 0.0045, 0, 0, 0, 0.0019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0014, 0, 0, 0, 0, 0, 0, 0.0163, 0.0011, 0, 0, 0, 0.0037, 0, 0, 0, 0.0006, 0, 0, 0, 0.0005, 0, 0, 0, 0.0015, 0, 0, 0, 0.0014, 0, 0, 0, 0.0044, 0, 0, 0, 0.002, 0, 0, 0, 0.0027, 0, 0, 0, 0, 0, 0, 0, 0.001, 0, 0, 0, 0, 0, 0, 0, 0.0026, 0, 0, 0, 0.0004, 0, 0, 0, 0.0023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0003, 0, 0, 0, 0.0002, 0, 0, 0, 0.0028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0009, 0, 0, 0, 0.0006, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0.0012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0003, 0, 0, 0, 0, 0, 0, 0, 0.0008, 0, 0, 0, 0, 0, 0, 0, 0.0015, 0, 0, 0, 0.002, 0, 0, 0, 0.0007, 0, 0, 0, 0, 0, 0, 0, 0.0016, 0, 0, 0, 0, 0, 0, 0, 0.0009, 0, 0, 0, 0, 0, 0, 0, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0019, 0, 0, 0, 0, 0, 0, 0, 0.0007, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0.0286, 0, 0, 0, 0.0006, 0, 0, 0, 0, 0, 0, 0, 0.0007, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0.0022, 0, 0, 0, 0, 0, 0, 0, 0.0038, 0, 0, 0, 0.0003, 0, 0, 0, 0.0004, 0, 0, 0, 0, 0, 0, 0, 0.0006, 0, 0, 0, 0, 0, 0, 0, 0.0009, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.001, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0.0005, 0, 0, 0, 0.001, 0, 0, 0, 0.0018, 0, 0, 0, 0, 0, 0, 0, 0.0005, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0.0003}; +static constexpr double kMemsetGoogleU[] = {0.1064, 0.0986, 0.0201, 0.0042, 0.1506, 0.0276, 0.0028, 0.0033, 0.3233, 0.1282, 0.011, 0.0035, 0.0015, 0.0019, 0.0005, 0.0007, 0.0143, 0.0152, 0.0005, 0.0146, 0.0013, 0.0001, 0.0001, 0.0067, 0.0054, 0, 0.0001, 0, 0.0006, 0, 0.0002, 0.0062, 0.0005, 0, 0, 0, 0.0004, 0, 0, 0.0001, 0.0003, 0, 0.0001, 0, 0.0001, 0.0001, 0, 0.0021, 0.0002, 0, 0, 0.0001, 0.0001, 0.0001, 0, 0, 0.0001, 0.0001, 0, 0.0001, 0.0001, 0, 0.0001, 0, 0.0092, 0, 0, 0, 0.0002, 0, 0, 0, 0.007, 0, 0, 0, 0, 0, 0, 0.0015, 0.0001, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0.0001, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0, 0.0001, 0.0001, 0.0053, 0, 0.0001, 0, 0, 0, 0.0002, 0, 0, 0, 0.0001, 0, 0, 0.0001, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0.0001, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0.0001, 0, 0.0012, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0003, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0006, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0.0002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001}; +// clang-format on + +ArrayRef GetMemcpySizeDistributions() { + static constexpr MemorySizeDistribution kDistributions[] = { + {"memcpy Google A", kMemcpyGoogleA}, {"memcpy Google B", kMemcpyGoogleB}, + {"memcpy Google D", kMemcpyGoogleD}, {"memcpy Google L", kMemcpyGoogleL}, + {"memcpy Google M", kMemcpyGoogleM}, {"memcpy Google Q", kMemcpyGoogleQ}, + {"memcpy Google S", kMemcpyGoogleS}, {"memcpy Google U", kMemcpyGoogleU}, + {"memcpy Google W", kMemcpyGoogleW}, + }; + return kDistributions; +} + +ArrayRef GetMemsetSizeDistributions() { + static constexpr MemorySizeDistribution kDistributions[] = { + {"memset Google B", kMemsetGoogleB}, + {"memset Google D", kMemsetGoogleD}, + {"memset Google Q", kMemsetGoogleQ}, + {"memset Google U", kMemsetGoogleU}, + }; + return kDistributions; +} + +ArrayRef GetMemcmpSizeDistributions() { + static constexpr MemorySizeDistribution kDistributions[] = { + {"memcmp Google A", kMemcmpGoogleA}, {"memcmp Google B", kMemcmpGoogleB}, + {"memcmp Google D", kMemcmpGoogleD}, {"memcmp Google L", kMemcmpGoogleL}, + {"memcmp Google M", kMemcmpGoogleM}, {"memcmp Google Q", kMemcmpGoogleQ}, + {"memcmp Google S", kMemcmpGoogleS}, {"memcmp Google U", kMemcmpGoogleU}, + {"memcmp Google W", kMemcmpGoogleW}, + }; + return kDistributions; +} +} // namespace libc_benchmarks +} // namespace llvm diff --git a/libc/benchmarks/MemorySizeDistributions.h b/libc/benchmarks/MemorySizeDistributions.h new file mode 100644 index 0000000..3a25ae3 --- /dev/null +++ b/libc/benchmarks/MemorySizeDistributions.h @@ -0,0 +1,44 @@ +//===-- MemorySizeDistributions ---------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Memory functions operate on buffers of certain sizes. This file provides +// probability distributions observed at runtime for a set of applications. +// These distributions are used to benchmark and compare memory functions +// implementations. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H +#define LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H + +#include +#include + +namespace llvm { +namespace libc_benchmarks { + +/// A simple POD exposing caracteristics of a memory function size +/// distributions. The underlying data is immutable. +struct MemorySizeDistribution { + StringRef Name; // The name of the distribution. + ArrayRef Probabilities; // Size indexed array of probabilities. +}; + +/// Returns a list of memcpy size distributions. +ArrayRef getMemcpySizeDistributions(); + +/// Returns a list of memset size distributions. +ArrayRef getMemsetSizeDistributions(); + +/// Returns a list of memcmp size distributions. +ArrayRef getMemcmpSizeDistributions(); + +} // namespace libc_benchmarks +} // namespace llvm + +#endif // LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H -- 2.7.4