alsk/celero/bone/farm.cpp

35 lines
825 B
C++

#include <celero/Celero.h>
#include <alsk/alsk.h>
#include "common.h"
using namespace bench;
constexpr unsigned samples = 30, iterations = 10, cores = 4;
constexpr unsigned n = 64;
constexpr std::size_t vecSize = 1'000;
constexpr auto eFarm = n*eTaskV<vecSize>;
BASELINE(Farm, Handwritten, samples, iterations) {
for(unsigned i = 0; i < n; ++i) taskV<vecSize>();
}
BENCHMARK(Farm, Skeleton, samples, iterations) {
auto farm = alsk::edsl::implement<alsk::exec::Sequential>(eFarm);
farm();
}
BASELINE(FarmPar, Handwritter, samples, iterations) {
#pragma omp parallel for num_threads(cores)
for(unsigned i = 0; i < n; ++i) taskV<vecSize>();
}
BENCHMARK(FarmPar, Parallel, samples, iterations) {
auto farm = alsk::edsl::implement<alsk::exec::StaticThread>(eFarm);
farm.executor.cores = cores;
farm();
}