Changeset: d2869f5a4f51 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d2869f5a4f51 Modified Files: monetdb5/modules/mosaic/TODO_MOSAIC.txt monetdb5/modules/mosaic/Tests/mosaic_bit_1.raw.stable.out monetdb5/modules/mosaic/Tests/mosaic_date_1.raw.stable.out monetdb5/modules/mosaic/Tests/mosaic_lng_1.raw.stable.out monetdb5/modules/mosaic/Tests/mosaic_oid_1.raw.stable.out monetdb5/modules/mosaic/Tests/mosaic_timestamp_1.raw.stable.out monetdb5/modules/mosaic/mosaic.c monetdb5/modules/mosaic/mosaic.h monetdb5/modules/mosaic/mosaic_delta.c monetdb5/modules/mosaic/mosaic_delta.h monetdb5/modules/mosaic/mosaic_dictionary.c monetdb5/modules/mosaic/mosaic_dictionary.h monetdb5/modules/mosaic/mosaic_frame.c monetdb5/modules/mosaic/mosaic_frame.h monetdb5/modules/mosaic/mosaic_linear.c monetdb5/modules/mosaic/mosaic_linear.h monetdb5/modules/mosaic/mosaic_prefix.c monetdb5/modules/mosaic/mosaic_prefix.h monetdb5/modules/mosaic/mosaic_raw.c monetdb5/modules/mosaic/mosaic_raw.h monetdb5/modules/mosaic/mosaic_runlength.c monetdb5/modules/mosaic/mosaic_runlength.h Branch: mosaic Log Message:
Loose coupling estimation and compression. diffs (truncated from 1167 to 300 lines): diff --git a/monetdb5/modules/mosaic/TODO_MOSAIC.txt b/monetdb5/modules/mosaic/TODO_MOSAIC.txt --- a/monetdb5/modules/mosaic/TODO_MOSAIC.txt +++ b/monetdb5/modules/mosaic/TODO_MOSAIC.txt @@ -15,6 +15,7 @@ Fix the task-factor array. See if we can re-introduce landmark stuff somehow. Fix/check/test MOSlayout. benchmark +Do estimation before mosaic heap creation.That saves a potential heap extend. ####code issues#### Update copyright. diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_1.raw.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_bit_1.raw.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_bit_1.raw.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_1.raw.stable.out @@ -22,65 +22,7 @@ stdout of test 'mosaic_bit_1.raw` in dir # 16:26:45 > MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -#BATmosaic: mosaic construction 15 usec +#BATmosaic: mosaic construction 20 usec MOSdecompress_raw #--------------------------# # t t t # name diff --git a/monetdb5/modules/mosaic/Tests/mosaic_date_1.raw.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_date_1.raw.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_date_1.raw.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_date_1.raw.stable.out @@ -22,36 +22,7 @@ stdout of test 'mosaic_date_1.raw` in di # 17:20:28 > MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -#BATmosaic: mosaic construction 13 usec +#BATmosaic: mosaic construction 16 usec MOSdecompress_raw #--------------------------# # t t t t # name diff --git a/monetdb5/modules/mosaic/Tests/mosaic_lng_1.raw.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_lng_1.raw.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_lng_1.raw.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_lng_1.raw.stable.out @@ -22,36 +22,7 @@ stdout of test 'mosaic_lng_1.raw` in dir # 13:19:02 > MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -#BATmosaic: mosaic construction 17 usec +#BATmosaic: mosaic construction 18 usec MOSdecompress_raw #--------------------------# # t t t # name diff --git a/monetdb5/modules/mosaic/Tests/mosaic_oid_1.raw.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_oid_1.raw.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_oid_1.raw.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_oid_1.raw.stable.out @@ -22,36 +22,7 @@ stdout of test 'mosaic_oid_1.raw` in dir # 13:19:02 > MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -#BATmosaic: mosaic construction 12 usec +#BATmosaic: mosaic construction 22 usec MOSdecompress_raw #--------------------------# # t t t # name diff --git a/monetdb5/modules/mosaic/Tests/mosaic_timestamp_1.raw.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_timestamp_1.raw.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_timestamp_1.raw.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_timestamp_1.raw.stable.out @@ -22,36 +22,7 @@ stdout of test 'mosaic_timestamp_1.raw` # 17:20:29 > MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -MOScompress_raw -#BATmosaic: mosaic construction 14 usec +#BATmosaic: mosaic construction 17 usec MOSdecompress_raw #--------------------------# # t t t t # 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 @@ -187,6 +187,8 @@ MOSlayout(BAT *b, BAT *btech, BAT *bcoun MOSsetCnt(TASK->blk,0);\ TASK->dst = MOScodevector(TASK); +#define getFactor(ESTIMATION) ((flt) (ESTIMATION).uncompressed_size / (ESTIMATION).compressed_size) + /* The compression orchestration is dealt with here. * We assume that the estimates for each scheme returns * the number of elements it applies to. Moreover, we @@ -194,56 +196,115 @@ MOSlayout(BAT *b, BAT *btech, BAT *bcoun * This allows us to avoid expensive estimate calls when a small * sequence is found with high compression factor. */ -static int -MOSoptimizerCost(MOStask task, int typewidth) -{ - int cand = MOSAIC_RAW; - float ratio = 1.0, fac = 1.0; +static str +MOSoptimizerCost(MOStask task, MosaicEstimation* current, const MosaicEstimation* previous) { + str result = MAL_SUCCEED; + + MosaicEstimation estimations[MOSAICINDEX]; + const int size = sizeof(estimations) / sizeof(MosaicEstimation); + for (int i = 0; i < size; i++) { + estimations[i].uncompressed_size = previous->uncompressed_size; + estimations[i].compressed_size = previous->compressed_size; + estimations[i].compression_strategy = previous->compression_strategy; + estimations[i].must_be_merged_with_previous = false; + estimations[i].is_applicable = false; + } // select candidate amongst those - if ( task->filter[MOSAIC_RLE]){ - fac = MOSestimate_runlength(task); - if (fac > ratio){ - cand = MOSAIC_RLE; - ratio = fac; + if (task->filter[MOSAIC_RAW]){ + if( (result = MOSestimate_raw(task, &estimations[MOSAIC_RAW], previous))) { + return result; + } + } + if (task->filter[MOSAIC_RLE]){ + if( (result = MOSestimate_runlength(task, &estimations[MOSAIC_RLE], previous))) { + return result; + } + } + if (task->filter[MOSAIC_DICT]){ + if( (result = MOSestimate_dictionary(task, &estimations[MOSAIC_DICT], previous))) { + return result; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list