From 823e12708fe93cd459c2da1683a7b8accb9ef4ec Mon Sep 17 00:00:00 2001 From: Tom Deakin Date: Fri, 21 Oct 2016 10:58:26 +0100 Subject: [PATCH] Add dot kernel to Kokkos --- KOKKOSStream.cpp | 17 +++++++++++++++++ KOKKOSStream.hpp | 1 + 2 files changed, 18 insertions(+) diff --git a/KOKKOSStream.cpp b/KOKKOSStream.cpp index d73f7d5..58dbe94 100644 --- a/KOKKOSStream.cpp +++ b/KOKKOSStream.cpp @@ -121,6 +121,23 @@ void KOKKOSStream::triad() Kokkos::fence(); } +template +T KOKKOSStream::dot() +{ + View a(*d_a); + View b(*d_b); + + T sum = 0.0; + + parallel_reduce(array_size, KOKKOS_LAMBDA (const int index, double &tmp) + { + tmp += a[index] * b[index]; + }, sum); + + return sum; + +} + void listDevices(void) { std::cout << "This is not the device you are looking for."; diff --git a/KOKKOSStream.hpp b/KOKKOSStream.hpp index d2b9665..013deff 100644 --- a/KOKKOSStream.hpp +++ b/KOKKOSStream.hpp @@ -47,6 +47,7 @@ class KOKKOSStream : 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;