Changeset 11

Show
Ignore:
Timestamp:
04/05/07 10:58:38 (2 years ago)
Author:
pernet
Message:
 
Location:
include/fflas-ffpack
Files:
2 modified

Legend:

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

    r9 r11  
    88 * See COPYING for license information. 
    99 */ 
     10#include <math.h> 
    1011 
    1112#ifndef __FFLAS_H 
     
    390391                                 const typename Field::Element beta, 
    391392                                 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); 
    392432 
    393433        template <class Field> 
     
    402442                                  typename Field::Element * C, const size_t ldc,  
    403443                                  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 ); 
    404467     
    405468        // Winograd Multiplication  alpha.A(n*k) * B(k*m) + beta . C(n*m) 
     
    428491                              typename Field::Element * C, const size_t ldc, 
    429492                              const size_t kmax, const size_t w); 
    430         template<bool AreEq> 
    431         class callWinoMain; 
    432  
    433         template<bool AreEq> 
    434         class callClassicMatmul; 
    435  
    436         template<bool AreEq> 
    437         class callFsquare; 
    438  
    439         template<bool AreEq> 
    440         class callMatVectProd; 
    441                  
     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 
    442517        // Specialized routines for ftrsm 
    443518        template<class Field> 
     
    462537                                         typename Field::Element * B, const size_t ldb,  
    463538                                         const size_t nmax); 
    464         template<bool AreEq> 
    465         class callFtrsmLeftLowNoTrans; 
    466          
    467         template<bool AreEq> 
    468         class callFtrsmRightUpNoTrans; 
    469          
    470         template<bool AreEq> 
    471         class callFtrmmLeftUpNoTrans; 
    472          
    473         template<bool AreEq> 
    474         class callFtrmmLeftUpTrans; 
    475  
    476         template<bool AreEq> 
    477         class callFtrmmLeftLowNoTrans;           
    478  
    479         template<bool AreEq> 
    480         class callFtrmmLeftLowTrans;             
    481  
    482         template<bool AreEq> 
    483         class callFtrmmRightUpNoTrans;           
    484  
    485         template<bool AreEq> 
    486         class callFtrmmRightUpTrans;             
    487  
    488         template<bool AreEq> 
    489         class callFtrmmRightLowNoTrans;          
    490  
    491         template<bool AreEq> 
    492         class callFtrmmRightLowTrans;            
    493          
     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); 
    494553        template<class Field> 
    495554        static void ftrsmLeftLowTrans (const Field& F, const enum FFLAS_DIAG Diag,  
     
    506565                                         typename Field::Element * B, const size_t ldb, 
    507566                                         const size_t nmax); 
    508          
     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 
    509582        template<class Field> 
    510583        static void ftrsmRightUpTrans (const Field& F, const enum FFLAS_DIAG Diag,  
     
    535608                                        typename Field::Element * B, const size_t ldb,  
    536609                                        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); 
    537622 
    538623        template<class Field> 
     
    542627                                      typename Field::Element * B, const size_t ldb, 
    543628                                      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); 
    544641 
    545642        template<class Field> 
     
    549646                                         typename Field::Element * B, const size_t ldb,  
    550647                                         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); 
    551660 
    552661        template<class Field> 
     
    556665                                       typename Field::Element * B, const size_t ldb, 
    557666                                       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); 
    558679         
    559680        template<class Field> 
     
    563684                                         typename Field::Element * B, const size_t ldb,  
    564685                                         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); 
    565698 
    566699        template<class Field> 
     
    570703                                       typename Field::Element * B, const size_t ldb,  
    571704                                       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); 
    572717 
    573718        template<class Field> 
     
    578723                                          const size_t nmax); 
    579724        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> 
    580738        static void ftrmmRightLowTrans (const Field& F, const enum FFLAS_DIAG Diag,  
    581739                                        const size_t M, const size_t N, 
     
    583741                                        typename Field::Element * B, const size_t ldb,  
    584742                                        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); 
    585755}; // class FFLAS 
    586756 
  • include/fflas-ffpack/ffpack_ludivine.inl

    r10 r11  
    256256        size_t MN = MIN(M,N); 
    257257 
    258         if ((M < cutoff) && (N < 2*cutoff)) // the coeff 2 is experimentally determine! 
     258        if ((M < cutoff) && (N < 2*cutoff)) // the coeff 2 is experimentally determined! 
    259259                return LUdivine_small (F, Diag, M, N, A, lda, P, Q, LuTag); 
    260260        else if (MN == 1){