Changeset: 87781c103e54 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=87781c103e54
Modified Files:
        monetdb5/modules/mosaic/mosaic.c
        monetdb5/modules/mosaic/mosaic.h
        monetdb5/modules/mosaic/mosaic_capped.c
        monetdb5/modules/mosaic/mosaic_delta.c
        monetdb5/modules/mosaic/mosaic_frame.c
        monetdb5/modules/mosaic/mosaic_linear.c
        monetdb5/modules/mosaic/mosaic_prefix.c
        monetdb5/modules/mosaic/mosaic_raw.c
        monetdb5/modules/mosaic/mosaic_runlength.c
        monetdb5/modules/mosaic/mosaic_var.c
Branch: mosaic
Log Message:

Make sure dict techniques estimate after and estimate no more then other 
techniques.


diffs (194 lines):

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
@@ -238,6 +238,7 @@ MOSprepareEstimate(MOStask task) {
 #define MOSestimate_AND_MOSoptimizerCost_DEF(TPE) \
 static str MOSestimate_inner_##TPE(MOStask task, MosaicEstimation* current, 
const MosaicEstimation* previous) {\
 \
+       BUN max_compression_length = 0;\
        MosaicEstimation estimations[MOSAICINDEX];\
        const int size = sizeof(estimations) / sizeof(MosaicEstimation);\
        for (int i = 0; i < size; i++) {\
@@ -250,6 +251,7 @@ static str MOSestimate_inner_##TPE(MOSta
                estimations[i].nr_capped_encoded_blocks = 
previous->nr_capped_encoded_blocks;\
                estimations[i].must_be_merged_with_previous = false;\
                estimations[i].is_applicable = false;\
+               estimations[i].max_compression_length = 
&max_compression_length;\
        }\
 \
        /* select candidate amongst those*/\
@@ -259,12 +261,6 @@ static str MOSestimate_inner_##TPE(MOSta
        if (task->filter[MOSAIC_RLE]){\
                DO_OPERATION_IF_ALLOWED(estimate, runlength, TPE);\
        }\
-       if (task->filter[MOSAIC_CAPPED]){\
-               DO_OPERATION_IF_ALLOWED(estimate, capped, TPE);\
-       }\
-       if (task->filter[MOSAIC_VAR]){\
-               DO_OPERATION_IF_ALLOWED(estimate, var, TPE);\
-       }\
        if (task->filter[MOSAIC_DELTA]){\
                DO_OPERATION_IF_ALLOWED(estimate, delta, TPE);\
        }\
@@ -277,6 +273,12 @@ static str MOSestimate_inner_##TPE(MOSta
        if (task->filter[MOSAIC_PREFIX]){\
                DO_OPERATION_IF_ALLOWED(estimate, prefix, TPE);\
        }\
+       if (task->filter[MOSAIC_CAPPED]){\
+               DO_OPERATION_IF_ALLOWED(estimate, capped, TPE);\
+       }\
+       if (task->filter[MOSAIC_VAR]){\
+               DO_OPERATION_IF_ALLOWED(estimate, var, TPE);\
+       }\
 \
        flt best_factor = 0.0;\
        current->is_applicable = false;\
@@ -315,7 +317,7 @@ static str MOSestimate_##TPE(MOStask tas
                .nr_capped_encoded_elements = 0,\
                .nr_capped_encoded_blocks = 0,\
                .compression_strategy = {.tag = MOSAIC_EOL, .cnt = 0},\
-               .must_be_merged_with_previous = false\
+               .must_be_merged_with_previous = false,\
        };\
 \
        MosaicEstimation current;\
@@ -575,7 +577,9 @@ MOScompressInternal(BAT* bsrc, const cha
        // TODO: if we couldnt compress well enough, ignore the result
 
        bsrc->batDirtydesc = true;
-       task->hdr->ratio = (flt)task->bsrc->theap.free/ 
task->bsrc->tmosaic->free;
+       task->hdr->ratio =
+               (flt)task->bsrc->theap.free /
+               (task->bsrc->tmosaic->free + (task->bsrc->tvmosaic? 
task->bsrc->tvmosaic->free : 0));
 finalize:
        GDKfree(task);
 
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
@@ -177,10 +177,11 @@ typedef struct _MosaicEstimation {
        MosaicBlkRec compression_strategy;
        bool is_applicable;
        bool must_be_merged_with_previous;
-       size_t nr_var_encoded_elements;
-       size_t nr_var_encoded_blocks;
-       size_t nr_capped_encoded_elements;
-       size_t nr_capped_encoded_blocks;
+       BUN nr_var_encoded_elements;
+       BUN nr_var_encoded_blocks;
+       BUN nr_capped_encoded_elements;
+       BUN nr_capped_encoded_blocks;
+       BUN* max_compression_length;
 } MosaicEstimation;
 
 #define GET_PADDING(blk, NAME, TPE) (((MOSBlockHeaderTpe(NAME, TPE)*) 
(blk))->base.padding)
diff --git a/monetdb5/modules/mosaic/mosaic_capped.c 
b/monetdb5/modules/mosaic/mosaic_capped.c
--- a/monetdb5/modules/mosaic/mosaic_capped.c
+++ b/monetdb5/modules/mosaic/mosaic_capped.c
@@ -240,6 +240,11 @@ MOSestimate_SIGNATURE(capped, TPE)\
        (void) previous;\
        GlobalCappedInfo* info = task->capped_info;\
        BUN limit = (BUN) (task->stop - task->start > MOSAICMAXCNT? 
MOSAICMAXCNT: task->stop - task->start);\
+\
+       if (*current->max_compression_length != 0 &&  
*current->max_compression_length < limit) {\
+               limit = *current->max_compression_length;\
+       }\
+\
        TPE* val = getSrc(TPE, task);\
        BUN delta_count;\
        BUN nr_compressed;\
