51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
|
#include <celero/Celero.h>
|
||
|
#include <alsk/alsk.h>
|
||
|
|
||
|
#include "common.h"
|
||
|
|
||
|
using namespace bench;
|
||
|
using namespace alsk::edsl;
|
||
|
using namespace alsk::arg;
|
||
|
|
||
|
constexpr unsigned samples = 50, iterations = 100;
|
||
|
constexpr unsigned n = 8192; // if too small => bad results
|
||
|
constexpr auto initVector = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
|
||
|
|
||
|
decltype(auto) hwIterSel(Data const& init) {
|
||
|
Data best = init;
|
||
|
|
||
|
for(std::size_t i = 0; i < n; ++i) {
|
||
|
Data current = taskD(best);
|
||
|
best = select(std::move(current), std::move(best));
|
||
|
}
|
||
|
|
||
|
return best;
|
||
|
}
|
||
|
|
||
|
constexpr auto eIterSel = &link<Data(Data const&)>(n * eTaskD) ->* eSelect;
|
||
|
constexpr auto eIterSelStdFun = &link<Data(Data const&)>(n * eTaskDStdFun) ->* eSelectStdFun;
|
||
|
|
||
|
BASELINE(IterSel, Handwritten, samples, iterations) {
|
||
|
celero::DoNotOptimizeAway(
|
||
|
hwIterSel(initVector)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
BENCHMARK(IterSel, Skeleton, samples, iterations) {
|
||
|
auto iterSel = alsk::edsl::implement<alsk::exec::Sequential>(eIterSel);
|
||
|
|
||
|
celero::DoNotOptimizeAway(
|
||
|
iterSel(initVector)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
BENCHMARK(IterSel, SkeletonStdFunction, samples, iterations) {
|
||
|
auto iterSel = alsk::edsl::implement<alsk::exec::Sequential>(eIterSelStdFun);
|
||
|
iterSel.skeleton.task = taskD;
|
||
|
iterSel.skeleton.select = bench::select;
|
||
|
|
||
|
celero::DoNotOptimizeAway(
|
||
|
iterSel(initVector)
|
||
|
);
|
||
|
}
|