31 #ifndef REMORA_KERNELS_TRSM_HPP 32 #define REMORA_KERNELS_TRSM_HPP 34 #include <type_traits> 35 #ifdef REMORA_USE_CBLAS 40 namespace remora{
namespace bindings{
41 template<
class M1,
class M2>
42 struct has_optimized_trsm
43 :
public std::false_type{};
49 namespace remora{
namespace kernels{
55 template <
class Triangular,
class S
ide,
typename MatA,
typename MatB>
57 matrix_expression<MatA, cpu_tag>
const &A,
58 matrix_expression<MatB, cpu_tag> &B
60 REMORA_SIZE_CHECK(A().size1() == A().size2());
61 REMORA_SIZE_CHECK(!Side::is_left || A().size2() == B().size1());
62 REMORA_SIZE_CHECK(Side::is_left || A().size2() == B().size2());
64 bindings::trsm<Triangular, Side>(A,B,
typename bindings::has_optimized_trsm<MatA, MatB>::type());
69 #ifdef REMORA_USE_CLBLAST