Changeset: 215439cb1975 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=215439cb1975
Modified Files:
gdk/gdk_bitvector.c
monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
monetdb5/modules/mosaic/mosaic_calendar.c
Branch: mosaic
Log Message:
Make debugging accessible by macro
diffs (truncated from 396 to 300 lines):
diff --git a/gdk/gdk_bitvector.c b/gdk/gdk_bitvector.c
--- a/gdk/gdk_bitvector.c
+++ b/gdk/gdk_bitvector.c
@@ -27,6 +27,8 @@ typedef unsigned long BUN;
#include "gdk.h"
#include "gdk_bitvector.h"
+//#define _DEBUG_BITVECTOR_
+
#define BITS (sizeof( unsigned int) * 8)
static unsigned int masks[BITS+1];
@@ -75,12 +77,16 @@ getBitVector(BitVector vector, BUN i, in
if ( (shift + bits) <= BITS){
// fits in a single cell
value = (vector[cid] >> shift) & masks[bits];
- //printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value,
vector[cid],cid,shift);
+#ifdef _DEBUG_BITVECTOR_
+ printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value,
vector[cid],cid,shift);
+#endif
}else{
// spread over two cells
m1 = BITS - shift;
value = ((vector[cid] & (masks[m1]<<shift)) >> shift) |
((vector[cid+1] & masks[bits - m1]) << m1);
- //printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value,
vector[cid], vector[cid+1],cid,shift,m1);
+#ifdef _DEBUG_BITVECTOR_
+ printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value,
vector[cid], vector[cid+1],cid,shift,m1);
+#endif
}
return value;
}
@@ -103,15 +109,22 @@ setBitVector(BitVector vector, const BUN
if ( (shift + bits) <= BITS){
// fits in a single cell
vector[cid]= (vector[cid] & ~( masks[bits] << shift)) | ((value &
masks[bits]) << shift);
- //printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value,
vector[cid],cid,shift);
+#ifdef _DEBUG_BITVECTOR_
+ printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value,
vector[cid],cid,shift);
+#endif
} else{
// spread over two cells
m1 = BITS - shift;
vector[cid]= (vector[cid] & ~( masks[m1] << shift)) | ( (value &
masks[m1]) << shift);
vector[cid+1]= 0 | ( ((value>>m1) & masks[bits-m1]));
- //printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value,
vector[cid], vector[cid+1],cid,shift,m1);
+#ifdef _DEBUG_BITVECTOR_
+ printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value,
vector[cid], vector[cid+1],cid,shift,m1);
+#endif
}
- //printf("#get it back %d\n",getBitVector(vector,i,bits));
+#ifdef _DEBUG_BITVECTOR_
+ m1 = getBitVector(vector,i,bits);
+ printf("#get it back %s %d %d\n", (value == m1?
"":"MISMATCH"),value,m1);
+#endif
}
// clear a cell
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
b/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
--- a/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
+++ b/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
@@ -8,9 +8,8 @@ bat.append(d,"2014-08-14":date);
bat.append(d,"2014-08-14":date);
bat.append(d,"2014-08-15":date);
bat.append(d,"2015-07-11":date);
-bat.append(d,"2015-07-12":date);
-bat.append(d,"2016-12-31":date);
-d:= bat.append(d,d);
+#bat.append(d,"2015-07-12":date);
+#bat.append(d,"2016-12-31":date);
io.print(d);
mosaic.compress(d,"calendar");
diff --git a/monetdb5/modules/mosaic/mosaic_calendar.c
b/monetdb5/modules/mosaic/mosaic_calendar.c
--- a/monetdb5/modules/mosaic/mosaic_calendar.c
+++ b/monetdb5/modules/mosaic/mosaic_calendar.c
@@ -30,7 +30,8 @@
#include "mosaic.h"
#include "mosaic_calendar.h"
-#define DAYMASK 037
+#define MASKDAY 037
+#define MASKBITS 5
void
MOSadvance_calendar(Client cntxt, MOStask task)
@@ -139,12 +140,12 @@ MOSskip_calendar(Client cntxt, MOStask t
// Store the most frequent ones in the compressed heap header directly based
on estimated savings
#define TMPDICT 16*256
-#define makeCalendar(TPE, MASK)\
+#define makeCalendar(TPE)\
{ TPE *val = ((TPE*)task->src) + task->start,v,w;\
BUN limit = task->stop - task->start > MOSlimit()? MOSlimit():
task->stop - task->start;\
lng cw,cv;\
for(i = 0; i< limit; i++, val++){\
- v= *val & DAYMASK; \
+ v= *val & ~MASKDAY; \
MOSfind(j,dict.val##TPE,v,0,dictsize);\
if(j == dictsize && dictsize == 0 ){\
dict.val##TPE[j]= v;\
@@ -190,7 +191,7 @@ MOScreatecalendar(Client cntxt, MOStask
// compress by factoring out the year-month, keeping 5 bits for the day
if( task->type == TYPE_date)
- makeCalendar(int,DAYMASK)
+ makeCalendar(int)
if( task->type == TYPE_daytime){
}
if( task->type == TYPE_timestamp){
@@ -226,13 +227,14 @@ MOScreatecalendar(Client cntxt, MOStask
assert(j<256);
}
/* calculate the bit-width */
- hdr->bits = 1;
- hdr->mask =1;
+ hdr->bits = MASKBITS + 1;
+ hdr->mask =1; // only for dictionary part
for( j=2 ; j < dictsize; j *=2){
hdr->bits++;
hdr->mask = (hdr->mask <<1) | 1;
}
#ifdef _DEBUG_MOSAIC_
+ mnstr_printf(cntxt->fdout,"#Calendar size %d bits %d mask %o %o\n",
task->hdr->dictsize, task->hdr->bits, task->hdr->mask, task->hdr->mask
<<MASKBITS);
MOSdump_calendar(cntxt, task);
#endif
}
@@ -253,22 +255,22 @@ MOSestimate_calendar(Client cntxt, MOSta
if( task->range[MOSAIC_CALENDAR] > task->start){
i = task->range[MOSAIC_CALENDAR] - task->start;
if ( i > MOSlimit() ) i = MOSlimit();
- if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i
* (hdr->bits+5))/8,int))
+ if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i
* hdr->bits)/8,int))
return 0.0;
- if( task->dst + wordaligned(MosaicBlkSize + (i *
(hdr->bits+5))/8,sizeof(int)) >= task->bsrc->tmosaic->base +
task->bsrc->tmosaic->size)
+ if( task->dst + wordaligned(MosaicBlkSize + (i *
hdr->bits)/8,sizeof(int)) >= task->bsrc->tmosaic->base +
task->bsrc->tmosaic->size)
return 0.0;
- if(i) factor = ((flt) i * sizeof(int))/
wordaligned(MosaicBlkSize + sizeof(int) + (i * (hdr->bits+5))/8,int);
+ if(i) factor = ((flt) i * sizeof(int))/
wordaligned(MosaicBlkSize + sizeof(int) + (i * hdr->bits)/8,int);
return factor;
}
for(i =0; i<limit; i++, val++){
- v= *val & ~DAYMASK;
+ v= *val & ~MASKDAY;
MOSfind(j,hdr->dict.valint,v,0,hdr->dictsize);
if( j == hdr->dictsize || hdr->dict.valint[j] != v )
break;
}
- if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i *
(hdr->bits+5))/8 ,int))
+ if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i *
hdr->bits)/8 ,int))
return 0.0;
- if(i) factor = (flt) ((int)i * sizeof(int)) / wordaligned(
MosaicBlkSize + (i * (hdr->bits+5))/8,int);
+ if(i) factor = (flt) ((int)i * sizeof(int)) / wordaligned(
MosaicBlkSize + (i * hdr->bits)/8,int);
} else
if( task->type == TYPE_daytime){
} else
@@ -283,31 +285,45 @@ MOSestimate_calendar(Client cntxt, MOSta
}
// insert a series of values into the compressor block using calendar
-#define CALcompress(TPE, MASK)\
+#define CALcompress(TPE)\
{ TPE *val = ((TPE*)task->src) + task->start, v;\
BitVector base = (BitVector) MOScodevector(task);\
BUN limit = task->stop - task->start > MOSlimit()? MOSlimit():
task->stop - task->start;\
for(i =0; i<limit; i++, val++){\
- v = *val & ~MASK;\
+ v = *val & ~MASKDAY;\
MOSfind(j,task->hdr->dict.val##TPE,v,0,hdr->dictsize);\
- if(j == hdr->dictsize || task->hdr->dict.val##TPE[j] != v) \
+ if(j == (unsigned int) hdr->dictsize ||
task->hdr->dict.val##TPE[j] != v) \
break;\
else {\
hdr->checksum.sum##TPE += v;\
hdr->dictfreq[j]++;\
MOSincCnt(blk,1);\
- setBitVector(base,i,hdr->bits+5,(unsigned int)j);\
+ setBitVector(base, i, hdr->bits , (unsigned int)( ((j &
hdr->mask)<< MASKBITS) | (*val & MASKDAY)) );\
}\
}\
assert(i);\
}
+//mnstr_printf(cntxt->fdout,"#CALcompress ["BUNFMT"] val %o v [%d] %d %o
residu %o %o\n", i, *val, j, hdr->bits, v, (unsigned int)( *val & MASKDAY),
(unsigned int)( ((j & hdr->mask)<< MASKBITS) | (*val & MASKDAY)) );
+// the inverse operator, extend the src
+#define CALdecompress(TPE)\
+{ BUN lim = MOSgetCnt(blk);\
+ base = (BitVector) MOScodevector(task);\
+ for(i = 0; i < lim; i++){\
+ j= getBitVector(base,i,(int) hdr->bits ); \
+ ((TPE*)task->src)[i] = task->hdr->dict.val##TPE[ (j>> MASKBITS)
& task->hdr->mask] | (j & MASKDAY);\
+ hdr->checksum2.sum##TPE += task->hdr->dict.val##TPE[ (j >>
MASKBITS) & task->hdr->mask];\
+ }\
+ task->src += i * sizeof(TPE);\
+}
+//mnstr_printf(cntxt->fdout,"#CALdecompress ["BUNFMT"] j %o idx %d [%d] %o val
%o\n", i, j, hdr->bits, (j>> MASKBITS) & task->hdr->mask,
task->hdr->dict.val##TPE[ (j>> MASKBITS) & task->hdr->mask],
((TPE*)task->src)[i]);
+
void
MOScompress_calendar(Client cntxt, MOStask task)
{
BUN i;
- int j;
+ unsigned int j;
MosaicBlk blk = task->blk;
MosaicHdr hdr = task->hdr;
@@ -318,38 +334,25 @@ MOScompress_calendar(Client cntxt, MOSta
MOSsetCnt(blk,0);
if( task->type == TYPE_date)
- CALcompress(int, DAYMASK);
+ CALcompress(int);
if( task->type == TYPE_daytime){
}
if( task->type == TYPE_timestamp){
}
}
-// the inverse operator, extend the src
-
-#define CALdecompress(TPE,MASK)\
-{ BUN lim = MOSgetCnt(blk);\
- base = (BitVector) MOScodevector(task);\
- for(i = 0; i < lim; i++){\
- j= getBitVector(base,i,(int) hdr->bits + 5); \
- ((TPE*)task->src)[i] = task->hdr->dict.val##TPE[j>>5] | (j &
MASK);\
- hdr->checksum2.sum##TPE += task->hdr->dict.val##TPE[j];\
- }\
- task->src += i * sizeof(TPE);\
-}
-
void
MOSdecompress_calendar(Client cntxt, MOStask task)
{
MosaicBlk blk = task->blk;
MosaicHdr hdr = task->hdr;
BUN i;
- int j;
+ unsigned int j;
BitVector base;
(void) cntxt;
if( task->type == TYPE_date){
- CALdecompress(int, DAYMASK);
+ CALdecompress(int);
}
if( task->type == TYPE_daytime){
}
@@ -372,7 +375,7 @@ MOSdecompress_calendar(Client cntxt, MOS
if( *(TPE*) low == TPE##_nil ){\
for(i=0 ; first < last; first++, i++){\
MOSskipit();\
- j= getBitVector(base,i,(int) hdr->bits+ BITS); \
+ j= getBitVector(base,i,(int) hdr->bits); \
cmp = ((*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh ));\
if (cmp )\
*o++ = (oid) first;\
@@ -381,7 +384,7 @@ MOSdecompress_calendar(Client cntxt, MOS
if( *(TPE*) hgh == TPE##_nil ){\
for(i=0; first < last; first++, i++){\
MOSskipit();\
- j= getBitVector(base,i,(int) hdr->bits + BITS);
\
+ j= getBitVector(base,i,(int) hdr->bits ); \
cmp = ((*li &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) >= * (TPE*)low ) || (!*li &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) > *(TPE*)low ));\
if (cmp )\
*o++ = (oid) first;\
@@ -389,7 +392,7 @@ MOSdecompress_calendar(Client cntxt, MOS
} else{\
for(i=0 ; first < last; first++, i++){\
MOSskipit();\
- j= getBitVector(base,i,(int) hdr->bits + BITS);
\
+ j= getBitVector(base,i,(int) hdr->bits ); \
cmp = ((*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh )) &&\
((*li &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) >= * (TPE*)low ) || (!*li &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) > *(TPE*)low ));\
if (cmp )\
@@ -403,7 +406,7 @@ MOSdecompress_calendar(Client cntxt, MOS
if( *(TPE*) low == TPE##_nil ){\
for(i=0 ; first < last; first++, i++){\
MOSskipit();\
- j= getBitVector(base,i,(int) hdr->bits + BITS);
\
+ j= getBitVector(base,i,(int) hdr->bits ); \
cmp = ((*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh ));\
if ( !cmp )\
*o++ = (oid) first;\
@@ -412,7 +415,7 @@ MOSdecompress_calendar(Client cntxt, MOS
if( *(TPE*) hgh == TPE##_nil ){\
for(i=0 ; first < last; first++, i++){\
MOSskipit();\
- j= getBitVector(base,i,(int) hdr->bits+BITS); \
+ j= getBitVector(base,i,(int) hdr->bits); \
cmp = ((*li &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) >= * (TPE*)low ) || (!*li &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) > *(TPE*)low ));\
if ( !cmp )\
*o++ = (oid) first;\
@@ -420,7 +423,7 @@ MOSdecompress_calendar(Client cntxt, MOS
} else{\
for(i=0 ; first < last; first++, i++){\
MOSskipit();\
- j= getBitVector(base,i,(int) hdr->bits+BITS); \
+ j= getBitVector(base,i,(int) hdr->bits); \
cmp = ((*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi &&
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh )) &&\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list