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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list