Skylark (Sketching Library)
0.1
|
00001 #ifndef SKYLARK_SCALE_HPP 00002 #define SKYLARK_SCALE_HPP 00003 00004 namespace skylark { namespace base { 00005 00006 00007 #if SKYLARK_HAVE_ELEMENTAL 00008 00009 template<typename T> 00010 inline void Zero(elem::Matrix<T>& A) { 00011 elem::Zero(A); 00012 } 00013 00014 template<typename T, elem::Distribution U, elem::Distribution V> 00015 inline void Zero(elem::DistMatrix<T, U, V>& A) { 00016 elem::Zero(A); 00017 } 00018 00019 00020 template<typename T> 00021 inline void DiagonalScale(elem::LeftOrRight s, elem::Orientation o, 00022 const elem::Matrix<T>& d, elem::Matrix<T>& X) { 00023 elem::DiagonalScale(s, o, d, X); 00024 } 00025 00026 template<typename T, elem::Distribution U, elem::Distribution V, 00027 elem::Distribution W, elem::Distribution Z> 00028 inline void DiagonalScale(elem::LeftOrRight s, elem::Orientation o, 00029 const elem::DistMatrix<T, U, V>& d, elem::DistMatrix<T, W, Z>& X) { 00030 elem::DiagonalScale(s, o, d, X); 00031 } 00032 00033 template<typename T> 00034 inline void Axpy(T alpha, const elem::Matrix<T>& X, elem::Matrix<T>& Y) { 00035 elem::Axpy(alpha, X, Y); 00036 } 00037 00038 template<typename T, 00039 elem::Distribution U1, elem::Distribution V1, 00040 elem::Distribution U2, elem::Distribution V2> 00041 inline void Axpy(T alpha, const elem::DistMatrix<T, U1, V1>& X, 00042 elem::DistMatrix<T, U2, V2>& Y) { 00043 elem::Axpy(alpha, X, Y); 00044 } 00045 00050 template<typename T> 00051 inline void Axpy(const elem::Matrix<T>& alphas, 00052 const elem::Matrix<T>& X, elem::Matrix<T>& Y) { 00053 elem::Matrix<T> Xv, Yv; 00054 for(int i = 0; i < X.Width(); i++) { 00055 elem::View(Yv, Y, 0, i, Y.Height(), 1); 00056 elem::LockedView(Xv, X, 0, i, Y.Height(), 1); 00057 elem::Axpy(alphas.Get(i, 0), Xv, Yv); 00058 } 00059 } 00060 00061 template<typename T, 00062 elem::Distribution U1, elem::Distribution V1, 00063 elem::Distribution U2, elem::Distribution V2> 00064 inline void Axpy(const elem::DistMatrix<T, elem::STAR, elem::STAR> &alphas, 00065 const elem::DistMatrix<T, U1, V1>& X, 00066 elem::DistMatrix<T, U2, V2>& Y) { 00067 elem::DistMatrix<T, U1, V1> Xv; 00068 elem::DistMatrix<T, U2, V2> Yv; 00069 for(int i = 0; i < X.Width(); i++) { 00070 elem::View(Yv, Y, 0, i, Y.Height(), 1); 00071 elem::LockedView(Xv, X, 0, i, Y.Height(), 1); 00072 elem::Axpy(alphas.Get(i, 0), Xv, Yv); 00073 } 00074 } 00075 00076 template<typename T, elem::Distribution U, elem::Distribution V> 00077 inline void Scal(const T s, elem::DistMatrix<T, U, V>& X) { 00078 elem::Scal(s, X); 00079 } 00080 00081 #endif 00082 00083 } } // namespace skylark::base 00084 00085 #endif // SKYLARK_COPY_HPP