version 1.78, 2003/10/10 01:51:09 |
version 1.80, 2003/10/10 10:07:18 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.77 2003/10/08 09:09:04 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.79 2003/10/10 07:18:12 noro Exp $ */ |
|
|
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 2832 int nd_get_exporigin(struct order_spec *ord) |
|
Line 2832 int nd_get_exporigin(struct order_spec *ord) |
|
} |
} |
|
|
void nd_setup_parameters(int nvar,int max) { |
void nd_setup_parameters(int nvar,int max) { |
int i,j,n,elen,ord_o,ord_l,l,s; |
int i,j,n,elen,ord_o,ord_l,l,s,wpd; |
struct order_pair *op; |
struct order_pair *op; |
int bpe; |
|
|
|
if ( !max ) bpe = nd_bpe; |
|
else if ( max < 2 ) bpe = 1; |
|
else if ( max < 4 ) bpe = 2; |
|
else if ( max < 8 ) bpe = 3; |
|
else if ( max < 16 ) bpe = 4; |
|
else if ( max < 32 ) bpe = 5; |
|
else if ( max < 64 ) bpe = 6; |
|
else if ( max < 256 ) bpe = 8; |
|
else if ( max < 1024 ) bpe = 10; |
|
else if ( max < 65536 ) bpe = 16; |
|
else bpe = 32; |
|
if ( bpe != nd_bpe || nvar != nd_nvar ) |
|
nd_free_private_storage(); |
|
nd_bpe = bpe; |
|
nd_nvar = nvar; |
nd_nvar = nvar; |
|
if ( max ) { |
|
if ( max < 2 ) nd_bpe = 1; |
|
else if ( max < 4 ) nd_bpe = 2; |
|
else if ( max < 8 ) nd_bpe = 3; |
|
else if ( max < 16 ) nd_bpe = 4; |
|
else if ( max < 32 ) nd_bpe = 5; |
|
else if ( max < 64 ) nd_bpe = 6; |
|
else if ( max < 256 ) nd_bpe = 8; |
|
else if ( max < 1024 ) nd_bpe = 10; |
|
else if ( max < 65536 ) nd_bpe = 16; |
|
else nd_bpe = 32; |
|
} |
nd_epw = (sizeof(UINT)*8)/nd_bpe; |
nd_epw = (sizeof(UINT)*8)/nd_bpe; |
elen = nd_nvar/nd_epw+(nd_nvar%nd_epw?1:0); |
elen = nd_nvar/nd_epw+(nd_nvar%nd_epw?1:0); |
|
|
nd_exporigin = nd_get_exporigin(nd_ord); |
nd_exporigin = nd_get_exporigin(nd_ord); |
nd_wpd = nd_exporigin+elen; |
wpd = nd_exporigin+elen; |
|
if ( wpd != nd_wpd ) { |
|
nd_free_private_storage(); |
|
nd_wpd = wpd; |
|
} |
if ( nd_bpe < 32 ) { |
if ( nd_bpe < 32 ) { |
nd_mask0 = (1<<nd_bpe)-1; |
nd_mask0 = (1<<nd_bpe)-1; |
} else { |
} else { |
Line 4143 NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col |
|
Line 4142 NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col |
|
int **spmat; |
int **spmat; |
UINT *svect,*v; |
UINT *svect,*v; |
int *colstat; |
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; |
NM_ind_pair *rvect; |
int maxrs; |
int maxrs; |
int *spsugar; |
int *spsugar; |
Line 4185 NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col |
|
Line 4184 NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col |
|
} |
} |
nd_free(spol); |
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 */ |
/* free index arrays */ |
for ( i = 0; i < nred; i++ ) GC_free(imat[i]->index.c); |
for ( i = 0; i < nred; i++ ) GC_free(imat[i]->index.c); |
|
|
Line 4202 NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col |
|
Line 4206 NODE nd_f4_red(int m,ND_pairs sp0,UINT *s0vect,int col |
|
GC_free(spmat[i]); |
GC_free(spmat[i]); |
} |
} |
for ( ; i < sprow; i++ ) 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 ) { |
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 ", |
fprintf(asir_out,"nsp=%d,nred=%d,spmat=(%d,%d),rank=%d ", |
nsp,nred,sprow,spcol,rank); |
nsp,nred,sprow,spcol,rank); |
fprintf(asir_out,"%fsec\n",eg_f4.exectime+eg_f4.gctime); |
fprintf(asir_out,"%fsec\n",eg_f4.exectime+eg_f4.gctime); |