diff --git a/OMP3Stream.cpp b/OMP3Stream.cpp index fe8323a..04d2dea 100644 --- a/OMP3Stream.cpp +++ b/OMP3Stream.cpp @@ -91,6 +91,21 @@ void OMP3Stream::triad() } } +template +T OMP3Stream::dot() +{ + T sum = 0.0; + + #pragma omp parallel for reduction(+:sum) + for (int i = 0; i < array_size; i++) + { + sum += a[i] * b[i]; + } + + return sum; +} + + void listDevices(void) { std::cout << "0: CPU" << std::endl; diff --git a/OMP3Stream.h b/OMP3Stream.h index 0f14300..edad55e 100644 --- a/OMP3Stream.h +++ b/OMP3Stream.h @@ -33,6 +33,7 @@ class OMP3Stream : public Stream virtual void add() override; virtual void mul() override; virtual void triad() override; + virtual T dot() override; virtual void write_arrays(const std::vector& a, const std::vector& b, const std::vector& c) override; virtual void read_arrays(std::vector& a, std::vector& b, std::vector& c) override;