alsk/celero/thread.cpp

37 lines
704 B
C++
Raw Normal View History

2021-05-10 16:14:13 +00:00
#include <celero/Celero.h>
#include <alsk/alsk.h>
constexpr unsigned samples = 20;
constexpr unsigned iterations = 500;
constexpr unsigned count = 1'000'000;
namespace {
unsigned r;
void *f(void * = nullptr) {
r = 0;
for(unsigned volatile i = 0; i < count; ++i) r += r;
return &r;
}
}
BASELINE(Thread, None, samples, iterations) {
celero::DoNotOptimizeAway(f());
}
BENCHMARK(Thread, cthread, samples, iterations) {
void *r;
pthread_t thread;
pthread_create(&thread, NULL, f, NULL);
pthread_join(thread, &r);
celero::DoNotOptimizeAway(r);
}
BENCHMARK(Thread, stdthread, samples, iterations) {
std::thread thread{f, nullptr};
thread.join();
celero::DoNotOptimizeAway(thread);
}