main.cpp 1.01 KB
Newer Older
1 2 3
#include <pls/pls.h>
#include <iostream>

4
#include <easy/profiler.h>
5

6 7 8
static pls::static_scheduler_memory<8, 2 << 14> my_scheduler_memory;

static constexpr int CUTOFF = 10;
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

long fib_serial(long n) {
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }

    return fib_serial(n - 1) + fib_serial(n - 2);
}

long fib(long n) {
    if (n <= CUTOFF) {
        return fib_serial(n);
    }

    // Actual 'invoke_parallel' logic/code
    int left, right;
    pls::invoke_parallel(
        [&] { left = fib(n - 1); },
        [&] { right = fib(n - 2); }
    );
    return left + right;
}

int main() {
36
    EASY_PROFILER_ENABLE;
37 38
    pls::scheduler scheduler{&my_scheduler_memory, 8};

39 40 41
    long result;
    scheduler.perform_work([&] {
        EASY_MAIN_THREAD;
42 43
        // Call looks just the same, only requirement is
        // the enclosure in the perform_work lambda.
44
        result = fib(30);
45
    });
46 47 48
    std::cout << "Fib(30)=" << result << std::endl;

    profiler::dumpBlocksToFile("test_profile.prof");
49
}