Skylark (Sketching Library)  0.1
/var/lib/jenkins/jobs/Skylark/workspace/base/Trsm.hpp
Go to the documentation of this file.
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