- Timestamp:
- 07/05/07 14:28:33 (2 years ago)
- Location:
- tests
- Files:
-
- 5 added
- 3 modified
-
test-echelon.C (added)
-
test-fgemm.C (modified) (6 diffs)
-
test-ftrtri.C (added)
-
test-invert.C (modified) (6 diffs)
-
test-lqup.C (modified) (6 diffs)
-
test-redechelon.C (added)
-
testeur_fgemm.C (added)
-
testeur_lqup.C (added)
Legend:
- Unmodified
- Added
- Removed
-
tests/test-fgemm.C
r16 r25 7 7 //------------------------------------------------------------------------- 8 8 9 #define DEBUG 1 9 #define DEBUG 0 10 #define NEWWINO 10 11 #define TIME 1 11 12 12 13 #include <iomanip> 13 14 #include <iostream> 14 #include "fflas-ffpack/modular-balanced.h" 15 using namespace std; 16 17 #include "fflas-ffpack/modular-positive.h" 15 18 #include "timer.h" 16 19 #include "Matio.h" … … 18 21 19 22 20 using namespace std; 23 21 24 22 25 typedef Modular<double> Field; 26 //typedef Modular<float> Field; 27 //typedef Modular<int> Field; 23 28 24 29 int main(int argc, char** argv){ … … 41 46 exit(-1); 42 47 } 43 Field F( atoi(argv[1]));48 Field F((long)atoi(argv[1])); 44 49 45 50 F.init( alpha, Field::Element(atoi(argv[6]))); … … 73 78 74 79 Field::Element * C; 75 C = new Field::Element[m*n];76 80 81 // write_field (F, cerr<<"A = "<<endl, A, m, k, lda); 82 // write_field (F, cerr<<"B = "<<endl, B, k, n, ldb); 77 83 Timer tim,t; t.clear();tim.clear(); 78 84 for(int i = 0;i<nbit;++i){ 79 85 if (!F.isZero(beta)){ 80 86 C = read_field(F,argv[8],&m,&n); 81 } 87 }else 88 C = new Field::Element[m*n]; 82 89 t.clear(); 83 90 t.start(); … … 86 93 t.stop(); 87 94 tim+=t; 95 if (i<nbit-1) 96 delete[] C; 88 97 } 89 98 90 99 #if DEBUG 91 100 bool wrong = false; 92 Field::Element * Cd = new Field::Element[m*n]; 101 Field::Element zero; 102 F.init(zero, 0.0); 103 Field::Element * Cd; 93 104 if (!F.isZero(beta)) 94 105 Cd = read_field(F,argv[8],&m,&n); 106 else{ 107 Cd = new Field::Element[m*n]; 108 for (size_t i=0; i<m*n; ++i) 109 F.assign (*(Cd+i), zero); 110 } 95 111 Field::Element aij, bij, beta_alpha; 96 112 F.div (beta_alpha, beta, alpha); … … 127 143 cerr<<"PASS"<<endl; 128 144 } 145 delete[] Cd; 129 146 #endif 130 147 148 delete[] C; 149 delete[] A; 150 delete[] B; 131 151 #if TIME 132 152 double mflops = (2.0*(m*k-((!F.isZero(beta))?m:0))/1000000.0)*nbit*n/tim.usertime(); -
tests/test-invert.C
r16 r25 9 9 #define DEBUG 1 10 10 #define TIME 1 11 using namespace std; 11 12 12 13 #include <iomanip> … … 19 20 20 21 21 using namespace std;22 22 23 typedef Modular< float> Field;23 typedef Modular<double> Field; 24 24 25 25 int main(int argc, char** argv){ … … 40 40 F.init(zero,0.0); 41 41 F.init(one,1.0); 42 Field::Element * A ,*Ab;42 Field::Element * A; 43 43 A = read_field(F,argv[2],&n,&n); 44 Ab = new Field::Element[n*n];45 for (int i=0; i<n*n;++i)46 F.assign(*(Ab+i),*(A+i));47 Field::Element * X = new Field::Element[n*n];48 44 49 45 Timer tim,t; t.clear();tim.clear(); … … 53 49 t.clear(); 54 50 t.start(); 55 FFPACK::Invert 2 (F, n, A, n, X, n, nullity);51 FFPACK::Invert (F, n, A, n, nullity); 56 52 t.stop(); 57 53 tim+=t; 58 if (i+1<nbit)59 for (int i=0; i<n*n;++i)60 F.assign(*(A+i),*(Ab+i));61 54 } 62 55 63 56 #if DEBUG 57 Field::Element *Ab = read_field(F,argv[2],&n,&n); 64 58 Field::Element *I = new Field::Element[n*n]; 65 59 FFLAS::fgemm (F, FFLAS::FflasNoTrans, FFLAS::FflasNoTrans, n, n, n, 66 1.0, Ab, n, X, n, 0.0, I, n);60 1.0, Ab, n, A, n, 0.0, I, n); 67 61 bool wrong = false; 68 62 … … 78 72 else{ 79 73 cerr<<"FAIL"<<endl; 80 write_field (F,cerr<<"A="<<endl,A ,n,n,n);81 write_field (F,cerr<<" X="<<endl,X,n,n,n);74 write_field (F,cerr<<"A="<<endl,Ab,n,n,n); 75 write_field (F,cerr<<"A^-1="<<endl,A,n,n,n); 82 76 write_field (F,cerr<<"I="<<endl,I,n,n,n); 83 77 } … … 85 79 cerr<<"PASS"<<endl; 86 80 } 81 delete[] I; 82 delete[] Ab; 83 87 84 #endif 85 delete[] A; 88 86 89 87 #if TIME -
tests/test-lqup.C
r16 r25 21 21 #include "timer.h" 22 22 #include "fflas-ffpack/modular-balanced.h" 23 #include "fflas-ffpack/modular-positive.h" 23 24 #include "fflas-ffpack/ffpack.h" 24 25 … … 30 31 int R=0; 31 32 32 if (argc!= 5){33 cerr<<"usage : test-lqup <p> <A> <c><i>"<<endl34 <<" to do i LQUP factorisation of A with cutoff criterium set to c"33 if (argc!=4){ 34 cerr<<"usage : test-lqup <p> <A> <i>"<<endl 35 <<" to do i LQUP factorisation of A" 35 36 <<endl; 36 37 exit(-1); … … 41 42 A = read_field(F,argv[2],&m,&n); 42 43 43 size_t *P = new size_t[n]; 44 size_t *Q = new size_t[m]; 45 44 size_t maxP, maxQ; 45 46 46 // size_t cutoff = atoi(argv[3]); 47 nbf = atoi(argv[ 4]);47 nbf = atoi(argv[3]); 48 48 49 49 Timer tim,timc; 50 50 timc.clear(); 51 51 52 enum FFLAS::FFLAS_DIAG diag = FFLAS::FflasNonUnit; 53 52 enum FFLAS::FFLAS_DIAG diag = FFLAS::FflasUnit; 53 enum FFLAS::FFLAS_TRANSPOSE trans = FFLAS::FflasTrans; 54 if (trans == FFLAS::FflasTrans){ 55 maxP = m; 56 maxQ = n; 57 } else{ 58 maxP = n; 59 maxQ = m; 60 } 61 size_t *P = new size_t[maxP]; 62 size_t *Q = new size_t[maxQ]; 63 64 //write_field (F,cerr<<"A = "<<endl, A, m,n,n); 54 65 for ( i=0;i<nbf;i++){ 55 66 if (i) { … … 63 74 tim.clear(); 64 75 tim.start(); 65 R = FFPACK::LUdivine (F, diag, m, n, A, n, P, Q,66 FFPACK::FfpackLQUP);76 R = FFPACK::LUdivine (F, diag, trans, m, n, A, n, P, Q, 77 FFPACK::FfpackLQUP); 67 78 tim.stop(); 68 79 timc+=tim; 69 80 } 70 //write_field (F,cerr<<"Result = "<<endl, A, m,n,n);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;81 write_field (F,cerr<<"Result = "<<endl, A, m,n,n); 82 83 cerr<<"P = ["; 84 for (size_t i=0; i<maxP; ++i) 85 cerr<<P[i]<<" "; 86 cerr<<"]"<<endl; 87 cerr<<"Q = ["; 88 for (size_t i=0; i<maxQ; ++i) 89 cerr<<Q[i]<<" "; 90 cerr<<"]"<<endl; 80 91 #if DEBUG 81 Field::Element * L = new Field::Element[m*m];82 Field::Element * U = new Field::Element[m*n];83 92 Field::Element * X = new Field::Element[m*n]; 84 85 Field::Element zero,one; 86 F.init(zero,0.0); 87 F.init(one,1.0); 88 for (int i=0; i<R; ++i){ 89 for (int j=0; j<i; ++j) 90 F.assign ( *(U + i*n + j), zero); 91 for (int j=i; j<n; ++j) 92 F.assign (*(U + i*n + j), *(A+ i*n+j)); 93 } 94 for (int i=R;i<m; ++i) 95 for (int j=0; j<n; ++j) 96 F.assign(*(U+i*n+j), zero); 97 for ( int i=0; i<m; ++i ){ 98 int j=0; 99 for (; j< ((i<R)?i:R) ; ++j ) 100 F.assign( *(L + i*m+j), *(A+i*n+j)); 101 for (; j<m; ++j ) 102 F.assign( *(L+i*m+j), zero); 103 } 104 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); 108 if (diag == FFLAS::FflasNonUnit) 93 Field::Element * L, *U; 94 if (trans == FFLAS::FflasNoTrans){ 95 L = new Field::Element[m*m]; 96 U = new Field::Element[m*n]; 97 98 Field::Element zero,one; 99 F.init(zero,0.0); 100 F.init(one,1.0); 101 for (int i=0; i<R; ++i){ 102 for (int j=0; j<i; ++j) 103 F.assign ( *(U + i*n + j), zero); 104 for (int j=i+1; j<n; ++j) 105 F.assign (*(U + i*n + j), *(A+ i*n+j)); 106 } 107 for (int i=R;i<m; ++i) 108 for (int j=0; j<n; ++j) 109 F.assign(*(U+i*n+j), zero); 110 for ( int i=0; i<m; ++i ){ 111 int j=0; 112 for (; j< ((i<R)?i:R) ; ++j ) 113 F.assign( *(L + i*m+j), *(A+i*n+j)); 114 for (; j<m; ++j ) 115 F.assign( *(L+i*m+j), zero); 116 } 117 118 write_field(F,cerr<<"L = "<<endl,L,m,m,m); 119 write_field(F,cerr<<"U = "<<endl,U,m,n,n); 120 FFPACK::applyP( F, FFLAS::FflasRight, FFLAS::FflasNoTrans, m,0,R, L, m, Q); 109 121 for ( int i=0; i<m; ++i ) 110 F.assign (*(L+i*(m+1)),one); 111 else{ 112 int i=0; 113 while (Q[i]==size_t(i)){*(L+i*(m+1)) = * (U+i*(n+1)); ++i;} 114 for ( int i=0; i<R; ++i ) 122 F.assign(*(L+i*(m+1)), one); 123 124 write_field(F,cerr<<"L = "<<endl,L,m,m,m); 125 write_field(F,cerr<<"U = "<<endl,U,m,n,n); 126 if (diag == FFLAS::FflasNonUnit) 127 for ( int i=0; i<R; ++i ) 128 F.assign (*(U+i*(n+1)), *(A+i*(n+1))); 129 130 else{ 131 for ( int i=0; i<R; ++i ){ 132 *(L+Q[i]*(m+1)) = *(A+Q[i]*n+i); 133 F.assign (*(U+i*(n+1)),one); 134 } 135 } 136 write_field(F,cerr<<"L = "<<endl,L,m,m,m); 137 write_field(F,cerr<<"U = "<<endl,U,m,n,n); 138 139 FFPACK::applyP (F, FFLAS::FflasRight, FFLAS::FflasNoTrans, m,0,R, U, n, P); 140 FFPACK::applyP (F, FFLAS::FflasLeft, FFLAS::FflasTrans, n,0,R, U, n, Q); 141 FFLAS::fgemm (F, FFLAS::FflasNoTrans, FFLAS::FflasNoTrans, m,n,m, 1.0, L,m, U,n, 0.0, X,n); 142 //delete[] A; 143 } else { 144 145 L = new Field::Element[m*n]; 146 U = new Field::Element[n*n]; 147 148 149 Field::Element zero,one; 150 F.init(zero,0.0); 151 F.init(one,1.0); 152 for (int i=0; i<R; ++i){ 153 for (int j=0; j<i; ++j) 154 F.assign ( *(L + i + j*n), zero); 155 for (int j=i+1; j<m; ++j) 156 F.assign (*(L + i + j*n), *(A+ i+j*n)); 157 } 158 159 for (int i=R;i<n; ++i) 160 for (int j=0; j<m; ++j) 161 F.assign(*(L+i+j*n), zero); 162 for ( int i=0; i<n; ++i ){ 163 int j=0; 164 for (; j< ((i<R)?i:R) ; ++j ) 165 F.assign( *(U + i+j*n), *(A+i+j*n)); 166 for (; j<n; ++j ) 167 F.assign( *(U+i+j*n), zero); 168 } 169 write_field(F,cerr<<"L = "<<endl,L,m,n,n); 170 write_field(F,cerr<<"U = "<<endl,U,n,n,n); 171 172 FFPACK::applyP( F, FFLAS::FflasLeft, FFLAS::FflasTrans, n,0,R, U, n, Q); 173 174 175 for (int i=0; i<n; ++i) 115 176 F.assign (*(U+i*(n+1)),one); 116 } 117 FFPACK::applyP (F, FFLAS::FflasRight, FFLAS::FflasNoTrans, m,0,R, U, n, P); 118 FFPACK::applyP (F, FFLAS::FflasLeft, FFLAS::FflasTrans, n,0,R, U, n, Q); 119 FFLAS::fgemm (F, FFLAS::FflasNoTrans, FFLAS::FflasNoTrans, m,n,m, 1.0, L,m, U,n, 0.0, X,n); 120 //delete[] A; 121 177 178 if (diag == FFLAS::FflasNonUnit) 179 for ( int i=0; i<R; ++i ) 180 F.assign (*(L+i*(n+1)), *(A+i*(n+1))); 181 else{ 182 for ( int i=0; i<R; ++i ){ 183 *(U+Q[i]*(n+1)) = *(A+Q[i]+i*n); 184 F.assign (*(L+i*(n+1)),one); 185 } 186 } 187 write_field(F,cerr<<"L = "<<endl,L,m,n,n); 188 write_field(F,cerr<<"U = "<<endl,U,n,n,n); 189 190 FFPACK::applyP (F, FFLAS::FflasLeft, FFLAS::FflasTrans, n,0,R, L, n, P); 191 FFPACK::applyP (F, FFLAS::FflasRight, FFLAS::FflasNoTrans, m,0,R, L, n, Q); 192 FFLAS::fgemm (F, FFLAS::FflasNoTrans, FFLAS::FflasNoTrans, m,n,n, 1.0, L,n, U,n, 0.0, X,n); 193 } 122 194 Field::Element * B = read_field(F,argv[2],&m,&n); 123 195 bool fail = false; … … 127 199 fail=true; 128 200 201 write_field(F,cerr<<"X = "<<endl,X,m,n,n); 202 write_field(F,cerr<<"B = "<<endl,B,m,n,n); 129 203 delete[] B; 130 204 if (fail) … … 134 208 else 135 209 cerr<<"PASS"<<endl; 136 137 // cout<<m<<" "<<n<<" M"<<endl;138 // for (size_t i=0; i<m; ++i)139 // for (size_t j=0; j<n; ++j)140 // if (!F.isZero(*(A+i*n+j)))141 // cout<<i+1<<" "<<j+1<<" "<<(*(A+i*n+j))<<endl;142 // cout<<"0 0 0"<<endl;143 144 210 #endif 145 211 delete[] A;
