Changeset: abd92a970269 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=abd92a970269
Modified Files:
gdk/gdk_bitvector.c
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
monetdb5/modules/mosaic/mosaic.c
monetdb5/modules/mosaic/mosaic.h
monetdb5/modules/mosaic/mosaic.mal
monetdb5/modules/mosaic/mosaic_prefix.c
sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out
sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out
sql/backends/monet5/sql_upgrades.c
sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/12-explain.stable.out
sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128
sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
sql/benchmarks/tpch/Tests/02-explain.stable.out
sql/benchmarks/tpch/Tests/03-explain.stable.out
sql/benchmarks/tpch/Tests/03-explain.stable.out.int128
sql/benchmarks/tpch/Tests/04-explain.stable.out
sql/benchmarks/tpch/Tests/05-explain.stable.out.int128
sql/benchmarks/tpch/Tests/06-explain.stable.out.int128
sql/benchmarks/tpch/Tests/07-explain.stable.out.int128
sql/benchmarks/tpch/Tests/08-explain.stable.out.int128
sql/benchmarks/tpch/Tests/09-explain.stable.out.int128
sql/benchmarks/tpch/Tests/10-explain.stable.out.int128
sql/benchmarks/tpch/Tests/11-explain.stable.out.int128
sql/benchmarks/tpch/Tests/12-explain.stable.out.int128
sql/benchmarks/tpch/Tests/13-explain.stable.out
sql/benchmarks/tpch/Tests/14-explain.stable.out.int128
sql/benchmarks/tpch/Tests/15-explain.stable.out.int128
sql/benchmarks/tpch/Tests/16-explain.stable.out
sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
sql/benchmarks/tpch/Tests/18-explain.stable.out.int128
sql/benchmarks/tpch/Tests/19-explain.stable.out.int128
sql/benchmarks/tpch/Tests/20-explain.stable.out.int128
sql/benchmarks/tpch/Tests/21-explain.stable.out
sql/benchmarks/tpch/Tests/22-explain.stable.out.int128
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128
sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128.single
sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out
sql/test/BugTracker-2016/Tests/storagemodel.stable.out
sql/test/Tests/setoptimizer.stable.out
sql/test/Tests/setoptimizer.stable.out.Windows
sql/test/mergetables/Tests/mergequery.stable.out
sql/test/mosaic/Tests/compression.stable.out
sql/test/mosaic/Tests/compressionRLE.stable.out
sql/test/mosaic/Tests/compressionRLE2.stable.out
sql/test/mosaic/Tests/mix.sql
sql/test/mosaic/Tests/session_exit.stable.out
sql/test/mosaic/Tests/x
sql/test/mosaic/Tests/xqueries.stable.out
sql/test/mosaic/Tests/xqueries_delta.stable.out
sql/test/mosaic/Tests/xqueries_rle.stable.out
Branch: mosaic
Log Message:
Merge with default
And fixing prefix encoding
diffs (truncated from 4823 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
@@ -80,7 +80,7 @@ getBitVector(BitVector vector, BUN i, in
// spread over two cells
m1 = BITS - shift;
value = ((vector[cid] & (masks[m1]<<shift)) >> shift) |
((vector[cid+1] & masks[bits - m1]) << 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);
+ //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);
}
return value;
}
@@ -109,7 +109,7 @@ setBitVector(BitVector vector, const BUN
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 cid "BUNFMT" "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value,
vector[cid], vector[cid+1],cid,shift,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);
}
//printf("#get it back %d\n",getBitVector(vector,i,bits));
}
diff --git
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
@@ -55,8 +55,8 @@ Ready.
% .L # table_name
% def # name
% clob # type
-% 579 # length
-[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.jit();optimizer.garbageCollector();"
]
+% 598 # length
+[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.mosaic();optimizer.profiler();optimizer.candidates();optimizer.jit();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
@@ -116,8 +116,8 @@ end user.s8_1;
% .L # table_name
% def # name
% clob # type
-% 602 # length
-[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.jit();optimizer.sql_append();optimizer.garbageCollector();"
]
+% 621 # length
+[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.mosaic();optimizer.profiler();optimizer.candidates();optimizer.jit();optimizer.sql_append();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
diff --git a/monetdb5/modules/mosaic/mosaic.c b/monetdb5/modules/mosaic/mosaic.c
--- a/monetdb5/modules/mosaic/mosaic.c
+++ b/monetdb5/modules/mosaic/mosaic.c
@@ -538,16 +538,24 @@ MOScompress(Client cntxt, MalBlkPtr mb,
str msg = MAL_SUCCEED;
int i;
MOStask task;
+ BAT *b;
+ bat *bid =getArgReference_bat(stk,pci,1);
+ bat *ret =getArgReference_bat(stk,pci,0);
#ifdef _DEBUG_MOSAIC_
int flg = 1;
#else
int flg = 0;
#endif
+ if ((b = BATdescriptor(*bid)) == NULL)
+ throw(MAL, "mosaic.decompress", INTERNAL_BAT_ACCESS);
+
(void) mb;
task= (MOStask) GDKzalloc(sizeof(*task));
- if( task == NULL)
+ if( task == NULL){
+ BBPunfix(b->batCacheid);
throw(MAL, "mosaic.compress", MAL_MALLOC_FAIL);
+ }
if( pci->argc == 3)
msg = *getArgReference_str(stk,pci,2);
@@ -559,6 +567,7 @@ MOScompress(Client cntxt, MalBlkPtr mb,
task->filter[i]= 1;
msg= MOScompressInternal(cntxt, getArgReference_bat(stk,pci,1), task,
flg);
+ BBPkeepref(*ret = b->batCacheid);
GDKfree(task);
return msg;
}
@@ -696,10 +705,19 @@ MOSdecompressInternal(Client cntxt, bat
return MAL_SUCCEED;
}
+// decompression does not change the BAT id
str
MOSdecompress(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
+ bat *bid = getArgReference_bat(stk,pci,1);
+ bat *ret = getArgReference_bat(stk,pci,0);
+ BAT *b;
+
(void) mb;
+
+ if ((b = BATdescriptor(*bid)) == NULL)
+ throw(MAL, "mosaic.decompress", INTERNAL_BAT_ACCESS);
+ BBPkeepref(*ret = b->batCacheid);
return MOSdecompressInternal(cntxt, getArgReference_bat(stk,pci,1));
}
@@ -1467,7 +1485,7 @@ MOSanalyseReport(Client cntxt, BAT *b, B
pat[i].clk1 = GDKms()- pat[i].clk1;
#ifdef _DEBUG_MOSAIC_
- mnstr_printf(cntxt->fdout,"#run experiment %d ratio %6.4f
"LLFMT" ms %s\n",i, task->ratio, clk, technique);
+ mnstr_printf(cntxt->fdout,"#run experiment %d ratio %6.4f
"LLFMT" ms %s\n",i, task->ratio, pat[i].clk1, pat[i].technique);
#endif
if( task->hdr == NULL){
// aborted compression experiment
diff --git a/monetdb5/modules/mosaic/mosaic.h b/monetdb5/modules/mosaic/mosaic.h
--- a/monetdb5/modules/mosaic/mosaic.h
+++ b/monetdb5/modules/mosaic/mosaic.h
@@ -32,6 +32,7 @@
#include "algebra.h"
//#define _DEBUG_MOSAIC_
+//#define _DEBUG_PREFIX_
/* do not invest in compressing BATs smaller than this */
#define MOSAIC_THRESHOLD 1
diff --git a/monetdb5/modules/mosaic/mosaic.mal
b/monetdb5/modules/mosaic/mosaic.mal
--- a/monetdb5/modules/mosaic/mosaic.mal
+++ b/monetdb5/modules/mosaic/mosaic.mal
@@ -1,18 +1,18 @@
module mosaic;
-pattern compress(b:bat[:any_1], prop:str)
+pattern compress(b:bat[:any_1], prop:str):bat[:any_1]
address MOScompress
comment "Apply dynamic compression over chunks";
-pattern compress(b:bat[:any_1])
+pattern compress(b:bat[:any_1]) :bat[:any_1]
address MOScompress
comment "Apply dynamic compression producing a temporary";
-pattern decompress(b:bat[:any_1])
+pattern decompress(b:bat[:any_1]) :bat[:any_1]
address MOSdecompress
comment "Apply dynamic decompression over chunks producing a temporary
version";
-pattern decompressStorage(b:bat[:any_1])
+pattern decompressStorage(b:bat[:any_1]) :bat[:any_1]
address MOSdecompressStorage
comment "Apply dynamic decompression, changing the storage layout permanently";
diff --git a/monetdb5/modules/mosaic/mosaic_prefix.c
b/monetdb5/modules/mosaic/mosaic_prefix.c
--- a/monetdb5/modules/mosaic/mosaic_prefix.c
+++ b/monetdb5/modules/mosaic/mosaic_prefix.c
@@ -39,7 +39,7 @@ MOSdump_prefix(Client cntxt, MOStask tas
MosaicBlk blk= task->blk;
void *val = (void*)(((char*) blk) + MosaicBlkSize);
- mnstr_printf(cntxt->fdout,"#rle "BUNFMT" ", MOSgetCnt(blk));
+ mnstr_printf(cntxt->fdout,"#prefix "BUNFMT" ", MOSgetCnt(blk));
switch(task->type){
case TYPE_bte:
mnstr_printf(cntxt->fdout,"bte %hhd", *(bte*) val); break;
@@ -141,7 +141,8 @@ MOSadvance_prefix(Client cntxt, MOStask
unsigned char mask = *dst++;
unsigned char val = *dst++;
bits = (int)(val & (~mask));
- bytes = getBitVectorSize(MOSgetCnt(task->blk),bits) *
sizeof(int) + 2 * size;
+ bytes = wordaligned(2 * sizeof(unsigned char),int);
+ bytes +=
wordaligned(getBitVectorSize(MOSgetCnt(task->blk),bits) * sizeof(int), int);
task->blk = (MosaicBlk) (((char*) dst) +
wordaligned(bytes, int));
}
break;
@@ -150,7 +151,8 @@ MOSadvance_prefix(Client cntxt, MOStask
unsigned short mask = *dst++;
unsigned short val = *dst++;
bits = (int)(val & (~mask));
- bytes = getBitVectorSize(MOSgetCnt(task->blk),bits) *
sizeof(int) + 2 * size;
+ bytes = wordaligned(2 * sizeof(unsigned short),int);
+ bytes +=
wordaligned(getBitVectorSize(MOSgetCnt(task->blk),bits) * sizeof(int), int);
task->blk = (MosaicBlk) (((char*) dst) +
wordaligned(bytes, int));
}
break;
@@ -159,8 +161,9 @@ MOSadvance_prefix(Client cntxt, MOStask
unsigned int mask = *dst++;
unsigned int val = *dst++;
bits = (int)(val & (~mask));
- bytes = getBitVectorSize(MOSgetCnt(task->blk),bits) *
sizeof(int) + 2 * size;
- task->blk = (MosaicBlk) (((char*) dst) +
wordaligned(bytes, int));
+ bytes = wordaligned(2 * sizeof(unsigned int),int);
+ bytes +=
wordaligned(getBitVectorSize(MOSgetCnt(task->blk),bits) * sizeof(int), int);
+ task->blk = (MosaicBlk) (((char*) dst) + bytes);
}
break;
case 8:
@@ -168,12 +171,13 @@ MOSadvance_prefix(Client cntxt, MOStask
ulng mask = *dst++;
ulng val = *dst++;
bits = (int)(val & (~mask));
- bytes = getBitVectorSize(MOSgetCnt(task->blk),bits) *
sizeof(int) + 2 * size;
+ bytes = wordaligned(2 * sizeof(ulng),int);
+ bytes +=
wordaligned(getBitVectorSize(MOSgetCnt(task->blk),bits) * sizeof(int), int);
task->blk = (MosaicBlk) (((char*) dst) +
wordaligned(bytes, int));
}
}
#ifdef _DEBUG_MOSAIC_
- mnstr_printf(cntxt->fdout,"advance mask width %d bytes %d %d
\n",bits,(int)bytes,(int)wordaligned(bytes,int));
+ mnstr_printf(cntxt->fdout,"#advance mask width %d bytes %d %d
\n",bits,(int)bytes,(int)wordaligned(bytes,int));
#endif
}
@@ -188,12 +192,12 @@ MOSskip_prefix(Client cntxt, MOStask tas
// Find common prefix
#define Prefix(Prefix,Mask,X,Y,N) \
{ int k, m = 1; \
- for(k=0; k<N; k++, X>>=1, Y>>=1){\
+ for(k=0; k<N; k+=1, X>>=1, Y>>=1){\
if( X == Y) break;\
m= (m<<1)|1; \
}\
Prefix = N-k;\
- Mask = ~(m >>1);\
+ Mask = ~(m >> 1);\
}
@@ -229,8 +233,10 @@ MOSestimate_prefix(Client cntxt, MOStask
if( task->range[MOSAIC_PREFIX] > task->start +1 /* need
at least two*/){
bits = (task->range[MOSAIC_PREFIX] -
task->start) * (8-prefixbits);
- store = bits/8 + ((bits % 8) >0);
- store = wordaligned( MosaicBlkSize + 2 *
sizeof(bte) + store,bte);
+ store = wordaligned(2 * sizeof(unsigned
char),int);
+ store += wordaligned(bits/8 + ((bits % 8)
>0),int);
+ store = wordaligned( MosaicBlkSize + store,int);
+
if( store >= (flt)i * sizeof(bte))
return 0.0;
return task->factor[MOSAIC_PREFIX] = ( (flt)i *
sizeof(bte))/ store;
@@ -243,8 +249,9 @@ MOSestimate_prefix(Client cntxt, MOStask
break;
}
bits = i * (8-prefixbits);
- store = bits/8 + ((bits % 8) >0);
- store = wordaligned( MosaicBlkSize + 2 * sizeof(bte) +
store,bte);
+ store = wordaligned(2 * sizeof(unsigned char),int);
+ store += wordaligned(bits/8 + ((bits % 8) >0),int);
+ store = wordaligned( MosaicBlkSize + store,int);
if( store >= (flt)i * sizeof(bte))
return 0.0;
if( task->dst + store >= task->bsrc->tmosaic->base +
task->bsrc->tmosaic->size)
@@ -268,8 +275,9 @@ MOSestimate_prefix(Client cntxt, MOStask
if( task->range[MOSAIC_PREFIX] > task->start + 1){
bits = (task->range[MOSAIC_PREFIX] -
task->start) * (16-prefixbits);
- store = bits/8 + ((bits % 8) >0);
- store = wordaligned( MosaicBlkSize + 2 *
sizeof(sht) + store,sht);
+ store = wordaligned(2 * sizeof(unsigned
short),int);
+ store += wordaligned(bits/8 + ((bits % 8)
>0),int);
+ store = wordaligned( MosaicBlkSize + store,int);
if( store >= (flt)i * sizeof(sht))
return 0.0;
return task->factor[MOSAIC_PREFIX] = ( (flt)i *
sizeof(sht))/ store;
@@ -282,8 +290,9 @@ MOSestimate_prefix(Client cntxt, MOStask
break;
}
bits = i * (16-prefixbits);
- store = bits/8 + ((bits % 8) >0);
- store = wordaligned( MosaicBlkSize + 2 * sizeof(sht) +
store,lng);
+ store = wordaligned(2 * sizeof(unsigned short),int);
+ store += wordaligned(bits/8 + ((bits % 8) >0),int);
+ store = wordaligned( MosaicBlkSize + store,int);
if( store >= (flt)i * sizeof(sht))
return 0.0;
if( task->dst + store >= task->bsrc->tmosaic->base +
task->bsrc->tmosaic->size)
@@ -307,8 +316,9 @@ MOSestimate_prefix(Client cntxt, MOStask
if( task->range[MOSAIC_PREFIX] > task->start + 1){
bits = (task->range[MOSAIC_PREFIX] -
task->start) * (32-prefixbits);
- store = bits/8 + ((bits % 8) >0);
- store = wordaligned( MosaicBlkSize + 2 *
sizeof(int) + store,lng);
+ store = wordaligned(2 * sizeof(unsigned
int),int);
+ store += wordaligned(bits/8 + ((bits % 8)
>0),int);
+ store = wordaligned( MosaicBlkSize + store,int);
if( store > (flt)i * sizeof(int))
return 0.0;
return task->factor[MOSAIC_PREFIX] = ( (flt)i *
sizeof(int))/ store;
@@ -321,8 +331,10 @@ MOSestimate_prefix(Client cntxt, MOStask
break;
}
bits = i * (32-prefixbits);
- store = bits/8 + ((bits % 8) >0);
- store = wordaligned( MosaicBlkSize + 2 * sizeof(int) +
store,lng);
+ // calculate the bitvector size
+ store = wordaligned(2 * sizeof(unsigned int),int);
+ store += wordaligned(bits/8 + ((bits % 8) >0),int);
+ store = wordaligned( MosaicBlkSize + store,int);
if( store >= (flt)i * sizeof(int))
return 0.0;
if( task->dst + store >= task->bsrc->tmosaic->base +
task->bsrc->tmosaic->size)
@@ -346,8 +358,9 @@ MOSestimate_prefix(Client cntxt, MOStask
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list