diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:17 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:17 +0300 |
commit | d3a398281c6fd1d3672036cb2d63f842d2cb28c5 (patch) | |
tree | dd4bd3ca0f36b817e96812825ffaf10d645803f2 /util/system/benchmark/rdtsc/main.cpp | |
parent | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (diff) | |
download | ydb-d3a398281c6fd1d3672036cb2d63f842d2cb28c5.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'util/system/benchmark/rdtsc/main.cpp')
-rw-r--r-- | util/system/benchmark/rdtsc/main.cpp | 120 |
1 files changed, 60 insertions, 60 deletions
diff --git a/util/system/benchmark/rdtsc/main.cpp b/util/system/benchmark/rdtsc/main.cpp index 2d09e445ef..8189d10f06 100644 --- a/util/system/benchmark/rdtsc/main.cpp +++ b/util/system/benchmark/rdtsc/main.cpp @@ -1,61 +1,61 @@ #include <library/cpp/testing/benchmark/bench.h> - -#include <util/system/datetime.h> -#include <util/generic/xrange.h> - -Y_FORCE_INLINE ui64 GetCycleCountLinux() { - unsigned hi, lo; - __asm__ __volatile__("lfence\n" - "rdtsc" - : "=a"(lo), "=d"(hi)); - return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); -} - -Y_FORCE_INLINE ui64 GetCycleCountAgri1() { - unsigned hi, lo; - - __asm__ __volatile__("rdtscp\n" - : "=a"(lo), "=d"(hi)::"%rbx", "%rcx"); - - return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); -} - -Y_FORCE_INLINE ui64 GetCycleCountAgri2() { - unsigned hi, lo; - __asm__ __volatile__("rdtscp\n" - : "=a"(lo), "=d"(hi)::"%rbx", "%rcx"); - /* call cpuid to prevent out of order execution */ - __asm__ __volatile__("mov $0, %%eax\n" - "cpuid\n" :: - : "%eax"); - - return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); -} - -Y_CPU_BENCHMARK(RdtscUtil, iface) { - for (const auto i : xrange(iface.Iterations())) { - Y_UNUSED(i); - Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCount()); - } -} - -Y_CPU_BENCHMARK(RdtscLinux, iface) { - for (const auto i : xrange(iface.Iterations())) { - Y_UNUSED(i); - Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCountLinux()); - } -} - -Y_CPU_BENCHMARK(RdtscAgri1, iface) { - for (const auto i : xrange(iface.Iterations())) { - Y_UNUSED(i); - Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCountAgri1()); - } -} - -Y_CPU_BENCHMARK(RdtscAgri2, iface) { - for (const auto i : xrange(iface.Iterations())) { - Y_UNUSED(i); - Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCountAgri2()); - } -} + +#include <util/system/datetime.h> +#include <util/generic/xrange.h> + +Y_FORCE_INLINE ui64 GetCycleCountLinux() { + unsigned hi, lo; + __asm__ __volatile__("lfence\n" + "rdtsc" + : "=a"(lo), "=d"(hi)); + return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); +} + +Y_FORCE_INLINE ui64 GetCycleCountAgri1() { + unsigned hi, lo; + + __asm__ __volatile__("rdtscp\n" + : "=a"(lo), "=d"(hi)::"%rbx", "%rcx"); + + return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); +} + +Y_FORCE_INLINE ui64 GetCycleCountAgri2() { + unsigned hi, lo; + __asm__ __volatile__("rdtscp\n" + : "=a"(lo), "=d"(hi)::"%rbx", "%rcx"); + /* call cpuid to prevent out of order execution */ + __asm__ __volatile__("mov $0, %%eax\n" + "cpuid\n" :: + : "%eax"); + + return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); +} + +Y_CPU_BENCHMARK(RdtscUtil, iface) { + for (const auto i : xrange(iface.Iterations())) { + Y_UNUSED(i); + Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCount()); + } +} + +Y_CPU_BENCHMARK(RdtscLinux, iface) { + for (const auto i : xrange(iface.Iterations())) { + Y_UNUSED(i); + Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCountLinux()); + } +} + +Y_CPU_BENCHMARK(RdtscAgri1, iface) { + for (const auto i : xrange(iface.Iterations())) { + Y_UNUSED(i); + Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCountAgri1()); + } +} + +Y_CPU_BENCHMARK(RdtscAgri2, iface) { + for (const auto i : xrange(iface.Iterations())) { + Y_UNUSED(i); + Y_DO_NOT_OPTIMIZE_AWAY(GetCycleCountAgri2()); + } +} |