// Copyright (c) 2015-16 Tom Deakin, Simon McIntosh-Smith, // University of Bristol HPC // // For full license terms please see the LICENSE file distributed with this // source code #pragma once #include #include #include #include "Stream.h" #define IMPLEMENTATION_STRING "CUDA" #define TBSIZE 1024 template class CUDAStream : public Stream { protected: // Size of arrays unsigned int array_size; // Host array for partial sums for dot kernel T *sums; // Device side pointers to arrays T *d_a; T *d_b; T *d_c; T *d_sum; public: CUDAStream(const unsigned int, const int); ~CUDAStream(); virtual void copy() override; 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; };