mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 22:16:05 +00:00

This patch fixes warnings and errors that come up when running the benchmarks as part of the test suite. It also adds the necessary Lit annotations to make it pass in various configurations and increases the portability of the benchmarks.
45 lines
1.4 KiB
C++
45 lines
1.4 KiB
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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++03, c++11, c++14
|
|
|
|
// This benchmark compares the performance of std::mutex and std::shared_mutex in contended scenarios.
|
|
// it's meant to establish a baseline overhead for std::shared_mutex and std::mutex, and to help inform decisions about
|
|
// which mutex to use when selecting a mutex type for a given use case.
|
|
|
|
#include <atomic>
|
|
#include <mutex>
|
|
#include <numeric>
|
|
#include <shared_mutex>
|
|
#include <thread>
|
|
|
|
#include "benchmark/benchmark.h"
|
|
|
|
int global_value = 42;
|
|
std::mutex m;
|
|
std::shared_mutex sm;
|
|
|
|
static void BM_shared_mutex(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
std::shared_lock<std::shared_mutex> lock(sm);
|
|
benchmark::DoNotOptimize(global_value);
|
|
}
|
|
}
|
|
|
|
static void BM_mutex(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
std::lock_guard<std::mutex> lock(m);
|
|
benchmark::DoNotOptimize(global_value);
|
|
}
|
|
}
|
|
|
|
BENCHMARK(BM_shared_mutex)->Threads(1)->Threads(2)->Threads(4)->Threads(8)->Threads(32);
|
|
BENCHMARK(BM_mutex)->Threads(1)->Threads(2)->Threads(4)->Threads(8)->Threads(32);
|
|
|
|
BENCHMARK_MAIN();
|