Changeset: 4b50cc9b6556 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4b50cc9b6556
Added Files:
        monetdb5/modules/mal/Tests/mosaic_literal_inplace.mal
        monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.err
        monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.out
Modified Files:
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic_prefix.c
        monetdb5/modules/mal/mosaic_runlength.c
Branch: mosaic
Log Message:

Cutoff expensive compressions
e.g. prefix tests on each element is too expensive.
Cutoff if you haven't found an opportunity quickly.


diffs (truncated from 301 to 300 lines):

diff --git a/monetdb5/modules/mal/Tests/mosaic_literal_inplace.mal 
b/monetdb5/modules/mal/Tests/mosaic_literal_inplace.mal
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mal/Tests/mosaic_literal_inplace.mal
@@ -0,0 +1,18 @@
+b:= bat.new(:oid,:int);
+bat.append(b,50);
+bat.append(b,19531015);
+bat.append(b,9);
+b:= bat.append(b,b);
+base:= algebra.copy(b);
+
+io.print(b);
+
+#inplace variant, local decompress
+y:= mosaic.compressStorage(b,"literal");
+z:= mosaic.decompress(y);
+io.print(z);
+
+#inplace variant
+y:= mosaic.compressStorage(b,"literal");
+z:= mosaic.decompressStorage(y);
+io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.err 
b/monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.err
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.err
@@ -0,0 +1,30 @@
+stderr of test 'mosaic_literal_inplace` in directory 'monetdb5/modules/mal` 
itself:
+
+
+# 13:43:55 >  
+# 13:43:55 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=32870" "--set" 
"mapi_usock=/var/tmp/mtest-5579/.s.monetdb.32870" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/export/scratch1/mk/mosaic//Linux/var/MonetDB/mTests_monetdb5_modules_mal"
 "mosaic_literal_inplace.mal"
+# 13:43:55 >  
+
+# builtin opt  gdk_dbpath = 
/export/scratch1/mk/mosaic//Linux/var/monetdb5/dbfarm/demo
+# builtin opt  gdk_debug = 0
+# builtin opt  gdk_vmtrim = no
+# builtin opt  monet_prompt = >
+# builtin opt  monet_daemon = no
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = false
+# builtin opt  mapi_autosense = false
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_open = true
+# cmdline opt  mapi_port = 32870
+# cmdline opt  mapi_usock = /var/tmp/mtest-5579/.s.monetdb.32870
+# cmdline opt  monet_prompt = 
+# cmdline opt  mal_listing = 2
+# cmdline opt  gdk_dbpath = 
/export/scratch1/mk/mosaic//Linux/var/MonetDB/mTests_monetdb5_modules_mal
+# cmdline opt  gdk_debug = 536870922
+
+# 13:43:57 >  
+# 13:43:57 >  "Done."
+# 13:43:57 >  
+
diff --git a/monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.out 
b/monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.out
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mal/Tests/mosaic_literal_inplace.stable.out
@@ -0,0 +1,71 @@
+stdout of test 'mosaic_literal_inplace` in directory 'monetdb5/modules/mal` 
itself:
+
+
+# 13:43:55 >  
+# 13:43:55 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=32870" "--set" 
"mapi_usock=/var/tmp/mtest-5579/.s.monetdb.32870" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/export/scratch1/mk/mosaic//Linux/var/MonetDB/mTests_monetdb5_modules_mal"
 "mosaic_literal_inplace.mal"
