Changeset 14

Show
Ignore:
Timestamp:
04/09/07 12:02:27 (2 years ago)
Author:
pernet
Message:
 
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • Makefile

    r9 r14  
    11VERSION=1.1.2 
    22 
    3 FFLAS_FFPACK_DIR=/home/pernet/Logiciels/fflas-ffpack 
    4 LINBOX_DIR=/home/pernet/Logiciels/linbox 
     3FFLAS_FFPACK_DIR=/home/cpernet/Logiciels/fflas-ffpack 
     4LINBOX_DIR=/home/cpernet/Logiciels/linbox 
    55 
    66 
  • include/fflas-ffpack/fflas.h

    r13 r14  
    88 * See COPYING for license information. 
    99 */ 
     10#include <math.h> 
    1011 
    1112#ifndef __FFLAS_H 
  • include/fflas-ffpack/ffpack_ludivine.inl

    r13 r14  
    3737                        typename Field::Element * A, const size_t lda, size_t*P,  
    3838                        size_t *Q, const enum FFPACK_LUDIVINE_TAG LuTag){ 
    39         static typename Field::Element mone,one; 
     39        static typename Field::Element mone,one,zero; 
    4040        F.init(one,1.0); 
     41        F.init(zero,0.0); 
    4142        F.neg (mone, one); 
    4243        size_t MN = MIN(M,N); 
     
    4546         
    4647        for (size_t k = 0; k < MN; ++k){ 
    47                 write_field(F,cerr<<"A = "<<endl,A,M,N,lda); 
    48                 cerr<<"Q["<<r<<"] = "<<Q[r]<<endl; 
    4948                size_t p = r; 
     49                Acurr = A+k*lda+r; 
    5050                while ((p < N) && F.isZero (*(Acurr++))) 
    5151                        p++; 
    52                 if (p == N){ 
    53                         Q[r] ++; 
    54                         Acurr += lda; 
    55                 } else { 
     52                if (p < N){ 
    5653                        P[r] = p; 
    57                         if (r < Q[r]) 
    58                                 fcopy (F, N-r, (A + r*(lda+1)), 1, (A+Q[r]*lda+r),1); 
     54                        if (r < k){ 
     55                                fcopy (F, N-r, (A + r*(lda+1)), 1, (A+k*lda+r),1); 
     56                                Acurr = A+r+k*lda; 
     57                                for (size_t i=r; i<N; ++i) 
     58                                        F.assign(*(Acurr++),zero); 
     59                        } 
     60                         
    5961                        fswap (F, M, A+r, lda, A+p, lda); 
    60                         Acurr += lda +1; 
     62                        Q[r] = k; 
    6163                        r++; 
    62                         Q[r] = r; 
    63                 } 
    64                 if (Q[r]<M){ 
    65                         write_field(F,cerr<<"A avant  = "<<endl,A,M,N,lda); 
    66                         ftrsv (F, FflasUpper, FflasTrans, FflasNonUnit, r, A, lda, A+(Q[r])*lda, 1); 
    67                         write_field(F,cerr<<"A milieu = "<<endl,A,M,N,lda); 
    68                         fgemv (F, FflasTrans, N-r,r, mone, A+r, lda, A+(Q[r])*lda, 1, one, Acurr, 1); 
     64                } 
     65                if (k+1<M){ 
     66                        ftrsv (F, FflasUpper, FflasTrans, FflasNonUnit, r, A, lda, A+(k+1)*lda, 1); 
     67                        fgemv (F, FflasTrans, r, N-r, mone, A+r, lda, A+(k+1)*lda, 1, one, A+(k+1)*lda+r, 1); 
    6968                } else 
    7069                        return r; 
  • tests/Makefile

    r4 r14  
    44# root for the blas library, for ex. /home/foo/ATLAS/lib/Linux_P4SSE2 
    55#BLASROOT = /home/cpernet/Logiciels/ATLAS_Opteron64/lib/ 
    6 BLASROOT = /home/pernet/Logiciels/ATLAS/lib/Linux_PIIISSE2 
     6BLASROOT = /home/cpernet/Logiciels/GotoBLAS 
    77 
    88# ATLAS BLAS users : uncomment these lines: 
    9 CXXFLAGS+=-D__LINBOX_HAVE_CBLAS 
    10 LOADLIBES+=-L${BLASROOT} -lcblas -latlas 
     9#CXXFLAGS+=-D__LINBOX_HAVE_CBLAS 
     10#LOADLIBES+=-L${BLASROOT} -lcblas -latlas 
    1111 
    1212# GotoBlas BLAS users : uncomment this line 
    13 #LOADLIBES+=-L${BLASROOT} -lgoto 
     13LOADLIBES+=-L${BLASROOT} -lgoto 
    1414 
    1515# Other BLAS users, uncomment this line 
     
    1717 
    1818# architecture parameter for gcc (-march option) for ex. pentium4, athlon ... 
    19 ARCH = -march=pentium3  
     19#ARCH = -march=pentium3  
    2020#ARCH = -march=pentium4 
    2121#ARCH = -march=athlon 
    2222#ARCH = -march=opteron  
     23ARCH = -march=opteron -m64 -mtune=k8 
    2324 
    2425#---------------------------------------------------------- 
  • tests/test-lqup.C

    r4 r14  
    2020#include "Matio.h" 
    2121#include "timer.h" 
    22 #include "fflas-ffpack/modular-balanced.h" 
     22#include "fflas-ffpack/modular-positive.h" 
    2323#include "fflas-ffpack/ffpack.h" 
    2424 
     
    3636                exit(-1); 
    3737        } 
    38         Field F(atoi(argv[1])); 
     38        Field F((unsigned long)atoi(argv[1])); 
    3939        Field::Element * A; 
    4040         
     
    6363                tim.clear();       
    6464                tim.start();     
    65                 R = FFPACK::LUdivine (F, diag, m, n, A, n, P, Q, 
    66                                               FFPACK::FfpackLQUP, cutoff); 
     65                R = FFPACK::LUdivine_gauss (F, diag, m, n, A, n, P, Q, 
     66                                            FFPACK::FfpackLQUP); 
    6767                tim.stop(); 
    6868                timc+=tim; 
    6969        } 
    7070        //write_field (F,cerr<<"Result = "<<endl, A, m,n,n); 
    71          
     71 
     72//      cerr<<"P = ["; 
     73//      for (size_t i=0; i<n; ++i) 
     74//              cerr<<P[i]<<" "; 
     75//      cerr<<"]"<<endl; 
     76//      cerr<<"Q = ["; 
     77//      for (size_t i=0; i<m; ++i) 
     78//              cerr<<Q[i]<<" "; 
     79//      cerr<<"]"<<endl; 
    7280#if DEBUG 
    7381        Field::Element * L = new Field::Element[m*m]; 
     
    8492                        F.assign (*(U + i*n + j), *(A+ i*n+j)); 
    8593        } 
     94        for (size_t i=R;i<m; ++i) 
     95                for (size_t j=0; j<n; ++j) 
     96                        F.assign(*(U+i*n+j), zero); 
    8697        for ( int i=0; i<m; ++i ){ 
    8798                int j=0; 
    88                 for (; j< ((i<n)?i:n) ; ++j ) 
     99                for (; j< ((i<R)?i:R) ; ++j ) 
    89100                        F.assign( *(L + i*m+j), *(A+i*n+j)); 
    90101                for (; j<m; ++j ) 
     
    92103        } 
    93104 
    94         FFPACK::applyP( F, FFLAS::FflasRight, FFLAS::FflasNoTrans, m,0,m, L, m, Q); 
     105//      write_field(F,cerr<<"L = "<<endl,L,m,m,m); 
     106//      write_field(F,cerr<<"U = "<<endl,U,m,n,n); 
     107        FFPACK::applyP( F, FFLAS::FflasRight, FFLAS::FflasNoTrans, m,0,R, L, m, Q); 
    95108        if (diag == FFLAS::FflasNonUnit) 
    96109                for ( int i=0; i<m; ++i )