Show
Ignore:
Timestamp:
04/28/07 20:58:32 (2 years ago)
Author:
pernet
Message:

Introduction of the field Modular<float> and the corresponding specializations using the float BLAS.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • include/fflas-ffpack/fflas.h

    r14 r18  
    3838 
    3939#define DOUBLE_MANTISSA 53 
     40#define FLOAT_MANTISSA 24 
    4041         
    4142class FFLAS { 
     
    4748        enum FFLAS_SIDE      { FflasLeft=141, FflasRight = 142 }; 
    4849         
     50        typedef UnparametricField<float> FloatDomain; 
     51 
    4952        typedef UnparametricField<double> DoubleDomain; 
     53 
     54 
     55         
    5056         
    5157//--------------------------------------------------------------------- 
     
    224230         */ 
    225231        template<class Field> 
    226         static typename Field::Element* fgemm (const Field& F, 
    227                                                const enum FFLAS_TRANSPOSE ta, 
    228                                                const enum FFLAS_TRANSPOSE tb, 
    229                                                const size_t m, 
    230                                                const size_t n, 
    231                                                const size_t k, 
    232                                                const typename Field::Element alpha, 
    233                                                const typename Field::Element* A,  
    234                                                const size_t lda, 
    235                                                const typename Field::Element* B, 
    236                                                const size_t ldb,  
    237                                                const typename Field::Element beta, 
    238                                                typename Field::Element* C,  
    239                                                const size_t ldc){ 
     232        static typename Field::Element* 
     233        fgemm (const Field& F, 
     234               const enum FFLAS_TRANSPOSE ta, 
     235               const enum FFLAS_TRANSPOSE tb, 
     236               const size_t m, 
     237               const size_t n, 
     238               const size_t k, 
     239               const typename Field::Element alpha, 
     240               const typename Field::Element* A,  
     241               const size_t lda, 
     242               const typename Field::Element* B, 
     243               const size_t ldb,  
     244               const typename Field::Element beta, 
     245               typename Field::Element* C,  
     246               const size_t ldc){ 
    240247                size_t ws =0; 
    241248                if ( (ta==FflasNoTrans)  && (tb==FflasNoTrans)) { 
     
    305312                        } 
    306313                } 
     314        //--------------------------------------------------------------------- 
     315        // Finite Field matrix => float matrix 
     316        //--------------------------------------------------------------------- 
     317        template<class Field> 
     318        static void MatF2MatFl (const Field& F, 
     319                                FloatDomain::Element* S, const size_t lds, 
     320                                const typename Field::Element* E, 
     321                                const size_t lde,const size_t m, const size_t n){ 
     322                 
     323                const typename Field::Element* Ei = E; 
     324                FloatDomain::Element *Si=S; 
     325                size_t j;  
     326                for (; Ei < E+lde*m; Ei+=lde, Si += lds) 
     327                        for ( j=0; j<n; ++j){ 
     328                                F.convert(*(Si+j),*(Ei+j)); 
     329                        } 
     330                } 
    307331         
    308332        //--------------------------------------------------------------------- 
     
    324348                                F.convert(*(Si+j),*(Ei+j)); 
    325349        } 
     350 
     351        //--------------------------------------------------------------------- 
     352        // Finite Field matrix => float matrix 
     353        // Special design for upper-triangular matrices 
     354        //--------------------------------------------------------------------- 
     355        template<class Field> 
     356        static void MatF2MatFl_Triangular (const Field& F, 
     357                                           typename FloatDomain::Element* S, const size_t lds, 
     358                                           const typename Field::Element* const E, 
     359                                           const size_t lde, 
     360                                           const size_t m, const size_t n){ 
     361                 
     362                const typename Field::Element* Ei = E; 
     363                typename FloatDomain::Element* Si = S; 
     364                size_t i=0, j; 
     365                for ( ; i<m;++i, Ei+=lde, Si+=lds) 
     366                        for ( j=i; j<n;++j) 
     367                                F.convert(*(Si+j),*(Ei+j)); 
     368        } 
    326369         
    327370        //--------------------------------------------------------------------- 
     
    336379                typename Field::Element* Si = S; 
    337380                const DoubleDomain::Element* Ei =E; 
     381                size_t j; 
     382                for ( ; Si < S+m*lds; Si += lds, Ei+= lde){ 
     383                        for ( j=0; j<n;++j) 
     384                                F.init( *(Si+j), *(Ei+j) ); 
     385                } 
     386        } 
     387 
     388        //--------------------------------------------------------------------- 
     389        // float matrix => Finite Field matrix 
     390        //--------------------------------------------------------------------- 
     391        template<class Field> 
     392        static void MatFl2MatF (const Field& F, 
     393                                typename Field::Element* S, const size_t lds, 
     394                                const typename FloatDomain::Element* E, const size_t lde, 
     395                                const size_t m, const size_t n){ 
     396                 
     397                typename Field::Element* Si = S; 
     398                const FloatDomain::Element* Ei =E; 
    338399                size_t j; 
    339400                for ( ; Si < S+m*lds; Si += lds, Ei+= lde){ 
     
    358419                                    const typename Field::Element& beta); 
    359420 
     421        template <class Field> 
     422        static size_t DotProdBoundCompute (const Field& F, const size_t w, 
     423                                           const typename Field::Element& beta); 
     424         
     425        template <class Element> 
     426        class callDotProdBoundCompute; 
     427 
    360428        /** @brief Bound for the delayed modulus triangular system solving 
    361429         * 
     
    369437        template <class Field> 
    370438        static size_t TRSMBound (const Field& F); 
    371          
     439 
     440        template <class Element> 
     441        class callTRSMBound; 
    372442 
    373443        template <class Field> 
     
    430500                              typename Field::Element * C, const size_t ldc, 
    431501                              const size_t kmax, const size_t w); 
    432         template<bool AreEq> 
     502 
     503 
     504        template<class Element> 
    433505        class callWinoMain; 
    434506 
    435         template<bool AreEq> 
     507        template<class Element> 
    436508        class callClassicMatmul; 
    437509 
    438         template<bool AreEq> 
     510        template<class Element> 
    439511        class callFsquare; 
    440512 
    441         template<bool AreEq> 
     513        template<class Element> 
    442514        class callMatVectProd; 
    443515                 
     
    464536                                         typename Field::Element * B, const size_t ldb,  
    465537                                         const size_t nmax); 
    466         template<bool AreEq> 
     538        template<class Element> 
    467539        class callFtrsmLeftLowNoTrans; 
    468540         
    469         template<bool AreEq> 
     541        template<class Element> 
    470542        class callFtrsmRightUpNoTrans; 
    471543         
    472         template<bool AreEq> 
     544        template<class Element> 
    473545        class callFtrmmLeftUpNoTrans; 
    474546         
    475         template<bool AreEq> 
     547        template<class Element> 
    476548        class callFtrmmLeftUpTrans; 
    477549 
    478         template<bool AreEq> 
     550        template<class Element> 
    479551        class callFtrmmLeftLowNoTrans;           
    480552 
    481         template<bool AreEq> 
     553        template<class Element> 
    482554        class callFtrmmLeftLowTrans;             
    483555 
    484         template<bool AreEq> 
     556        template<class Element> 
    485557        class callFtrmmRightUpNoTrans;           
    486558 
    487         template<bool AreEq> 
     559        template<class Element> 
    488560        class callFtrmmRightUpTrans;             
    489561 
    490         template<bool AreEq> 
     562        template<class Element> 
    491563        class callFtrmmRightLowNoTrans;          
    492564 
    493         template<bool AreEq> 
     565        template<class Element> 
    494566        class callFtrmmRightLowTrans;            
    495567