diff options
Diffstat (limited to 'dev/misc/BenchKit')
| -rw-r--r-- | dev/misc/BenchKit/Chronometer.h | 40 | ||||
| -rw-r--r-- | dev/misc/BenchKit/HWChronometer.h | 66 |
2 files changed, 0 insertions, 106 deletions
diff --git a/dev/misc/BenchKit/Chronometer.h b/dev/misc/BenchKit/Chronometer.h deleted file mode 100644 index 8a1fa3ab..00000000 --- a/dev/misc/BenchKit/Chronometer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ======================================== - -Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#ifndef BENCHKIT_CHRONO_H -#define BENCHKIT_CHRONO_H - -#include <CompilerKit/CompilerKit.h> -#include <NeKit/Defines.h> - -/// @author Amlal El Mahrouss -/// @brief BenchKit Chrono contract. - -#define BENCHKIT_INTERFACE : public ::Kernel::ChronoInterface - -namespace Kernel { -class ChronoInterface; - -/// @brief a Chronometer interface used for benchmarking. -class ChronoInterface { - public: - ChronoInterface() = default; - virtual ~ChronoInterface() = default; - - NE_COPY_DEFAULT(ChronoInterface) - - virtual Void Start() = 0; - virtual Void Stop() = 0; - virtual Void Reset() = 0; - virtual UInt64 GetElapsedTime() const = 0; -}; -} // namespace Kernel - -namespace BenchKit { -using namespace Kernel; -} - -#endif // BENCHKIT_CHRONO_H diff --git a/dev/misc/BenchKit/HWChronometer.h b/dev/misc/BenchKit/HWChronometer.h deleted file mode 100644 index 331f9a7d..00000000 --- a/dev/misc/BenchKit/HWChronometer.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ======================================== - -Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#pragma once - -#include <misc/BenchKit/Chronometer.h> - -namespace Kernel { -struct HWChronoTraits; - -template <typename ChronoTraits = HWChronoTraits> -class HWChrono; - -/// @brief BenchKit chrono logic for x64/ARM64. -struct HWChronoTraits final { - private: - STATIC UInt64 TickImpl_(void) { -#ifdef __NE_AMD64__ - UInt64 a = 0, d = 0; - - asm volatile("rdtsc" : "=a"(a), "=d"(d)); - - return (d << 32) | a; -#elif defined(__NE_ARM64__) - UInt64 result; - - asm volatile("mrs %0, cntvct_el1" : "=r"(result)); - - return result; -#else -#error !!! no backend defined !!! -#endif - } - - friend HWChrono<HWChronoTraits>; -}; - -/// @brief hardware chronometer implementation using a trait to extract the data. -template <typename ChronoTraits> -class HWChrono BENCHKIT_INTERFACE { - public: - HWChrono() = default; - virtual ~HWChrono() override = default; - - NE_COPY_DEFAULT(HWChrono) - - public: - Void Start() override { fStart = ChronoTraits::TickImpl_(); } - - Void Stop() override { fStop = ChronoTraits::TickImpl_(); } - - Void Reset() override { - fStart = 0; - fStop = 0; - } - - UInt64 GetElapsedTime() const override { return fStop - fStart; } - - private: - UInt64 fStart{}; - UInt64 fStop{}; -}; -} // namespace Kernel |
