Add dot kernel to Kokkos

This commit is contained in:
Tom Deakin 2016-10-21 10:58:26 +01:00
parent d3b497a9ca
commit 823e12708f
2 changed files with 18 additions and 0 deletions

View File

@ -121,6 +121,23 @@ void KOKKOSStream<T>::triad()
Kokkos::fence(); Kokkos::fence();
} }
template <class T>
T KOKKOSStream<T>::dot()
{
View<double *, DEVICE> a(*d_a);
View<double *, DEVICE> 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) void listDevices(void)
{ {
std::cout << "This is not the device you are looking for."; std::cout << "This is not the device you are looking for.";

View File

@ -47,6 +47,7 @@ class KOKKOSStream : public Stream<T>
virtual void add() override; virtual void add() override;
virtual void mul() override; virtual void mul() override;
virtual void triad() override; virtual void triad() override;
virtual T dot() override;
virtual void write_arrays( virtual void write_arrays(
const std::vector<T>& a, const std::vector<T>& b, const std::vector<T>& c) override; const std::vector<T>& a, const std::vector<T>& b, const std::vector<T>& c) override;