diff --git a/ACCStream.cpp b/ACCStream.cpp index 664668d..9e0e3e7 100644 --- a/ACCStream.cpp +++ b/ACCStream.cpp @@ -120,6 +120,22 @@ void ACCStream::triad() } } +template +void ACCStream::nstream() +{ + const T scalar = startScalar; + + int array_size = this->array_size; + T * restrict a = this->a; + T * restrict b = this->b; + T * restrict c = this->c; + #pragma acc parallel loop present(a[0:array_size], b[0:array_size], c[0:array_size]) wait + for (int i = 0; i < array_size; i++) + { + a[i] += b[i] + scalar * c[i]; + } +} + template T ACCStream::dot() { diff --git a/ACCStream.h b/ACCStream.h index 3d8695e..4cb9d25 100644 --- a/ACCStream.h +++ b/ACCStream.h @@ -35,6 +35,7 @@ class ACCStream : public Stream 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;