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