Skylark (Sketching Library)
0.1
|
00001 #ifndef SKYLARK_TRSM_HPP 00002 #define SKYLARK_TRSM_HPP 00003 00004 // Defines a generic Gemm function that recieves a wider set of matrices 00005 00006 #if SKYLARK_HAVE_ELEMENTAL 00007 00008 namespace skylark { namespace base { 00009 00010 template<typename T> 00011 inline void Trsm(elem::LeftOrRight s, elem::UpperOrLower ul, 00012 elem::Orientation oA, elem::UnitOrNonUnit diag, T alpha, 00013 const elem::Matrix<T>& A, elem::Matrix<T>& B) { 00014 elem::Trsm(s, ul, oA, diag, alpha, A, B); 00015 } 00016 00017 template<typename T> 00018 inline void Trsm(elem::LeftOrRight s, elem::UpperOrLower ul, 00019 elem::Orientation oA, elem::UnitOrNonUnit diag, T alpha, 00020 const elem::DistMatrix<T, elem::STAR, elem::STAR>& A, 00021 elem::DistMatrix<T, elem::STAR, elem::STAR>& B) { 00022 elem::Trsm(s, ul, oA, diag, alpha, A.LockedMatrix(), B.Matrix()); 00023 } 00024 00025 template<typename T> 00026 inline void Trsm(elem::LeftOrRight s, elem::UpperOrLower ul, 00027 elem::Orientation oA, elem::UnitOrNonUnit diag, T alpha, 00028 const elem::DistMatrix<T, elem::CIRC, elem::CIRC>& A, 00029 elem::DistMatrix<T, elem::CIRC, elem::CIRC>& B) { 00030 // TODO: check passing A, B with same grid. 00031 if (B.Grid().Rank() == 0) 00032 elem::Trsm(s, ul, oA, diag, alpha, A.LockedMatrix(), B.Matrix()); 00033 } 00034 00035 template<typename T> 00036 inline void Trsm(elem::LeftOrRight s, elem::UpperOrLower ul, 00037 elem::Orientation oA, elem::UnitOrNonUnit diag, T alpha, 00038 const elem::DistMatrix<T>& A, elem::DistMatrix<T>& B) { 00039 elem::Trsm(s, ul, oA, diag, alpha, A, B); 00040 } 00041 00042 } } // namespace skylark::base 00043 00044 #endif // SKYLARK_HAVE_ELEMENTAL 00045 00046 #endif // SKYLARK_TRSM_HPP