Skip to content

Commit

Permalink
Added CETL function benchmark suite #verification #docs #sonar
Browse files Browse the repository at this point in the history
  • Loading branch information
serges147 committed Dec 3, 2024
1 parent ccd5316 commit 28a2d69
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 1 deletion.
5 changes: 4 additions & 1 deletion cetlvast/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ add_project_library(
)

find_package(clangformat)
find_package(benchmark)

if(clangformat_FOUND)
# define a dry-run version that we always run.
Expand Down Expand Up @@ -198,7 +199,9 @@ endif()
add_subdirectory(${CMAKE_SOURCE_DIR}/suites/unittest)
add_subdirectory(${CMAKE_SOURCE_DIR}/suites/docs)
add_subdirectory(${CMAKE_SOURCE_DIR}/suites/compile)

if(benchmark_FOUND)
add_subdirectory(${CMAKE_SOURCE_DIR}/suites/benchmark)
endif()
# +---------------------------------------------------------------------------+
# | BUILD TARGET ALIASES
# +---------------------------------------------------------------------------+
Expand Down
36 changes: 36 additions & 0 deletions cetlvast/suites/benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT
#

cmake_minimum_required(VERSION 3.22.0)

project(cetlvast_benchmark CXX)

find_package(benchmark REQUIRED)

file(GLOB_RECURSE TEST_SOURCES
LIST_DIRECTORIES false
CONFIGURE_DEPENDS
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
benchmark_*.cpp **/benchmark_*.cpp
)

set(ALL_TESTS_BUILD "")

foreach(TEST_SOURCE ${TEST_SOURCES})

cmake_path(GET TEST_SOURCE STEM TEST_NAME)

add_executable(${TEST_NAME} ${TEST_SOURCE})
target_link_libraries(${TEST_NAME} cetl benchmark::benchmark)

list(APPEND ALL_TESTS_BUILD ${TEST_NAME})

endforeach()

add_custom_target(
build_benchmarks
DEPENDS
${ALL_TESTS_BUILD}
)
69 changes: 69 additions & 0 deletions cetlvast/suites/benchmark/pmr/benchmark_pmr_function.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include <cetl/pmr/function.hpp>

#include <benchmark/benchmark.h>

namespace
{

void BM_CetlFn_call(benchmark::State& state)
{
cetl::pmr::function<int64_t(int64_t), 16> fn = [](int64_t i) {
benchmark::DoNotOptimize(i);
return i;
};
for (auto _ : state)
{
int64_t res = 0;
const auto lim = state.range();
for (int i = 0; i < lim; ++i)
{
res += fn(i);
}
benchmark::DoNotOptimize(res);
}
}

void BM_StdFn_call(benchmark::State& state)
{
std::function<int64_t(int64_t)> fn = [](int64_t i) {
benchmark::DoNotOptimize(i);
return i;
};
for (auto _ : state)
{
int64_t res = 0;
const auto lim = state.range();
for (int i = 0; i < lim; ++i)
{
res += fn(i);
}
benchmark::DoNotOptimize(res);
}
}

void BM_Lambda_call(benchmark::State& state)
{
auto fn = [](int64_t i) {
benchmark::DoNotOptimize(i);
return i;
};
for (auto _ : state)
{
int64_t res = 0;
const auto lim = state.range();
for (int i = 0; i < lim; ++i)
{
res += fn(i);
}
benchmark::DoNotOptimize(res);
}
(void) fn;
}

} // namespace

BENCHMARK(BM_CetlFn_call)->Arg(1000);
BENCHMARK(BM_StdFn_call)->Arg(1000);
BENCHMARK(BM_Lambda_call)->Arg(1000);

BENCHMARK_MAIN();

0 comments on commit 28a2d69

Please sign in to comment.