58 lines
2.0 KiB
C++
58 lines
2.0 KiB
C++
#ifndef ALSK_CELERO_BONE_COMMON_H
|
|
#define ALSK_CELERO_BONE_COMMON_H
|
|
|
|
#include <algorithm>
|
|
#include <cstdint>
|
|
#include <vector>
|
|
|
|
#include <celero/Celero.h>
|
|
|
|
#include <alsk/alsk.h>
|
|
|
|
namespace bench {
|
|
|
|
using Data = std::vector<int>;
|
|
using Value = Data::value_type;
|
|
|
|
struct Task {
|
|
std::size_t size;
|
|
Data operator()(int min, int max) const;
|
|
|
|
// TODO inline version: improve benchmarking for skeleton?
|
|
// Data operator()(int min, int max) const {
|
|
// Data v(size);
|
|
// std::generate_n(std::begin(v), size, [&, i=0]() mutable { return (++i)%(max-min+1) + min; });
|
|
// return v;
|
|
// };
|
|
};
|
|
constexpr auto eTask = alsk::edsl::makeOperand<Data(int, int), Task>();
|
|
constexpr auto eTaskStdFun = alsk::edsl::makeOperand<Data(int, int), std::function<Data(int, int)>>();
|
|
|
|
template<std::size_t count>
|
|
void taskV() {
|
|
std::vector<int> v(count);
|
|
std::generate_n(std::begin(v), count, [i=0]() mutable { return i++; });
|
|
for(std::size_t i = 0; i < count; ++i)
|
|
celero::DoNotOptimizeAway(std::accumulate(begin(v), end(v), i));
|
|
}
|
|
template<std::size_t count>
|
|
constexpr auto eTaskV = alsk::edsl::makeOperand<void(), FN(taskV<count>)>();
|
|
template<std::size_t count>
|
|
constexpr auto eTaskVStdFun = alsk::edsl::makeOperand<void(), std::function<void()>>();
|
|
|
|
Data taskD(Data const&);
|
|
constexpr auto eTaskD = alsk::edsl::makeOperand<Data(Data const&), FN(taskD)>();
|
|
constexpr auto eTaskDStdFun = alsk::edsl::makeOperand<Data(Data const&), std::function<Data(Data const&)>>();
|
|
|
|
Data const& select(Data const&, Data const&);
|
|
constexpr auto eSelect = alsk::edsl::makeOperand<Data(Data const&, Data const&), FN(select)>();
|
|
constexpr auto eSelectStdFun = alsk::edsl::makeOperand<Data(Data const&, Data const&), std::function<Data(Data const&, Data const&)>>();
|
|
|
|
Value project(Data const&, Value const&);
|
|
constexpr auto eProject = alsk::edsl::makeOperand<Value(Data const&, Value const&), FN(project)>();
|
|
constexpr auto eProjectStdFun = alsk::edsl::makeOperand<Value(Data const&, Value const&), std::function<Value(Data const&, Value const&)>>();
|
|
|
|
}
|
|
|
|
#endif
|