+# 13:43:55 >  
+
+# MonetDB 5 server v11.20.0
+# This is an unreleased version
+# Serving database 'mTests_monetdb5_modules_mal', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit 
integers dynamically linked
+# Found 15.590 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2014 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://vienna.ins.cwi.nl:32870/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-5579/.s.monetdb.32870
+# MonetDB/GIS module loaded
+# MonetDB/SQL module loaded
+function user.main():void;
+    b := bat.new(:oid,:int);
+    bat.append(b,50);
+    bat.append(b,19531015);
+    bat.append(b,9);
+    b := bat.append(b,b);
+    base := algebra.copy(b);
+    io.print(b);
+#inplace variant, local decompress 
+    y := mosaic.compressStorage(b,"literal");
+    z := mosaic.decompress(y);
+    io.print(z);
+#inplace variant 
+    y := mosaic.compressStorage(b,"literal");
+    z := mosaic.decompressStorage(y);
+    io.print(z);
+end main;
+#--------------------------#
+# h    t  # name
+# void int  # type
+#--------------------------#
+[ 0@0, 50  ]
+[ 1@0, 19531015  ]
+[ 2@0, 9  ]
+[ 3@0, 50  ]
+[ 4@0, 19531015  ]
+[ 5@0, 9  ]
+#--------------------------#
+# h    t  # name
+# void int  # type
+#--------------------------#
+[ 0@0, 50  ]
+[ 1@0, 19531015  ]
+[ 2@0, 9  ]
+[ 3@0, 50  ]
+[ 4@0, 19531015  ]
+[ 5@0, 9  ]
+#--------------------------#
+# h    t  # name
+# void int  # type
+#--------------------------#
+[ 0@0, 50  ]
+[ 1@0, 19531015  ]
+[ 2@0, 9  ]
+[ 3@0, 50  ]
+[ 4@0, 19531015  ]
+[ 5@0, 9  ]
+
+# 13:43:57 >  
+# 13:43:57 >  "Done."
+# 13:43:57 >  
+
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
@@ -326,6 +326,8 @@ MOScompressInternal(Client cntxt, int *r
 
                // cutoff the filters, especially dictionary tests are expensive
                if( cutoff && cutoff > task->elm){
+                       if( task->blks[MOSAIC_PREFIX] == 0)
+                               filter[MOSAIC_PREFIX] = 0;
                        if( task->blks[MOSAIC_DICT] == 0)
                                filter[MOSAIC_DICT] = 0;
                        cutoff = 0;
diff --git a/monetdb5/modules/mal/mosaic_prefix.c 
b/monetdb5/modules/mal/mosaic_prefix.c
--- a/monetdb5/modules/mal/mosaic_prefix.c
+++ b/monetdb5/modules/mal/mosaic_prefix.c
@@ -81,7 +81,7 @@ MOSadvance_prefix(Client cntxt, MOStask 
        task->start += MOSgetCnt(task->blk);
        switch(size){
        case 1:
-               { bte *dst = (sht*)  (((char*) task->blk) + MosaicBlkSize);
+               { bte *dst = (bte*)  (((char*) task->blk) + MosaicBlkSize);
                  bte mask = *dst++;
                  bte val = *dst++;
                        bits = val & (~mask);
@@ -229,7 +229,7 @@ MOScompress_prefix(Client cntxt, MOStask
        switch(size){
        case 1:
                {       bte *v = (bte*) task->src, *w= v+1, val = *v, val2 = 
*w, mask;
-                       bte *dst = (sht*)  (((char*) blk) + MosaicBlkSize);
+                       bte *dst = (bte*)  (((char*) blk) + MosaicBlkSize);
                        BUN limit = task->elm > MOSlimit()? MOSlimit(): 
task->elm;
                        unsigned int m;
 
@@ -247,19 +247,19 @@ MOScompress_prefix(Client cntxt, MOStask
                                if ( val  != (*w & mask) )
                                        break;
                                m = (unsigned int)( *w & (~mask)); // residu
-{      cell = (i * rbits)/32;
-       lshift= 32 -((i * rbits) % 32) ;
-       if ( lshift > rbits){
-               base[cell]= base[cell] | (m << (lshift-rbits));
-       }else{ 
-               rshift= 32 -  ((i+1) * rbits) % 32;
-               base[cell]= base[cell] | (m >> (rbits-lshift));
-               base[cell+1]= 0 | (m  << rshift);
-       }
-}
+                               cell = (i * rbits)/32;
+                               lshift= 32 -((i * rbits) % 32) ;
+                               if ( lshift > rbits){
+                                       base[cell]= base[cell] | (m << 
(lshift-rbits));
+                               }else{ 
+                                       rshift= 32 -  ((i+1) * rbits) % 32;
+                                       base[cell]= base[cell] | (m >> 
(rbits-lshift));
+                                       base[cell+1]= 0 | (m  << rshift);
+                               }
                        }
                        MOSincCnt(blk,i);
                        task->src += i * sizeof(int);
+                       task->dst += (i * rbits)/8 + (i %8) != 0;
                }
                break;
        case 2:
@@ -282,19 +282,19 @@ MOScompress_prefix(Client cntxt, MOStask
                                if ( val  != (*w & mask) )
                                        break;
                                m = (unsigned int)( *w & (~mask)); // residu
-{      cell = (i * rbits)/32;
-       lshift= 32 -((i * rbits) % 32) ;
-       if ( lshift > rbits){
-               base[cell]= base[cell] | (m << (lshift-rbits));
-       }else{ 
-               rshift= 32 -  ((i+1) * rbits) % 32;
-               base[cell]= base[cell] | (m >> (rbits-lshift));
-               base[cell+1]= 0 | (m  << rshift);
-       }
-}
+                               cell = (i * rbits)/32;
+                               lshift= 32 -((i * rbits) % 32) ;
+                               if ( lshift > rbits){
+                                       base[cell]= base[cell] | (m << 
(lshift-rbits));
+                               }else{ 
+                                       rshift= 32 -  ((i+1) * rbits) % 32;
+                                       base[cell]= base[cell] | (m >> 
(rbits-lshift));
+                                       base[cell+1]= 0 | (m  << rshift);
+                               }
                        }
                        MOSincCnt(blk,i);
                        task->src += i * sizeof(int);
+                       task->dst += (i * rbits)/8 + (i %8) != 0;
                }
                break;
        case 4:
@@ -312,28 +312,28 @@ MOScompress_prefix(Client cntxt, MOStask
                        *base = 0;
                        
                        val = *v & mask;        //reference value
-//mnstr_printf(cntxt->fdout,"compress %o %o val %d bits %d, %d mask 
%o\n",*v,*w,val,bits, rbits,mask);
+                       //mnstr_printf(cntxt->fdout,"compress %o %o val %d bits 
%d, %d mask %o\n",*v,*w,val,bits, rbits,mask);
                        for(w = v, i = 0; i < limit; w++, i++){
                                if ( val  != (*w & mask) )
                                        break;
                                m = *w & (~mask); // residu
-//mnstr_printf(cntxt->fdout,"compress %d residu %d %o\n",*w,m,m);
-{      cell = (i * rbits)/32;
-       lshift= 32 -((i * rbits) % 32) ;
-       if ( lshift > rbits){
-               base[cell]= base[cell] | (m << (lshift-rbits));
-               //mnstr_printf(cntxt->fdout,"[%d] shift %d rbits %d cell 
%o\n",cell, lshift, rbits, base[cell]);
-       }else{ 
-               rshift= 32 -  ((i+1) * rbits) % 32;
-               base[cell]= base[cell] | (m >> (rbits-lshift));
-               base[cell+1]= 0 | (m  << rshift);
-               //mnstr_printf(cntxt->fdout,"[%d] shift %d %d cell %o %o val %o 
%o\n", cell, lshift, rshift,
-                       //base[cell],base[cell+1], (m >> (rbits-lshift)),  (m 
<<rshift));
-       }
-}
+                               //mnstr_printf(cntxt->fdout,"compress %d residu 
%d %o\n",*w,m,m);
+                               cell = (i * rbits)/32;
+                               lshift= 32 -((i * rbits) % 32) ;
+                               if ( lshift > rbits){
+                                       base[cell]= base[cell] | (m << 
(lshift-rbits));
+                                       //mnstr_printf(cntxt->fdout,"[%d] shift 
%d rbits %d cell %o\n",cell, lshift, rbits, base[cell]);
+                               }else{ 
+                                       rshift= 32 -  ((i+1) * rbits) % 32;
+                                       base[cell]= base[cell] | (m >> 
(rbits-lshift));
+                                       base[cell+1]= 0 | (m  << rshift);
+                                       //mnstr_printf(cntxt->fdout,"[%d] shift 
%d %d cell %o %o val %o %o\n", cell, lshift, rshift,
+                                               //base[cell],base[cell+1], (m 
>> (rbits-lshift)),  (m <<rshift));
+                               }
                        }
                        MOSincCnt(blk,i);
                        task->src += i * sizeof(int);
+                       task->dst += (i * rbits)/8 + (i %8) != 0;
                }
        }
 #ifdef _DEBUG_MOSAIC_
@@ -371,7 +371,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
                        size =task->b->T->width;
        switch(size){
        case 1:
-               {       bte *dst =  (sht*)  (((char*) blk) + MosaicBlkSize);
+               {       bte *dst =  (bte*)  (((char*) blk) + MosaicBlkSize);
                        bte mask = *dst++, val  =  *dst++, v;
                        bte m,m1,m2;
                        BUN lim= MOSgetCnt(blk);
diff --git a/monetdb5/modules/mal/mosaic_runlength.c 
b/monetdb5/modules/mal/mosaic_runlength.c
--- a/monetdb5/modules/mal/mosaic_runlength.c
+++ b/monetdb5/modules/mal/mosaic_runlength.c
@@ -113,7 +113,7 @@ MOSskip_runlength(Client cntxt, MOStask 
        if ( ((TYPE*)task->src)[i] != val)\
                break;\
        if ( i > MOSlimit() ) i = MOSlimit();\
-       factor = ( (flt)i * sizeof(TYPE))/ (2 * MosaicBlkSize + sizeof(TYPE));\
+       factor = ( (flt)i * sizeof(TYPE))/ (MosaicBlkSize + sizeof(TYPE));\
 }
 
 // calculate the expected reduction using RLE in terms of elements compressed
@@ -141,7 +141,7 @@ MOSestimate_runlength(Client cntxt, MOSt
                        if ( ((int*)task->src)[i] != val)
                                break;
                        if ( i > MOSlimit() ) i = MOSlimit();
-                       factor = ( (flt)i * sizeof(int))/ (2 * MosaicBlkSize + 
sizeof(int));
+                       factor = ( (flt)i * sizeof(int))/ (MosaicBlkSize + 
sizeof(int));
                }
                break;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to