// 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 "Stream.h" #include #define IMPLEMENTATION_STRING "SYCL" template class SYCLStream : public Stream { protected: // Size of arrays size_t array_size; // SYCL objects // Queue is a pointer because we allow device selection std::unique_ptr queue; // Buffers sycl::buffer d_a; sycl::buffer d_b; sycl::buffer d_c; sycl::buffer d_sum; public: SYCLStream(const size_t, const int); ~SYCLStream() = default; virtual void copy() override; 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; virtual void read_arrays(std::vector& a, std::vector& b, std::vector& c) override; }; // Populate the devices list void getDeviceList(void);