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