[Math-atlas-commits] CVS: AtlasBase/Clint atlas.base, 1.122.2.2, 1.122.2.3
Brought to you by:
rwhaley,
tonyc040457
From: R. C. W. <rw...@us...> - 2008-02-22 00:34:13
|
Update of /cvsroot/math-atlas/AtlasBase/Clint In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28339/Clint Modified Files: Tag: atlas3-8br atlas.base Log Message: Index: atlas.base =================================================================== RCS file: /cvsroot/math-atlas/AtlasBase/Clint/atlas.base,v retrieving revision 1.122.2.2 retrieving revision 1.122.2.3 diff -C2 -d -r1.122.2.2 -r1.122.2.3 *** atlas.base 14 Feb 2008 00:10:28 -0000 1.122.2.2 --- atlas.base 22 Feb 2008 00:33:22 -0000 1.122.2.3 *************** *** 26647,26660 **** } unsigned long tloop(enum ATLAS_MATSHAPE shape, char TA, char TB, int nb, SCALAR alpha, SCALAR beta) { int smallN = 10, bigN = 750, stepN=10, MinDist=5; ! int i, n, n0, nn, M, N, K, Ncross=0; long MNK=0; ! double mfs0[64], mfs1[64]; ! int Ns[64]; double mf0, mf1, tmp; #ifdef TREAL printf("\nTEST TA TB M N K alpha beta Time Mflop SpUp\n"); --- 26647,26699 ---- } + void *GetLongerVector(int N, int chunk, int size, void *v0) + /* + * Allocates new vector of size N+chunk, copies old v0, and frees it + * RETURNS: ptr to new expanded vector + */ + { + void *v; + double *dv, *dv0; + int *iv, *iv0; + int i, n = N + chunk; + + v = malloc(size*n); + assert(v); + + if (size == sizeof(int)) + { + iv = v; iv0 = v0; + for (i=0; i < N; i++) + iv[i] = iv0[i]; + } + else + { + assert(size == sizeof(double)); + dv = v; dv0 = v0; + for (i=0; i < N; i++) + dv[i] = dv0[i]; + } + if (v0) free(v0); + return(v); + } + + #define CHUNKSIZE 64 unsigned long tloop(enum ATLAS_MATSHAPE shape, char TA, char TB, int nb, SCALAR alpha, SCALAR beta) { int smallN = 10, bigN = 750, stepN=10, MinDist=5; ! int i, j, n, n0, nn, M, N, K, Ncross=0; long MNK=0; ! double *mfs0, *mfs1; ! int *Ns, len=0; ! @skip double mfs0[64], mfs1[64]; ! @skip int Ns[64]; double mf0, mf1, tmp; + mfs0 = malloc(CHUNKSIZE*sizeof(double)); + mfs1 = malloc(CHUNKSIZE*sizeof(double)); + Ns = malloc(CHUNKSIZE*sizeof(int)); + assert(mfs0 && mfs1 && Ns); + len = CHUNKSIZE; #ifdef TREAL printf("\nTEST TA TB M N K alpha beta Time Mflop SpUp\n"); *************** *** 26687,26695 **** i++; if (mf0 < mf1) Ncross = n; ! else n += bigN; } } while (!Ncross); ! if (!Ncross) return(PredictNcross(shape, nb, i, Ns, mfs0, mfs1)); /* * Refine Xover point using recursive halving --- 26726,26751 ---- i++; if (mf0 < mf1) Ncross = n; ! else ! { ! if (i == len) ! { ! Ns = GetLongerVector(len, CHUNKSIZE, sizeof(int), Ns); ! mfs0 = GetLongerVector(len, CHUNKSIZE, sizeof(double), mfs0); ! mfs1 = GetLongerVector(len, CHUNKSIZE, sizeof(double), mfs1); ! len += CHUNKSIZE; ! } ! n += bigN; ! } } } while (!Ncross); ! if (!Ncross) ! { ! MNK = PredictNcross(shape, nb, i, Ns, mfs0, mfs1); ! free(Ns); ! free(mfs0); ! free(mfs1); ! return(MNK); ! } /* * Refine Xover point using recursive halving *************** *** 26707,26710 **** --- 26763,26769 ---- } GetDims(shape, n, nb, &M, &N, &K); + free(Ns); + free(mfs0); + free(mfs1); return(shape == AtlasMN_REST ? K : M*N*K); } |