pfor/examples/thesis.cpp

28 lines
906 B
C++

#include <cstdio>
#include <cmath>
#include <pfor/pfor.h>
std::size_t pfor::ParallelForParameters::nThreads = 16;
constexpr long n = 16;
int main() {
std::array<int, n> a_; pfor::Operand<decltype(a_), class IDa> a{a_};
std::array<int, n> b_; pfor::Operand<decltype(b_), class IDb> b{b_};
std::array<int, n> c_; pfor::Operand<decltype(c_), class IDc> c{c_};
std::array<int, n> d_; pfor::Operand<decltype(d_), class IDd> d{d_};
std::array<int, n> e_; pfor::Operand<decltype(e_), class IDe> e{e_};
std::array<int, n> f_; pfor::Operand<decltype(f_), class IDf> f{f_};
auto pow = pfor::makeOperator<float(&)(float, float)>(std::pow);
pfor::Index i;
pfor::parallelFor<pfor::ForLoopThread>(pfor::Range{0, static_cast<decltype(+n)>(std::sqrt(n))},
a[i] = a[i] * b[i],
c[i] = c[i+pfor::ctv<1>] - d[i],
b[i] = b[i] + i,
d[i] = pow(c[i], e[i]),
f[injective(i*i)] = 2 * f[injective(i*i)]
);
}