diff --git a/src/OCLStream.cpp b/src/OCLStream.cpp new file mode 100644 index 0000000..eac19c0 --- /dev/null +++ b/src/OCLStream.cpp @@ -0,0 +1,77 @@ + +#include "OCLStream.h" + +template +OCLStream::OCLStream(const unsigned int ARRAY_SIZE) +{ + array_size = ARRAY_SIZE; + + // Setup default OpenCL GPU + context = cl::Context::getDefault(); + //queue = cl::CommandQueue::getDefault(); + + // Create program + + std::string kernels{R"CLC( + + const double scalar = 3.0; + + kernel void copy( + global const double * restrict a, + global double * restrict c) + { + const size_t i = get_global_id(0); + c[i] = a[i]; + } + )CLC"}; + +std::cout << kernels << std::endl; + + //cl::Program program(kernels); + //program.build(); + +exit(-1); + + +} + +template +void OCLStream::copy() +{ + return; +} + +template +void OCLStream::mul() +{ + return; +} + +template +void OCLStream::add() +{ + return; +} + +template +void OCLStream::triad() +{ + return; +} + +template +void OCLStream::write_arrays(const std::vector& a, const std::vector& b, const std::vector& c) +{ + return; +} + +template +void OCLStream::read_arrays(std::vector& a, std::vector& b, std::vector& c) +{ + return; +} + + +template class OCLStream; +template class OCLStream; + diff --git a/src/OCLStream.h b/src/OCLStream.h new file mode 100644 index 0000000..a5cac61 --- /dev/null +++ b/src/OCLStream.h @@ -0,0 +1,43 @@ + +#include +#include + +#define CL_HPP_ENABLE_EXCEPTIONS +#define CL_HPP_TARGET_OPENCL_VERSION 120 +#define CL_HPP_MINIMUM_OPENCL_VERSION 120 + +#include "cl2.hpp" + +#include "Stream.h" + +template +class OCLStream : public Stream +{ + protected: + // Size of arrays + unsigned int array_size; + + // Device side pointers to arrays + cl::Buffer d_a; + cl::Buffer d_b; + cl::Buffer d_c; + + // OpenCL objects + cl::Context context; + cl::CommandQueue queue; + + public: + + OCLStream(const unsigned int); + ~OCLStream(); + + virtual void copy() override; + virtual void add() override; + virtual void mul() override; + virtual void triad() 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; + +}; + diff --git a/src/main.cpp b/src/main.cpp index d09c3c9..39cfe86 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,7 +10,8 @@ #include "common.h" #include "Stream.h" -#include "CUDAStream.h" + +#include "OCLStream.h" const unsigned int ARRAY_SIZE = 52428800; @@ -45,7 +46,10 @@ void run() Stream *stream; // Use the CUDA implementation - stream = new CUDAStream(ARRAY_SIZE); + //stream = new CUDAStream(ARRAY_SIZE); + + // Use the OpenCL implementation + stream = new OCLStream(ARRAY_SIZE); stream->write_arrays(a, b, c);