mirror of
https://github.com/aaru-dps/Aaru.Checksums.Native.git
synced 2026-07-08 18:06:03 +00:00
Add benchmark.
This commit is contained in:
@@ -120,3 +120,4 @@ add_library("Aaru.Checksums.Native" SHARED adler32.h adler32.c crc16.h crc16.c c
|
||||
crc16_neon.c)
|
||||
|
||||
add_subdirectory(tests)
|
||||
add_subdirectory(benchmarks)
|
||||
|
||||
23
benchmarks/CMakeLists.txt
Normal file
23
benchmarks/CMakeLists.txt
Normal file
@@ -0,0 +1,23 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(benchmarks CXX)
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
benchmark
|
||||
GIT_REPOSITORY https://github.com/google/benchmark.git
|
||||
GIT_TAG v1.8.4
|
||||
)
|
||||
FetchContent_MakeAvailable(benchmark)
|
||||
|
||||
add_executable(bench_spamsum bench_spamsum.cpp)
|
||||
target_link_libraries(bench_spamsum PRIVATE benchmark::benchmark "Aaru.Checksums.Native")
|
||||
target_include_directories(bench_spamsum PRIVATE ${CMAKE_SOURCE_DIR})
|
||||
|
||||
# Copy DLL to benchmark output directory after build (Windows)
|
||||
if (WIN32)
|
||||
add_custom_command(TARGET bench_spamsum POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"$<TARGET_FILE_DIR:Aaru.Checksums.Native>/$<TARGET_FILE_NAME:Aaru.Checksums.Native>"
|
||||
$<TARGET_FILE_DIR:bench_spamsum>
|
||||
)
|
||||
endif()
|
||||
29
benchmarks/bench_spamsum.cpp
Normal file
29
benchmarks/bench_spamsum.cpp
Normal file
@@ -0,0 +1,29 @@
|
||||
#include <benchmark/benchmark.h>
|
||||
#include "library.h"
|
||||
#include "spamsum.h"
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <random>
|
||||
|
||||
#define TEST_DATA_SIZE (1024 * 1024)
|
||||
|
||||
static void BM_spamsum_update(benchmark::State& state) {
|
||||
spamsum_ctx *ctx = spamsum_init();
|
||||
uint8_t *data = (uint8_t*)malloc(TEST_DATA_SIZE);
|
||||
// Fill buffer with random data
|
||||
std::random_device rd;
|
||||
std::mt19937 gen(rd());
|
||||
std::uniform_int_distribution<int> dis(0, 255);
|
||||
for (size_t i = 0; i < TEST_DATA_SIZE; ++i) {
|
||||
data[i] = static_cast<uint8_t>(dis(gen));
|
||||
}
|
||||
for (auto _ : state) {
|
||||
spamsum_update(ctx, data, TEST_DATA_SIZE);
|
||||
}
|
||||
free(data);
|
||||
spamsum_free(ctx);
|
||||
}
|
||||
|
||||
BENCHMARK(BM_spamsum_update)->MinTime(5.0)->Unit(benchmark::kMillisecond);
|
||||
|
||||
BENCHMARK_MAIN();
|
||||
Reference in New Issue
Block a user