main.cpp 1.07 KB
Newer Older
1
#include <pls/pls.h>
2
#include <pls/internal/helpers/profiler.h>
3

4
#include <iostream>
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
    PROFILE_ENABLE
37
    pls::scheduler scheduler{&my_scheduler_memory, 2};
38

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

50
    PROFILE_SAVE("test_profile.prof")
51
}