pfor/examples/seq.cpp

53 lines
1.2 KiB
C++

#include <algorithm>
#include <iostream>
#include <iterator>
#include <pfor/pfor.h>
#define K 1
std::size_t pfor::ParallelForParameters::nThreads{1};
using T = int;
#define OPERAND(Type, name, n, size, filler) \
Type * name##n##_ = new Type[size]; \
{ \
std::size_t i = 0; \
std::generate_n(name##n##_, size, [&i]{ return filler; }); \
}
void printer(std::size_t) {}
template<typename T, typename... Ts>
void printer(std::size_t n, T &&array, Ts&&... arrays) {
for(std::size_t i = 0; i < n; ++i)
std::clog << std::forward<T>(array)[i] << ", ";
std::clog << std::endl;
printer(n, std::forward<Ts>(arrays)...);
}
int main() {
std::size_t const N = 1000000;
OPERAND(T, a, 0, N, i++);
OPERAND(T, a, 1, N, i++);
OPERAND(T, a, 2, N, i++);
OPERAND(T, a, 3, N, i++);
OPERAND(T, a, 4, N, i++);
OPERAND(T, a, 5, N, i++);
OPERAND(T, a, 6, N, i++);
OPERAND(T, a, 7, N, i++);
for(std::size_t k = 0; k < K; ++k) {
for(std::size_t i = 0; i < N-1; ++i) {
a0_[i] = a0_[i+1] + a1_[i] * a2_[i];
a1_[i] = a1_[i+1] + a2_[i] * a3_[i];
a2_[i] = a2_[i+1] + a3_[i] * a4_[i];
a5_[i] = a5_[i+1] + a6_[i] * a7_[i];
}
}
printer(N, a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_);
}