Show
Ignore:
Timestamp:
04/06/07 17:27:06 (2 years ago)
Author:
pernet
Message:
 
Files:
1 modified

Legend:

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

    r11 r12  
    88 * See COPYING for license information. 
    99 */ 
    10 #include <math.h> 
    1110 
    1211#ifndef __FFLAS_H 
    1312#define __FFLAS_H 
     13#include <math.h> 
    1414 
    1515#ifndef MAX 
     
    391391                                 const typename Field::Element beta, 
    392392                                 typename Field::Element * Y, const size_t incY); 
    393         template<class Field> 
    394         static void MatVectProd_gen (const Field& F,  
    395                                      const enum FFLAS_TRANSPOSE TransA,  
    396                                      const size_t M, const size_t N, 
    397                                      const typename Field::Element alpha,  
    398                                      const typename Field::Element * A, const size_t lda, 
    399                                      const typename Field::Element * X, const size_t incX,  
    400                                      const typename Field::Element beta, 
    401                                      typename Field::Element * Y, const size_t incY); 
    402         template<class Field> 
    403         static void MatVectProd_dbl (const Field& F,  
    404                                      const enum FFLAS_TRANSPOSE TransA,  
    405                                      const size_t M, const size_t N, 
    406                                      const double alpha,  
    407                                      const double * A, const size_t lda, 
    408                                      const double * X, const size_t incX,  
    409                                      const double beta, 
    410                                      double * Y, const size_t incY); 
    411          
    412         template<class Field> 
    413         static typename Field::Element* fsquare_gen (const Field& F, 
    414                                                      const enum FFLAS_TRANSPOSE ta, 
    415                                                      const size_t n, 
    416                                                      const typename Field::Element alpha, 
    417                                                      const typename Field::Element* A,  
    418                                                      const size_t lda, 
    419                                                      const typename Field::Element beta, 
    420                                                      typename Field::Element* C,  
    421                                                      const size_t ldc); 
    422         template<class Field> 
    423         static double* fsquare_dbl (const Field& F, 
    424                                                      const enum FFLAS_TRANSPOSE ta, 
    425                                                      const size_t n, 
    426                                                      const double alpha, 
    427                                                      const double* A,  
    428                                                      const size_t lda, 
    429                                                      const double beta, 
    430                                                      double* C,  
    431                                                      const size_t ldc); 
    432393 
    433394        template <class Field> 
     
    442403                                  typename Field::Element * C, const size_t ldc,  
    443404                                  const size_t kmax ); 
    444         template <class Field> 
    445         static void ClassicMatmul_gen (const Field& F,   
    446                                        const enum FFLAS_TRANSPOSE ta, 
    447                                        const enum FFLAS_TRANSPOSE tb, 
    448                                        const size_t m, const size_t n, const size_t k, 
    449                                        const typename Field::Element alpha, 
    450                                        const typename Field::Element * A, const size_t lda, 
    451                                        const typename Field::Element * B, const size_t ldb, 
    452                                        const typename Field::Element beta, 
    453                                        typename Field::Element * C, const size_t ldc,  
    454                                        const size_t kmax ); 
    455  
    456         template <class Field> 
    457         static void ClassicMatmul_dbl (const Field& F,   
    458                                        const enum FFLAS_TRANSPOSE ta, 
    459                                        const enum FFLAS_TRANSPOSE tb, 
    460                                        const size_t m, const size_t n, const size_t k, 
    461                                        const double alpha, 
    462                                        const double * A, const size_t lda, 
    463                                        const double * B, const size_t ldb, 
    464                                        const double beta, 
    465                                        double * C, const size_t ldc,  
    466                                        const size_t kmax ); 
    467405     
    468406        // Winograd Multiplication  alpha.A(n*k) * B(k*m) + beta . C(n*m) 
     
    491429                              typename Field::Element * C, const size_t ldc, 
    492430                              const size_t kmax, const size_t w); 
    493         template<class Field> 
    494         static void WinoMain_gen (const Field& F,  
    495                                   const enum FFLAS_TRANSPOSE ta, 
    496                                   const enum FFLAS_TRANSPOSE tb, 
    497                                   const size_t m, const size_t n, const size_t k, 
    498                                   const typename Field::Element alpha, 
    499                                   const typename Field::Element* A,const size_t lda, 
    500                                   const typename Field::Element* B,const size_t ldb, 
    501                                   const typename Field::Element beta, 
    502                                   typename Field::Element * C, const size_t ldc, 
    503                                   const size_t kmax, const size_t w); 
    504  
    505         template<class Field> 
    506         static void WinoMain_dbl (const Field& F,  
    507                                   const enum FFLAS_TRANSPOSE ta, 
    508                                   const enum FFLAS_TRANSPOSE tb, 
    509                                   const size_t m, const size_t n, const size_t k, 
    510                                   const double alpha, 
    511                                   const double* A,const size_t lda, 
    512                                   const double* B,const size_t ldb, 
    513                                   const double beta, 
    514                                   double * C, const size_t ldc, 
    515                                   const size_t kmax, const size_t w); 
    516  
     431        template<bool AreEq> 
     432        class callWinoMain; 
     433 
     434        template<bool AreEq> 
     435        class callClassicMatmul; 
     436 
     437        template<bool AreEq> 
     438        class callFsquare; 
     439 
     440        template<bool AreEq> 
     441        class callMatVectProd; 
     442                 
    517443        // Specialized routines for ftrsm 
    518444        template<class Field> 
     
    537463                                         typename Field::Element * B, const size_t ldb,  
    538464                                         const size_t nmax); 
    539         template<class Field> 
    540         static void ftrsmLeftLowNoTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    541                                              const size_t M, const size_t N, 
    542                                              const double alpha, 
    543                                              double * A, const size_t lda, 
    544                                              double * B, const size_t ldb,  
    545                                              const size_t nmax); 
    546         template<class Field> 
    547         static void ftrsmLeftLowNoTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    548                                              const size_t M, const size_t N, 
    549                                              const typename Field::Element alpha, 
    550                                              typename Field::Element * A, const size_t lda, 
    551                                              typename Field::Element * B, const size_t ldb,  
    552                                              const size_t nmax); 
     465        template<bool AreEq> 
     466        class callFtrsmLeftLowNoTrans; 
     467         
     468        template<bool AreEq> 
     469        class callFtrsmRightUpNoTrans; 
     470         
     471        template<bool AreEq> 
     472        class callFtrmmLeftUpNoTrans; 
     473         
     474        template<bool AreEq> 
     475        class callFtrmmLeftUpTrans; 
     476 
     477        template<bool AreEq> 
     478        class callFtrmmLeftLowNoTrans;           
     479 
     480        template<bool AreEq> 
     481        class callFtrmmLeftLowTrans;             
     482 
     483        template<bool AreEq> 
     484        class callFtrmmRightUpNoTrans;           
     485 
     486        template<bool AreEq> 
     487        class callFtrmmRightUpTrans;             
     488 
     489        template<bool AreEq> 
     490        class callFtrmmRightLowNoTrans;          
     491 
     492        template<bool AreEq> 
     493        class callFtrmmRightLowTrans;            
     494         
    553495        template<class Field> 
    554496        static void ftrsmLeftLowTrans (const Field& F, const enum FFLAS_DIAG Diag,  
     
    565507                                         typename Field::Element * B, const size_t ldb, 
    566508                                         const size_t nmax); 
    567         template<class Field> 
    568         static void ftrsmRightUpNoTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    569                                              const size_t M, const size_t N, 
    570                                              const double alpha, 
    571                                              double * A, const size_t lda, 
    572                                              double * B, const size_t ldb, 
    573                                              const size_t nmax); 
    574         template<class Field> 
    575         static void ftrsmRightUpNoTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    576                                              const size_t M, const size_t N, 
    577                                              const typename Field::Element alpha, 
    578                                              typename Field::Element * A, const size_t lda, 
    579                                              typename Field::Element * B, const size_t ldb, 
    580                                              const size_t nmax); 
    581  
     509         
    582510        template<class Field> 
    583511        static void ftrsmRightUpTrans (const Field& F, const enum FFLAS_DIAG Diag,  
     
    608536                                        typename Field::Element * B, const size_t ldb,  
    609537                                        const size_t nmax); 
    610         template<class Field> 
    611         static void ftrmmLeftUpNoTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    612                                             const size_t M, const size_t N, 
    613                                             const typename Field::Element * A, const size_t lda, 
    614                                             typename Field::Element * B, const size_t ldb,  
    615                                             const size_t nmax); 
    616         template<class Field> 
    617         static void ftrmmLeftUpNoTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    618                                             const size_t M, const size_t N, 
    619                                             const double * A, const size_t lda, 
    620                                             double * B, const size_t ldb,  
    621                                             const size_t nmax); 
    622538 
    623539        template<class Field> 
     
    627543                                      typename Field::Element * B, const size_t ldb, 
    628544                                      const size_t nmax); 
    629         template<class Field> 
    630         static void ftrmmLeftUpTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    631                                           const size_t M, const size_t N, 
    632                                           const typename Field::Element * A, const size_t lda, 
    633                                           typename Field::Element * B, const size_t ldb, 
    634                                           const size_t nmax); 
    635         template<class Field> 
    636         static void ftrmmLeftUpTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    637                                           const size_t M, const size_t N, 
    638                                           const double * A, const size_t lda, 
    639                                           double * B, const size_t ldb, 
    640                                           const size_t nmax); 
    641545 
    642546        template<class Field> 
     
    646550                                         typename Field::Element * B, const size_t ldb,  
    647551                                         const size_t nmax); 
    648         template<class Field> 
    649         static void ftrmmLeftLowNoTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    650                                              const size_t M, const size_t N, 
    651                                              const typename Field::Element * A, const size_t lda, 
    652                                              typename Field::Element * B, const size_t ldb,  
    653                                              const size_t nmax); 
    654         template<class Field> 
    655         static void ftrmmLeftLowNoTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    656                                              const size_t M, const size_t N, 
    657                                              const double * A, const size_t lda, 
    658                                              double * B, const size_t ldb,  
    659                                              const size_t nmax); 
    660552 
    661553        template<class Field> 
     
    665557                                       typename Field::Element * B, const size_t ldb, 
    666558                                       const size_t nmax); 
    667         template<class Field> 
    668         static void ftrmmLeftLowTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    669                                            const size_t M, const size_t N, 
    670                                            const typename Field::Element * A, const size_t lda, 
    671                                            typename Field::Element * B, const size_t ldb, 
    672                                            const size_t nmax); 
    673         template<class Field> 
    674         static void ftrmmLeftLowTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    675                                            const size_t M, const size_t N, 
    676                                            const double * A, const size_t lda, 
    677                                            double * B, const size_t ldb, 
    678                                            const size_t nmax); 
    679559         
    680560        template<class Field> 
     
    684564                                         typename Field::Element * B, const size_t ldb,  
    685565                                         const size_t nmax); 
    686         template<class Field> 
    687         static void ftrmmRightUpNoTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    688                                              const size_t M, const size_t N, 
    689                                              const typename Field::Element * A, const size_t lda, 
    690                                              typename Field::Element * B, const size_t ldb,  
    691                                              const size_t nmax); 
    692         template<class Field> 
    693         static void ftrmmRightUpNoTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    694                                              const size_t M, const size_t N, 
    695                                              const double * A, const size_t lda, 
    696                                              double * B, const size_t ldb,  
    697                                              const size_t nmax); 
    698566 
    699567        template<class Field> 
     
    703571                                       typename Field::Element * B, const size_t ldb,  
    704572                                       const size_t nmax); 
    705         template<class Field> 
    706         static void ftrmmRightUpTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    707                                            const size_t M, const size_t N, 
    708                                            const typename Field::Element * A, const size_t lda, 
    709                                            typename Field::Element * B, const size_t ldb,  
    710                                            const size_t nmax); 
    711         template<class Field> 
    712         static void ftrmmRightUpTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    713                                            const size_t M, const size_t N, 
    714                                            const double * A, const size_t lda, 
    715                                            double * B, const size_t ldb,  
    716                                            const size_t nmax); 
    717573 
    718574        template<class Field> 
     
    723579                                          const size_t nmax); 
    724580        template<class Field> 
    725         static void ftrmmRightLowNoTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    726                                               const size_t M, const size_t N, 
    727                                               const typename Field::Element * A, const size_t lda, 
    728                                               typename Field::Element * B, const size_t ldb, 
    729                                               const size_t nmax); 
    730         template<class Field> 
    731         static void ftrmmRightLowNoTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    732                                               const size_t M, const size_t N, 
    733                                               const double * A, const size_t lda, 
    734                                               double * B, const size_t ldb, 
    735                                               const size_t nmax); 
    736  
    737         template<class Field> 
    738581        static void ftrmmRightLowTrans (const Field& F, const enum FFLAS_DIAG Diag,  
    739582                                        const size_t M, const size_t N, 
     
    741584                                        typename Field::Element * B, const size_t ldb,  
    742585                                        const size_t nmax); 
    743         template<class Field> 
    744         static void ftrmmRightLowTrans_gen (const Field& F, const enum FFLAS_DIAG Diag,  
    745                                             const size_t M, const size_t N, 
    746                                             const typename Field::Element * A, const size_t lda, 
    747                                             typename Field::Element * B, const size_t ldb,  
    748                                             const size_t nmax); 
    749         template<class Field> 
    750         static void ftrmmRightLowTrans_dbl (const Field& F, const enum FFLAS_DIAG Diag,  
    751                                             const size_t M, const size_t N, 
    752                                             const double * A, const size_t lda, 
    753                                             double * B, const size_t ldb,  
    754                                             const size_t nmax); 
    755586}; // class FFLAS 
    756587