From 1ef3dfd3f3a186b955e6faaff25d11d2b38c739e Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 27 Mar 2016 17:19:10 -0300 Subject: [PATCH] test --- iguana/iguana777.h | 2 +- iguana/iguana_ramchain.c | 14 ++++++++++- iguana/iguana_unspents.c | 53 ++++++++++++++++++++++++++-------------- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/iguana/iguana777.h b/iguana/iguana777.h index 26cd5e7bc..5a01c2852 100755 --- a/iguana/iguana777.h +++ b/iguana/iguana777.h @@ -18,7 +18,7 @@ #include "../crypto777/OS_portable.h" #include "SuperNET.h" -#define SPARSECOUNT(x) ((x) << 2) +#define SPARSECOUNT(x) ((3*(x)) >> 1) typedef int32_t (*blockhashfunc)(uint8_t *blockhashp,uint8_t *serialized,int32_t len); diff --git a/iguana/iguana_ramchain.c b/iguana/iguana_ramchain.c index e9c9dca51..f5da1c86f 100755 --- a/iguana/iguana_ramchain.c +++ b/iguana/iguana_ramchain.c @@ -691,18 +691,30 @@ void iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain *r int64_t _iguana_rdata_action(FILE *fp,bits256 lhashes[IGUANA_NUMLHASHES],void *destptr,uint64_t fpos,uint32_t expanded,uint32_t numtxids,uint32_t numunspents,uint32_t numspends,uint32_t numpkinds,uint32_t numexternaltxids,uint32_t scriptspace,uint32_t txsparsebits,uint64_t numtxsparse,uint32_t pksparsebits,uint64_t numpksparse,uint64_t srcsize,RAMCHAIN_FUNC,int32_t numblocks) { #define RAMCHAIN_LARG(ind) ((lhashes == 0) ? 0 : lhashes[ind].bytes) -#define SPARSECOUNT(x) ((x) << 2) +#define SPARSECOUNT(x) ((3*(x)) >> 1) FILE *fparg = 0; int32_t iter; uint64_t txbits,pkbits,offset = 0; struct iguana_ramchaindata *rdata = destptr; if ( expanded != 0 ) { if( txsparsebits == 0 || numtxsparse == 0 ) { txsparsebits = hcalc_bitsize(numtxids); + if ( txsparsebits < 8 ) + txsparsebits = 8; + else if ( txsparsebits < 16 ) + txsparsebits = 16; + else if ( txsparsebits < 32 ) + txsparsebits = 32; numtxsparse = SPARSECOUNT(numtxids); } if ( pksparsebits == 0 || numpksparse == 0 ) { pksparsebits = hcalc_bitsize(numpkinds); + if ( pksparsebits < 8 ) + pksparsebits = 8; + else if ( pksparsebits < 16 ) + pksparsebits = 16; + else if ( pksparsebits < 32 ) + pksparsebits = 32; numpksparse = SPARSECOUNT(numpkinds); } txbits = numtxsparse * txsparsebits; pkbits = numpksparse * pksparsebits; diff --git a/iguana/iguana_unspents.c b/iguana/iguana_unspents.c index 088c143f6..916e37890 100755 --- a/iguana/iguana_unspents.c +++ b/iguana/iguana_unspents.c @@ -190,7 +190,7 @@ uint32_t iguana_sparseadd(uint8_t *bits,uint32_t ind,int32_t width,uint32_t tabl if ( 0 && setind == 0 ) printf("tablesize.%d width.%d bitoffset.%d\n",tablesize,width,(int32_t)bitoffset); if ( (ramchain->sparsesearches % 100000) == 0 ) - printf("[%d %d] %.3f sparse searches.%ld iters.%ld hits.%ld %.2f%% max.%ld\n",width,tablesize,(double)ramchain->sparseiters/(1+ramchain->sparsesearches),ramchain->sparsesearches,ramchain->sparseiters,ramchain->sparsehits,100.*(double)ramchain->sparsehits/(1+ramchain->sparsesearches),ramchain->sparsemax+1); + printf("%7d.[%-2d %8d] %5.3f sparse searches.%-8ld iters.%-8ld hits.%-8ld %5.2f%% max.%ld\n",ramchain->height,width,tablesize,(double)ramchain->sparseiters/(1+ramchain->sparsesearches),ramchain->sparsesearches,ramchain->sparseiters,ramchain->sparsehits,100.*(double)ramchain->sparsehits/(1+ramchain->sparsesearches),ramchain->sparsemax+1); for (i=0; isparseiters++; @@ -199,33 +199,50 @@ uint32_t iguana_sparseadd(uint8_t *bits,uint32_t ind,int32_t width,uint32_t tabl ind = 0; bitoffset = 0; } - ptr = &bits[bitoffset >> 3]; - modval = (bitoffset & 7); - if ( 0 && setind == 0 ) - printf("tablesize.%d width.%d bitoffset.%d modval.%d i.%d\n",tablesize,width,(int32_t)bitoffset,modval,i); - for (x=j=0; j> 5],4); + else if ( width == 16 ) + memcpy(&x,&bits[bitoffset >> 4],2); + else if ( width != 8 ) { - if ( modval >= 8 ) - ptr++, modval = 0; - x <<= 1; - x |= (*ptr & masks[modval]) >> modval; + ptr = &bits[bitoffset >> 3]; + modval = (bitoffset & 7); + if ( 0 && setind == 0 ) + printf("tablesize.%d width.%d bitoffset.%d modval.%d i.%d\n",tablesize,width,(int32_t)bitoffset,modval,i); + for (x=j=0; j= 8 ) + ptr++, modval = 0; + x <<= 1; + x |= (*ptr & masks[modval]) >> modval; + } } + else x = bits[bitoffset >> 3]; if ( 0 && setind == 0 ) printf("x.%d\n",x); if ( x == 0 ) { if ( (x= setind) == 0 ) return(0); - ptr = &bits[(bitoffset+width-1) >> 3]; - modval = ((bitoffset+width-1) & 7); - for (j=0; j>=1,modval--) + if ( width == 32 ) + memcpy(&bits[bitoffset >> 5],&x,4); + else if ( width == 16 ) + memcpy(&bits[bitoffset >> 4],&x,2); + else if ( width != 8 ) { - if ( modval < 0 ) - ptr--, modval = 7; - if ( (x & 1) != 0 ) - *ptr |= masks[modval]; + ptr = &bits[(bitoffset+width-1) >> 3]; + modval = ((bitoffset+width-1) & 7); + for (j=0; j>=1,modval--) + { + if ( modval < 0 ) + ptr--, modval = 7; + if ( (x & 1) != 0 ) + *ptr |= masks[modval]; + } } - if ( 0 ) + else bits[bitoffset >> 3] = x; + if ( 1 ) { for (x=j=0; j