Add nstream to C++ STD version -- untested as compilers not ready
This commit is contained in:
parent
579247dc06
commit
490af52147
@ -94,6 +94,20 @@ void STD20Stream<T>::triad()
|
||||
);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void STD20Stream<T>::nstream()
|
||||
{
|
||||
const T scalar = startScalar;
|
||||
|
||||
std::for_each_n(
|
||||
std::execution::par_unseq,
|
||||
std::views::iota(0).begin(), array_size,
|
||||
[&] (int i) {
|
||||
a[i] += b[i] + scalar * c[i];
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
T STD20Stream<T>::dot()
|
||||
{
|
||||
|
||||
@ -33,6 +33,7 @@ class STD20Stream : public Stream<T>
|
||||
virtual void add() override;
|
||||
virtual void mul() override;
|
||||
virtual void triad() override;
|
||||
virtual void nstream() override;
|
||||
virtual T dot() override;
|
||||
|
||||
virtual void init_arrays(T initA, T initB, T initC) override;
|
||||
|
||||
@ -72,6 +72,17 @@ void STDStream<T>::triad()
|
||||
std::transform(exe_policy, b, b+array_size, c, a, [](T bi, T ci){ return bi+startScalar*ci; });
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void STDStream<T>::nstream()
|
||||
{
|
||||
// a[i] += b[i] + scalar * c[i];
|
||||
// Need to do in two stages with C++11 STL.
|
||||
// 1: a[i] += b[i]
|
||||
// 2: a[i] += scalar * c[i];
|
||||
std::transform(exe_policy, a, a+array_size, b, a, [](T ai, T bi){ return ai + bi; });
|
||||
std::transform(exe_policy, a, a+array_size, c, a, [](T ai, T ci){ return ai + startScalar*ci; });
|
||||
}
|
||||
|
||||
template <class T>
|
||||
T STDStream<T>::dot()
|
||||
{
|
||||
|
||||
@ -31,6 +31,7 @@ class STDStream : public Stream<T>
|
||||
virtual void add() override;
|
||||
virtual void mul() override;
|
||||
virtual void triad() override;
|
||||
virtual void nstream() override;
|
||||
virtual T dot() override;
|
||||
|
||||
virtual void init_arrays(T initA, T initB, T initC) override;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user