Changeset: fc89ee61e658 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fc89ee61e658 Modified Files: monetdb5/modules/mal/mosaic.c monetdb5/modules/mal/mosaic.h monetdb5/modules/mal/mosaic_delta.c monetdb5/modules/mal/mosaic_dictionary.c monetdb5/modules/mal/mosaic_hdr.c monetdb5/modules/mal/mosaic_linear.c monetdb5/modules/mal/mosaic_literal.c monetdb5/modules/mal/mosaic_runlength.c monetdb5/modules/mal/mosaic_variance.c monetdb5/modules/mal/mosaic_zone.c Branch: mosaic Log Message:
Cleanup block header manipulations diffs (truncated from 1459 to 300 lines): diff --git a/monetdb5/modules/mal/mosaic.c b/monetdb5/modules/mal/mosaic.c --- a/monetdb5/modules/mal/mosaic.c +++ b/monetdb5/modules/mal/mosaic.c @@ -51,6 +51,12 @@ MOSinit(MOStask task, BAT *b){ task->dst = base + MosaicBlkSize; } +void MOSblk(MosaicBlk blk) +{ + printf("Block %d tag %d cnt "BUNFMT"\n", (int)((lng)blk %10000),MOSgetTag(blk),MOSgetCnt(blk)); +} + +#ifdef _DEBUG_MOSAIC_ static void MOSdumpTask(Client cntxt,MOStask task) { @@ -63,7 +69,9 @@ MOSdumpTask(Client cntxt,MOStask task) for ( i=0; i < MOSAIC_METHODS; i++) if( task->blks[i]) mnstr_printf(cntxt->fdout, "%s\t"LLFMT "\t"LLFMT " " LLFMT"\t" , filtername[i], task->blks[i], task->elms[i], task->elms[i]/task->blks[i]); + mnstr_printf(cntxt->fdout,"\n"); } +#endif // dump a compressed BAT static void @@ -76,7 +84,7 @@ MOSdumpInternal(Client cntxt, BAT *b){ MOSinit(task,b); MOSinitializeScan(cntxt,task,0,task->hdr->top); while(task->start< task->stop){ - switch(MOStag(task->blk)){ + switch(MOSgetTag(task->blk)){ case MOSAIC_NONE: MOSdump_literal(cntxt,task); MOSadvance_literal(cntxt,task); @@ -270,12 +278,11 @@ MOScompressInternal(Client cntxt, int *r MOSinitHeader(task); // always start with an EOL block - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); cutoff = task->elm > 1000? task->elm - 1000: task->elm; while(task->elm > 0){ // default is to extend the non-compressed block - //mnstr_printf(cntxt->fdout,"#elements "BUNFMT"\n",task->elm); cand = MOSAIC_NONE; fac = 1.0; factor = 1.0; @@ -340,28 +347,28 @@ MOScompressInternal(Client cntxt, int *r case MOSAIC_DELTA: case MOSAIC_LINEAR: // close the non-compressed part - if( (MOStag(task->blk) == MOSAIC_NONE || MOStag(task->blk) == MOSAIC_ZONE) && MOScnt(task->blk) ){ + if( (MOSgetTag(task->blk) == MOSAIC_NONE || MOSgetTag(task->blk) == MOSAIC_ZONE) && MOSgetCnt(task->blk) ){ MOSupdateHeader(cntxt,task); - if( MOStag(task->blk) == MOSAIC_NONE) + if( MOSgetTag(task->blk) == MOSAIC_NONE) MOSskip_literal(cntxt,task); else MOSskip_zone(cntxt,task); // always start with an EOL block task->dst = ((char*) task->blk)+ MosaicBlkSize; - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); } break; case MOSAIC_NONE: case MOSAIC_ZONE: - if ( MOScnt(task->blk) == MOSlimit()){ + if ( MOSgetCnt(task->blk) == MOSlimit()){ MOSupdateHeader(cntxt,task); - if( MOStag(task->blk) == MOSAIC_NONE) + if( MOSgetTag(task->blk) == MOSAIC_NONE) MOSskip_literal(cntxt,task); else MOSskip_zone(cntxt,task); // always start with an EOL block task->dst = ((char*) task->blk)+ MosaicBlkSize; - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); } } // apply the compression to a chunk @@ -370,55 +377,55 @@ MOScompressInternal(Client cntxt, int *r MOScompress_dictionary(cntxt,task); MOSupdateHeader(cntxt,task); //prepare new block header - task->elm -= MOScnt(task->blk); + task->elm -= MOSgetCnt(task->blk); MOSadvance_dictionary(cntxt,task); - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); task->dst = ((char*) task->blk)+ MosaicBlkSize; break; case MOSAIC_VARIANCE: MOScompress_variance(cntxt,task); MOSupdateHeader(cntxt,task); //prepare new block header - task->elm -= MOScnt(task->blk); + task->elm -= MOSgetCnt(task->blk); MOSadvance_variance(cntxt,task); - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); task->dst = ((char*) task->blk)+ MosaicBlkSize; break; case MOSAIC_DELTA: MOScompress_delta(cntxt,task); MOSupdateHeader(cntxt,task); //prepare new block header - task->elm -= MOScnt(task->blk); + task->elm -= MOSgetCnt(task->blk); MOSadvance_delta(cntxt,task); - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); task->dst = ((char*) task->blk)+ MosaicBlkSize; break; case MOSAIC_LINEAR: MOScompress_linear(cntxt,task); MOSupdateHeader(cntxt,task); //prepare new block header - task->elm -= MOScnt(task->blk); + task->elm -= MOSgetCnt(task->blk); MOSadvance_linear(cntxt,task); - *task->blk= MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); task->dst = ((char*) task->blk)+ MosaicBlkSize; break; case MOSAIC_RLE: MOScompress_runlength(cntxt,task); MOSupdateHeader(cntxt,task); //prepare new block header - task->elm -= MOScnt(task->blk); + task->elm -= MOSgetCnt(task->blk); MOSadvance_runlength(cntxt,task); - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); task->dst = ((char*) task->blk)+ MosaicBlkSize; break; case MOSAIC_ZONE: - if( MOScnt(task->blk) == 0) + if( MOSgetCnt(task->blk) == 0) task->dst += 2 * MosaicBlkSize; - if ( MOScnt(task->blk) > MAXZONESIZE){ + if ( MOSgetCnt(task->blk) > MAXZONESIZE){ MOSupdateHeader(cntxt,task); MOSadvance_zone(cntxt,task); task->dst = ((char*) task->blk)+ MosaicBlkSize; - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); } MOScompress_zone(cntxt,task); break; @@ -427,23 +434,22 @@ MOScompressInternal(Client cntxt, int *r MOScompress_literal(cntxt,task); } } - if( (MOStag(task->blk) == MOSAIC_NONE || MOStag(task->blk) == MOSAIC_ZONE) && MOScnt(task->blk)){ + if( (MOSgetTag(task->blk) == MOSAIC_NONE || MOSgetTag(task->blk) == MOSAIC_ZONE) && MOSgetCnt(task->blk)){ MOSupdateHeader(cntxt,task); - if( MOStag(task->blk) == MOSAIC_NONE ){ + if( MOSgetTag(task->blk) == MOSAIC_NONE ){ MOSadvance_literal(cntxt,task); task->dst = ((char*) task->blk)+ MosaicBlkSize; } else{ MOSadvance_zone(cntxt,task); task->dst = ((char*) task->blk)+ 3 * MosaicBlkSize; } - *task->blk = MOSeol; + MOSsetTag(task->blk,MOSAIC_EOL); } task->xsize = (task->dst - (char*)task->hdr) + MosaicHdrSize; task->timer = GDKusec() - task->timer; -//#ifdef _DEBUG_MOSAIC_ +#ifdef _DEBUG_MOSAIC_ MOSdumpTask(cntxt,task); - mnstr_printf(cntxt->fdout,"\n"); -//#endif +#endif // if we couldnt compress well enough, ignore the result /* if( task->xsize && task->size / task->xsize < 1){ @@ -536,7 +542,7 @@ MOSdecompressInternal(Client cntxt, int task->src = Tloc(bn, BUNfirst(bn)); task->timer = GDKusec(); while(task->blk){ - switch(MOStag(task->blk)){ + switch(MOSgetTag(task->blk)){ case MOSAIC_DICT: MOSdecompress_dictionary(cntxt,task); MOSskip_dictionary(cntxt,task); @@ -737,7 +743,7 @@ MOSsubselect(Client cntxt, MalBlkPtr mb, MOSinitializeScan(cntxt,task,startblk,stopblk); while(task->start < task->stop ){ - switch(MOStag(task->blk)){ + switch(MOSgetTag(task->blk)){ case MOSAIC_RLE: MOSsubselect_runlength(cntxt,task,low,hgh,li,hi,anti); break; @@ -867,7 +873,7 @@ str MOSthetasubselect(Client cntxt, MalB MOSinitializeScan(cntxt,task,startblk,stopblk); while(task->start < task->stop ){ - switch(MOStag(task->blk)){ + switch(MOSgetTag(task->blk)){ case MOSAIC_RLE: MOSthetasubselect_runlength(cntxt,task,low,*oper); break; @@ -1001,7 +1007,7 @@ str MOSleftfetchjoin(Client cntxt, MalBl // loop thru all the chunks and fetch all results while(task->start<task->stop ) - switch(MOStag(task->blk)){ + switch(MOSgetTag(task->blk)){ case MOSAIC_RLE: MOSleftfetchjoin_runlength(cntxt, task); break; @@ -1125,7 +1131,7 @@ MOSjoin(Client cntxt, MalBlkPtr mb, MalS // loop thru all the chunks and collect the results while(task->blk ) - switch(MOStag(task->blk)){ + switch(MOSgetTag(task->blk)){ case MOSAIC_RLE: MOSjoin_runlength(cntxt, task); break; diff --git a/monetdb5/modules/mal/mosaic.h b/monetdb5/modules/mal/mosaic.h --- a/monetdb5/modules/mal/mosaic.h +++ b/monetdb5/modules/mal/mosaic.h @@ -68,19 +68,11 @@ typedef struct MOSAICHEADER{ #define MOSshift 24 typedef int *MosaicBlk; -#define MOStag(Blk) (*(Blk)>>MOSshift) -#define MOSsetTag(Tag) ((int) (Tag) <<MOSshift) -#define MOScnt(Blk) (BUN)(*(Blk) & ~(0377<<MOSshift)) -#define MOSinc(Blk,I) *(Blk)= *(Blk)+I - -#define MOSnone (((int)MOSAIC_NONE) <<MOSshift) -#define MOSrle (((int)MOSAIC_RLE) <<MOSshift) -#define MOSdict (((int)MOSAIC_DICT) <<MOSshift) -#define MOSvariance (((int)MOSAIC_VARIANCE) <<MOSshift) -#define MOSlinear (((int)MOSAIC_LINEAR) <<MOSshift) -#define MOSdelta (((int)MOSAIC_DELTA) <<MOSshift) -#define MOSzone (((int)MOSAIC_ZONE) <<MOSshift) -#define MOSeol (((int)MOSAIC_EOL) <<MOSshift) +#define MOSgetTag(Blk) (*(Blk)>>MOSshift) +#define MOSsetTag(Blk,Tag) *Blk = (Tag) <<MOSshift +#define MOSsetCnt(Blk,I) *Blk = I & ~(0377<<MOSshift) +#define MOSgetCnt(Blk) (BUN)(*(Blk) & ~(0377<<MOSshift)) +#define MOSincCnt(Blk,I) *(Blk)= *(Blk)+I #define MOSlimit() (int) ~(0377<<MOSshift) @@ -190,5 +182,6 @@ mosaic_export str MOSthetasubselect(Clie mosaic_export str MOSleftfetchjoin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mosaic_export str MOSjoin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mosaic_export str MOSdump(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +mosaic_export void MOSblk(MosaicBlk blk); #endif /* _MOSLIST_H */ diff --git a/monetdb5/modules/mal/mosaic_delta.c b/monetdb5/modules/mal/mosaic_delta.c --- a/monetdb5/modules/mal/mosaic_delta.c +++ b/monetdb5/modules/mal/mosaic_delta.c @@ -32,23 +32,23 @@ MOSadvance_delta(Client cntxt, MOStask t MosaicBlk blk = task->blk; (void) cntxt; - task->start += MOScnt(blk); + task->start += MOSgetCnt(blk); switch(task->type){ - case TYPE_sht: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(sht) + MOScnt(blk)-1,sht)); break ; - case TYPE_int: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(int) + MOScnt(blk)-1,int)); break ; - case TYPE_oid: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(oid) + MOScnt(blk)-1,oid)); break ; - case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(wrd) + MOScnt(blk)-1,wrd)); break ; - case TYPE_lng: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(lng) + MOScnt(blk)-1,lng)); break ; + case TYPE_sht: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(sht) + MOSgetCnt(blk)-1,sht)); break ; + case TYPE_int: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(int) + MOSgetCnt(blk)-1,int)); break ; + case TYPE_oid: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(oid) + MOSgetCnt(blk)-1,oid)); break ; + case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(wrd) + MOSgetCnt(blk)-1,wrd)); break ; + case TYPE_lng: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(lng) + MOSgetCnt(blk)-1,lng)); break ; #ifdef HAVE_HGE - case TYPE_hge: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(hge) + MOScnt(blk)-1,hge)); break ; + case TYPE_hge: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(hge) + MOSgetCnt(blk)-1,hge)); break ; #endif default: if( task->type == TYPE_timestamp) - task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(timestamp) + MOScnt(blk)-1,timestamp)); + task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(timestamp) + MOSgetCnt(blk)-1,timestamp)); if( task->type == TYPE_date) - task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(date) + MOScnt(blk)-1,date)); + task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(date) + MOSgetCnt(blk)-1,date)); if( task->type == TYPE_daytime) - task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(daytime) + MOScnt(blk)-1,daytime)); + task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + wordaligned(sizeof(daytime) + MOSgetCnt(blk)-1,daytime)); } } @@ -57,14 +57,14 @@ void _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list