alsk/examples/basic_raw.cpp

42 lines
837 B
C++

#include <alsk/alsk.h>
struct Gen {
int value;
int operator()() { return value++; }
};
int transform(int v, std::mt19937& rng) {
std::uniform_int_distribution<int> d(-3, 3);
return v + d(rng);
}
/* raw interface */
using Structure =
alsk::S<alsk::FarmSel,
alsk::S<alsk::Serial, Gen, FN(transform)>,
Fn<int const&(&)(int const&, int const&), std::min<int>>
>;
using Links =
alsk::L<alsk::FarmSel, int(),
alsk::L<alsk::Serial, alsk::arg::R<1>(),
int(),
int(alsk::arg::R<0>, alsk::arg::RNG)
>,
int(int, int)
>;
using Skeleton = alsk::BuildSkeletonT<Structure, Links>;
int main() {
auto algo = alsk::implement<alsk::exec::StaticPool, Skeleton>();
algo.skeleton.n = 10;
algo.skeleton.task.task<0>() = Gen{5};
algo.executor.repeatability.upTo(8);
algo.executor.cores = 8;
auto r = algo();
std::printf("%d\n", r);
}