=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/nd.c,v retrieving revision 1.79 retrieving revision 1.81 diff -u -p -r1.79 -r1.81 --- OpenXM_contrib2/asir2000/engine/nd.c 2003/10/10 07:18:12 1.79 +++ OpenXM_contrib2/asir2000/engine/nd.c 2003/10/11 02:14:19 1.81 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.78 2003/10/10 01:51:09 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.80 2003/10/10 10:07:18 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -784,10 +784,24 @@ INLINE int ndl_equal(UINT *d1,UINT *d2) { int i; - for ( i = 0; i < nd_wpd; i++ ) - if ( *d1++ != *d2++ ) - return 0; - return 1; + switch ( nd_wpd ) { + case 2: + if ( TD(d2) != TD(d1) ) return 0; + if ( d2[1] != d1[1] ) return 0; + return 1; + break; + case 3: + if ( TD(d2) != TD(d1) ) return 0; + if ( d2[1] != d1[1] ) return 0; + if ( d2[2] != d1[2] ) return 0; + return 1; + break; + default: + for ( i = 0; i < nd_wpd; i++ ) + if ( *d1++ != *d2++ ) return 0; + return 1; + break; + } } INLINE void ndl_copy(UINT *d1,UINT *d2) @@ -3823,7 +3837,7 @@ IndArray nm_ind_pair_to_vect_compress(int mod,UINT *s0 NDV p; unsigned char *ivc; unsigned short *ivs; - UINT *v,*ivi; + UINT *v,*ivi,*s0v; int i,j,len,prev,diff,cdiff; IndArray r; @@ -3832,13 +3846,13 @@ IndArray nm_ind_pair_to_vect_compress(int mod,UINT *s0 p = nd_ps[pair->index]; len = LEN(p); t = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - r = (IndArray)MALLOC(sizeof(struct oIndArray)); v = (unsigned int *)ALLOCA(len*sizeof(unsigned int)); for ( i = j = 0, s = s0, mr = BDY(p); j < len; j++, NMV_ADV(mr) ) { ndl_add(d,DL(mr),t); for ( ; !ndl_equal(t,s); s += nd_wpd, i++ ); v[j] = i; } + r = (IndArray)MALLOC(sizeof(struct oIndArray)); r->head = v[0]; diff = 0; for ( i = 1; i < len; i++ ) { @@ -4142,7 +4156,7 @@ NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col int **spmat; UINT *svect,*v; int *colstat; - struct oEGT eg0,eg1,eg_f4; + struct oEGT eg0,eg1,eg2,eg_f4,eg_f4_1,eg_f4_2; NM_ind_pair *rvect; int maxrs; int *spsugar; @@ -4184,6 +4198,11 @@ NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col } nd_free(spol); } + get_eg(&eg1); init_eg(&eg_f4_1); add_eg(&eg_f4_1,&eg0,&eg1); + if ( DP_Print ) { + fprintf(asir_out,"elim1=%fsec,",eg_f4_1.exectime+eg_f4_1.gctime); + fflush(asir_out); + } /* free index arrays */ for ( i = 0; i < nred; i++ ) GC_free(imat[i]->index.c); @@ -4201,8 +4220,10 @@ NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col GC_free(spmat[i]); } for ( ; i < sprow; i++ ) GC_free(spmat[i]); - get_eg(&eg1); init_eg(&eg_f4); add_eg(&eg_f4,&eg0,&eg1); + get_eg(&eg2); init_eg(&eg_f4_2); add_eg(&eg_f4_2,&eg1,&eg2); + init_eg(&eg_f4); add_eg(&eg_f4,&eg0,&eg2); if ( DP_Print ) { + fprintf(asir_out,"elim2=%fsec\n",eg_f4_2.exectime+eg_f4_2.gctime); fprintf(asir_out,"nsp=%d,nred=%d,spmat=(%d,%d),rank=%d ", nsp,nred,sprow,spcol,rank); fprintf(asir_out,"%fsec\n",eg_f4.exectime+eg_f4.gctime);