Changeset 22

Show
Ignore:
Timestamp:
06/07/07 14:40:47 (2 years ago)
Author:
pernet
Message:

Fix a design pb in the BaseCompute? routine

Location:
include/fflas-ffpack
Files:
2 modified

Legend:

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

    r21 r22  
    239239                if (!(m && n && k)) return C; 
    240240                 
    241                 FFLAS_BASE base = BaseCompute (F, w); 
     241                FFLAS_BASE base = BaseCompute<typename Field::Element> ()(F, w); 
    242242 
    243243                WinoMain (F, ta, tb, m, n, k, alpha, A, lda, B, ldb, beta, 
     
    451451         
    452452 
    453         template <class Field> 
    454         static FFLAS_BASE BaseCompute (const Field& F, const size_t w); 
    455          
    456453        static size_t WinoSteps (const size_t m); 
    457454         
     
    478475        template <class Element> 
    479476        class setMatMulParam; 
     477 
     478        template <class Element> 
     479        class BaseCompute; 
    480480 
    481481        template <class Field> 
  • include/fflas-ffpack/fflas_bounds.inl

    r21 r22  
    242242                w = ks; 
    243243                 
    244                 base = BaseCompute (F, w); 
     244                base = BaseCompute<typename Field::Element> ()(F, w); 
    245245                kmax = DotProdBound (F, w, beta, base); 
    246246        } 
     
    300300 
    301301 
    302 template <class Field> 
    303 inline FFLAS::FFLAS_BASE FFLAS::BaseCompute (const Field& F, const size_t w){ 
    304  
    305         FFLAS_INT_TYPE pi; 
    306         F.characteristic(pi); 
    307         FFLAS_BASE base; 
    308         switch (w) { 
    309         case 0: base = (pi < FLOAT_DOUBLE_THRESHOLD_0)? FflasFloat : FflasDouble; 
    310                 break; 
    311         case 1:  base = (pi < FLOAT_DOUBLE_THRESHOLD_1)? FflasFloat : FflasDouble; 
    312                 break; 
    313         case 2:  base = (pi < FLOAT_DOUBLE_THRESHOLD_2)? FflasFloat : FflasDouble; 
    314                 break; 
    315         default: base = FflasDouble; 
    316                 break; 
    317         } 
    318         //cerr<<"base = "<<base<<endl; 
    319         return base; 
    320 //      case 0: return (pi < FLOAT_DOUBLE_THRESHOLD_0)? FflasFloat : FflasDouble; 
    321 //      case 1: return (pi < FLOAT_DOUBLE_THRESHOLD_1)? FflasFloat : FflasDouble; 
    322 //      case 2: return (pi < FLOAT_DOUBLE_THRESHOLD_2)? FflasFloat : FflasDouble; 
    323 //      default: return FflasDouble; 
    324          
    325 } 
    326  
     302template <class Element> 
     303class FFLAS::BaseCompute { 
     304public: 
     305        template <class Field> 
     306        FFLAS::FFLAS_BASE operator() (const Field& F, const size_t w){ 
     307                 
     308                FFLAS_INT_TYPE pi; 
     309                F.characteristic(pi); 
     310                FFLAS_BASE base; 
     311                switch (w) { 
     312                case 0: base = (pi < FLOAT_DOUBLE_THRESHOLD_0)? FflasFloat : FflasDouble; 
     313                        break; 
     314                case 1:  base = (pi < FLOAT_DOUBLE_THRESHOLD_1)? FflasFloat : FflasDouble; 
     315                        break; 
     316                case 2:  base = (pi < FLOAT_DOUBLE_THRESHOLD_2)? FflasFloat : FflasDouble; 
     317                        break; 
     318                default: base = FflasDouble; 
     319                        break; 
     320                } 
     321                //cerr<<"base = "<<base<<endl; 
     322                return base; 
     323                //      case 0: return (pi < FLOAT_DOUBLE_THRESHOLD_0)? FflasFloat : FflasDouble; 
     324                //      case 1: return (pi < FLOAT_DOUBLE_THRESHOLD_1)? FflasFloat : FflasDouble; 
     325                //      case 2: return (pi < FLOAT_DOUBLE_THRESHOLD_2)? FflasFloat : FflasDouble; 
     326                //      default: return FflasDouble; 
     327        } 
     328}; 
     329 
     330template<> 
     331class FFLAS::BaseCompute<double> { 
     332public: 
     333        template <class Field> 
     334        FFLAS::FFLAS_BASE operator() (const Field& F, const size_t w){ 
     335                return FflasDouble; 
     336        } 
     337}; 
     338 
     339template<> 
     340class FFLAS::BaseCompute<float> { 
     341public: 
     342        template <class Field> 
     343        FFLAS::FFLAS_BASE operator() (const Field& F, const size_t w){ 
     344                return FflasFloat; 
     345        } 
     346};