Program Listing for File compat.hpp#

Return to documentation for file (librapid/include/librapid/array/linalg/compat.hpp)

#ifndef LIBRAPID_LINALG_COMPAT_HPP
#define LIBRAPID_LINALG_COMPAT_HPP

#if defined(LIBRAPID_HAS_OPENCL)

// In an ideal world, we would be using CLBlast's datatypes directly. However, OpenCL will not
// always be available and it makes it very difficult to integrate with the rest of LibRapid.
// Instead, we will use our own datatypes and then map a few specific function calls to CLBlast
// types.

namespace clblast {
    // template<>
    // StatusCode PUBLIC_API Gemm(const Layout layout, const Transpose a_transpose,
    //                         const Transpose b_transpose, const size_t m, const size_t n,
    //                         const size_t k, const librapid::Complex<float> alpha,
    //                         const cl_mem a_buffer, const size_t a_offset, const size_t a_ld,
    //                         const cl_mem b_buffer, const size_t b_offset, const size_t b_ld,
    //                         const librapid::Complex<float> beta, cl_mem c_buffer,
    //                         const size_t c_offset, const size_t c_ld, cl_command_queue *queue,
    //                         cl_event *event, cl_mem temp_buffer);

    // template<>
    // StatusCode PUBLIC_API Gemm(const Layout layout, const Transpose a_transpose,
    //                         const Transpose b_transpose, const size_t m, const size_t n,
    //                         const size_t k, const librapid::Complex<double> alpha,
    //                         const cl_mem a_buffer, const size_t a_offset, const size_t a_ld,
    //                         const cl_mem b_buffer, const size_t b_offset, const size_t b_ld,
    //                         const librapid::Complex<double> beta, cl_mem c_buffer,
    //                         const size_t c_offset, const size_t c_ld, cl_command_queue *queue,
    //                         cl_event *event, cl_mem temp_buffer);

    template<>
    StatusCode PUBLIC_API Gemm(const Layout layout, const Transpose a_transpose,
                               const Transpose b_transpose, const size_t m, const size_t n,
                               const size_t k, const librapid::half alpha, const cl_mem a_buffer,
                               const size_t a_offset, const size_t a_ld, const cl_mem b_buffer,
                               const size_t b_offset, const size_t b_ld, const librapid::half beta,
                               cl_mem c_buffer, const size_t c_offset, const size_t c_ld,
                               cl_command_queue *queue, cl_event *event, cl_mem temp_buffer);
} // namespace clblast

#endif // LIBRAPID_HAS_OPENCL

#endif // LIBRAPID_LINALG_COMPAT_HPP