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