summaryrefslogtreecommitdiff
path: root/include/internal/routine.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/internal/routine.h')
-rw-r--r--include/internal/routine.h143
1 files changed, 0 insertions, 143 deletions
diff --git a/include/internal/routine.h b/include/internal/routine.h
deleted file mode 100644
index 6df186c5..00000000
--- a/include/internal/routine.h
+++ /dev/null
@@ -1,143 +0,0 @@
-
-// =================================================================================================
-// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This
-// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max-
-// width of 100 characters per line.
-//
-// Author(s):
-// Cedric Nugteren <www.cedricnugteren.nl>
-//
-// This file implements all the basic functionality for the BLAS routines. This class serves as a
-// base class for the actual routines (e.g. Xaxpy, Xgemm). It contains common functionality such as
-// compiling the OpenCL kernel, connecting to the database, etc.
-//
-// =================================================================================================
-
-#ifndef CLBLAST_ROUTINE_H_
-#define CLBLAST_ROUTINE_H_
-
-#include <string>
-#include <vector>
-
-#include "internal/cache.h"
-#include "internal/utilities.h"
-#include "internal/database.h"
-
-namespace clblast {
-// =================================================================================================
-
-// See comment at top of file for a description of the class
-template <typename T>
-class Routine {
- public:
-
- // Helper functions which check for errors in the status code
- static constexpr bool ErrorIn(const StatusCode s) { return (s != StatusCode::kSuccess); }
-
- // Base class constructor
- explicit Routine(Queue &queue, EventPointer event, const std::string &name,
- const std::vector<std::string> &routines, const Precision precision);
-
- // Set-up phase of the kernel
- StatusCode SetUp();
-
- protected:
-
- // Runs a kernel given the global and local thread sizes
- StatusCode RunKernel(Kernel &kernel, std::vector<size_t> &global,
- const std::vector<size_t> &local, EventPointer event,
- std::vector<Event>& waitForEvents);
-
- // As above, but without an event waiting list
- StatusCode RunKernel(Kernel &kernel, std::vector<size_t> &global,
- const std::vector<size_t> &local, EventPointer event);
-
- // Tests for valid inputs of matrices A, B, and C
- StatusCode TestMatrixA(const size_t one, const size_t two, const Buffer<T> &buffer,
- const size_t offset, const size_t ld, const size_t data_size);
- StatusCode TestMatrixB(const size_t one, const size_t two, const Buffer<T> &buffer,
- const size_t offset, const size_t ld, const size_t data_size);
- StatusCode TestMatrixC(const size_t one, const size_t two, const Buffer<T> &buffer,
- const size_t offset, const size_t ld, const size_t data_size);
- StatusCode TestMatrixAP(const size_t n, const Buffer<T> &buffer,
- const size_t offset, const size_t data_size);
-
- // Tests for valid inputs of vector X and Y
- StatusCode TestVectorX(const size_t n, const Buffer<T> &buffer, const size_t offset,
- const size_t inc, const size_t data_size);
- StatusCode TestVectorY(const size_t n, const Buffer<T> &buffer, const size_t offset,
- const size_t inc, const size_t data_size);
-
- // Tests for valid inputs of other vectors
- StatusCode TestVectorDot(const size_t n, const Buffer<T> &buffer, const size_t offset,
- const size_t data_size);
- StatusCode TestVectorIndex(const size_t n, const Buffer<unsigned int> &buffer,
- const size_t offset, const size_t data_size);
-
- // Copies/transposes a matrix and padds/unpads it with zeroes. This method is also able to write
- // to symmetric and triangular matrices through optional arguments.
- StatusCode PadCopyTransposeMatrix(EventPointer event, std::vector<Event>& waitForEvents,
- const size_t src_one, const size_t src_two,
- const size_t src_ld, const size_t src_offset,
- const Buffer<T> &src,
- const size_t dest_one, const size_t dest_two,
- const size_t dest_ld, const size_t dest_offset,
- const Buffer<T> &dest,
- const Program &program, const bool do_pad,
- const bool do_transpose, const bool do_conjugate,
- const bool upper = false, const bool lower = false,
- const bool diagonal_imag_zero = false);
-
- // Stores a newly compiled binary/program into the cache
- void StoreBinaryToCache(const std::string& binary) const {
- cache::StoreBinaryToCache(binary, device_name_, precision_, routine_name_);
- }
- void StoreProgramToCache(const Program& program) const {
- cache::StoreProgramToCache(program, context_, precision_, routine_name_);
- }
-
- // Queries the cache and retrieve either a matching binary/program or a boolean whether a match
- // exists. The first assumes that the binary/program is available in the cache and will throw an
- // exception otherwise.
- std::string GetBinaryFromCache() const {
- return cache::GetBinaryFromCache(device_name_, precision_, routine_name_);
- }
- Program GetProgramFromCache() const {
- return cache::GetProgramFromCache(context_, precision_, routine_name_);
- }
- bool BinaryIsInCache() const {
- return cache::BinaryIsInCache(device_name_, precision_, routine_name_);
- }
- bool ProgramIsInCache() const {
- return cache::ProgramIsInCache(context_, precision_, routine_name_);
- }
-
- // Non-static variable for the precision. Note that the same variable (but static) might exist in
- // a derived class.
- const Precision precision_;
-
- // The routine's name and its kernel-source in string form
- const std::string routine_name_;
- std::string source_string_;
-
- // The OpenCL objects, accessible only from derived classes
- Queue queue_;
- EventPointer event_;
- const Context context_;
- const Device device_;
-
- // OpenCL device properties
- const std::string device_name_;
- const size_t max_work_item_dimensions_;
- const std::vector<size_t> max_work_item_sizes_;
- const size_t max_work_group_size_;
-
- // Connection to the database for all the device-specific parameters
- const Database db_;
-};
-
-// =================================================================================================
-} // namespace clblast
-
-// CLBLAST_ROUTINE_H_
-#endif