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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to