diff --git a/monetdb5/modules/mosaic/mosaic_delta.c 
b/monetdb5/modules/mosaic/mosaic_delta.c
--- a/monetdb5/modules/mosaic/mosaic_delta.c
+++ b/monetdb5/modules/mosaic/mosaic_delta.c
@@ -149,6 +149,10 @@ MOSestimate_SIGNATURE(delta, TPE)\
        current->compressed_size += 2 * sizeof(MOSBlockHeaderTpe(delta, TPE)) + 
wordaligned((parameters.base.rec.cnt * parameters.bits) / CHAR_BIT, lng);\
        current->compression_strategy.cnt = (unsigned int) 
parameters.base.rec.cnt;\
 \
+       if (parameters.base.rec.cnt > *current->max_compression_length ) {\
+               *current->max_compression_length = parameters.base.rec.cnt;\
+       }\
+\
        return MAL_SUCCEED;\
 }
 
diff --git a/monetdb5/modules/mosaic/mosaic_frame.c 
b/monetdb5/modules/mosaic/mosaic_frame.c
--- a/monetdb5/modules/mosaic/mosaic_frame.c
+++ b/monetdb5/modules/mosaic/mosaic_frame.c
@@ -146,6 +146,10 @@ MOSestimate_SIGNATURE(frame, TPE)\
        current->compressed_size += 2 * sizeof(MOSBlockHeaderTpe(frame, TPE)) + 
wordaligned((parameters.base.rec.cnt * parameters.bits) / CHAR_BIT, lng);\
        current->compression_strategy.cnt = (unsigned int) 
parameters.base.rec.cnt;\
 \
+       if (parameters.base.rec.cnt > *current->max_compression_length ) {\
+               *current->max_compression_length = parameters.base.rec.cnt;\
+       }\
+\
        return MAL_SUCCEED;\
 }
 
diff --git a/monetdb5/modules/mosaic/mosaic_linear.c 
b/monetdb5/modules/mosaic/mosaic_linear.c
--- a/monetdb5/modules/mosaic/mosaic_linear.c
+++ b/monetdb5/modules/mosaic/mosaic_linear.c
@@ -103,6 +103,10 @@ MOSestimate_SIGNATURE(linear, TPE)\
        current->compressed_size += 2 * sizeof(MOSBlockHeaderTpe(linear, TPE));\
        current->compression_strategy.cnt = (unsigned int) i;\
 \
+       if (i > *current->max_compression_length ) {\
+               *current->max_compression_length = i;\
+       }\
+\
        return MAL_SUCCEED;\
 }
 
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
@@ -200,6 +200,10 @@ MOSestimate_SIGNATURE(prefix, TPE)\
        current->compressed_size += store;\
        current->compression_strategy.cnt = (unsigned int) 
parameters.base.rec.cnt;\
 \
+       if (parameters.base.rec.cnt > *current->max_compression_length ) {\
+               *current->max_compression_length = parameters.base.rec.cnt;\
+       }\
+\
        return MAL_SUCCEED;\
 }
 
diff --git a/monetdb5/modules/mosaic/mosaic_raw.c 
b/monetdb5/modules/mosaic/mosaic_raw.c
--- a/monetdb5/modules/mosaic/mosaic_raw.c
+++ b/monetdb5/modules/mosaic/mosaic_raw.c
@@ -97,7 +97,7 @@ MOSestimate_SIGNATURE(raw, TPE)\
        current->is_applicable = true;\
        current->uncompressed_size += (BUN) sizeof(TPE);\
        unsigned int cnt = previous->compression_strategy.cnt;\
-       if (previous->compression_strategy.tag == MOSAIC_RAW && cnt + 1 < (1 << 
CNT_BITS)) {\
+       if (previous->compression_strategy.tag == MOSAIC_RAW && (cnt + 1 < 
MOSAICMAXCNT)) {\
                current->must_be_merged_with_previous = true;\
                cnt++;\
                current->compressed_size += sizeof(TPE);\
diff --git a/monetdb5/modules/mosaic/mosaic_runlength.c 
b/monetdb5/modules/mosaic/mosaic_runlength.c
--- a/monetdb5/modules/mosaic/mosaic_runlength.c
+++ b/monetdb5/modules/mosaic/mosaic_runlength.c
@@ -101,6 +101,8 @@ MOSestimate_SIGNATURE(runlength, TPE)\
        current->compressed_size += 2 * sizeof(MOSBlockHeaderTpe(runlength, 
TPE));\
        current->compression_strategy.cnt = i;\
 \
+       if (i > *current->max_compression_length ) 
*current->max_compression_length = i;\
+\
        return MAL_SUCCEED;\
 }
 
diff --git a/monetdb5/modules/mosaic/mosaic_var.c 
b/monetdb5/modules/mosaic/mosaic_var.c
--- a/monetdb5/modules/mosaic/mosaic_var.c
+++ b/monetdb5/modules/mosaic/mosaic_var.c
@@ -154,6 +154,11 @@ MOSestimate_SIGNATURE(var, TPE)\
        (void) previous;\
        GlobalVarInfo* info = task->var_info;\
        BUN limit = (BUN) (task->stop - task->start > MOSAICMAXCNT? 
MOSAICMAXCNT: task->stop - task->start);\
+\
+       if (*current->max_compression_length != 0 &&  
*current->max_compression_length < limit) {\
+               limit = *current->max_compression_length;\
+       }\
+\
        TPE* val = getSrc(TPE, task);\
        BUN delta_count;\
        BUN nr_compressed;\
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to