Changeset: 2b52feee3dd9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2b52feee3dd9
Modified Files:
monetdb5/modules/mal/Tests/mosaic_dict.mal
monetdb5/modules/mal/Tests/mosaic_dict.stable.out
monetdb5/modules/mal/Tests/mosaic_dict_joins.mal
monetdb5/modules/mal/Tests/mosaic_dict_joins.stable.out
monetdb5/modules/mal/Tests/mosaic_dict_subselect.mal
monetdb5/modules/mal/Tests/mosaic_dict_subselect.stable.out
monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.mal
monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.stable.out
monetdb5/modules/mal/mosaic.c
monetdb5/modules/mal/mosaic_delta.c
monetdb5/modules/mal/mosaic_delta.h
monetdb5/modules/mal/mosaic_dict.c
monetdb5/modules/mal/mosaic_dict.h
monetdb5/modules/mal/mosaic_rle.c
monetdb5/modules/mal/mosaic_rle.h
monetdb5/modules/mal/mosaic_zone.c
monetdb5/modules/mal/mosaic_zone.h
Branch: mosaic
Log Message:
Percentage calculation cleanup
diffs (truncated from 339 to 300 lines):
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict.mal
b/monetdb5/modules/mal/Tests/mosaic_dict.mal
--- a/monetdb5/modules/mal/Tests/mosaic_dict.mal
+++ b/monetdb5/modules/mal/Tests/mosaic_dict.mal
@@ -7,7 +7,7 @@ bat.append(b,"2014-08-14 12:00:00":times
b:= bat.append(b,b);
io.print(b);
-x:= mosaic.compress(b,"dict test");
+x:= mosaic.compress(b,"dict test 100");
#mosaic.dump(x);
z:= mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict.stable.out
b/monetdb5/modules/mal/Tests/mosaic_dict.stable.out
--- a/monetdb5/modules/mal/Tests/mosaic_dict.stable.out
+++ b/monetdb5/modules/mal/Tests/mosaic_dict.stable.out
@@ -26,7 +26,7 @@ function user.main():void;
bat.append(b,"2014-08-14 12:00:00.000":timestamp);
b := bat.append(b,b);
io.print(b);
- x := mosaic.compress(b,"dict test");
+ x := mosaic.compress(b,"dict test 100");
#mosaic.dump(x);
z := mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict_joins.mal
b/monetdb5/modules/mal/Tests/mosaic_dict_joins.mal
--- a/monetdb5/modules/mal/Tests/mosaic_dict_joins.mal
+++ b/monetdb5/modules/mal/Tests/mosaic_dict_joins.mal
@@ -7,7 +7,7 @@ bat.append(b,"2014-08-14 12:00:00":times
b:= bat.append(b,b);
io.print(b);
-x:= mosaic.compress(b,"dict test");
+x:= mosaic.compress(b,"dict test 100");
#mosaic.dump(x);
z:= mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict_joins.stable.out
b/monetdb5/modules/mal/Tests/mosaic_dict_joins.stable.out
--- a/monetdb5/modules/mal/Tests/mosaic_dict_joins.stable.out
+++ b/monetdb5/modules/mal/Tests/mosaic_dict_joins.stable.out
@@ -26,7 +26,7 @@ function user.main():void;
bat.append(b,"2014-08-14 12:00:00.000":timestamp);
b := bat.append(b,b);
io.print(b);
- x := mosaic.compress(b,"dict test");
+ x := mosaic.compress(b,"dict test 100");
#mosaic.dump(x);
z := mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict_subselect.mal
b/monetdb5/modules/mal/Tests/mosaic_dict_subselect.mal
--- a/monetdb5/modules/mal/Tests/mosaic_dict_subselect.mal
+++ b/monetdb5/modules/mal/Tests/mosaic_dict_subselect.mal
@@ -7,7 +7,7 @@ bat.append(b,"2014-08-14 12:00:00":times
b:= bat.append(b,b);
io.print(b);
-x:= mosaic.compress(b,"dict test");
+x:= mosaic.compress(b,"dict test 100");
#mosaic.dump(x);
z:= mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict_subselect.stable.out
b/monetdb5/modules/mal/Tests/mosaic_dict_subselect.stable.out
--- a/monetdb5/modules/mal/Tests/mosaic_dict_subselect.stable.out
+++ b/monetdb5/modules/mal/Tests/mosaic_dict_subselect.stable.out
@@ -26,7 +26,7 @@ function user.main():void;
bat.append(b,"2014-08-14 12:00:00.000":timestamp);
b := bat.append(b,b);
io.print(b);
- x := mosaic.compress(b,"dict test");
+ x := mosaic.compress(b,"dict test 100");
#mosaic.dump(x);
z := mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.mal
b/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.mal
--- a/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.mal
+++ b/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.mal
@@ -8,7 +8,7 @@ bat.append(b,"2014-08-14 12:00:00":times
b:= bat.append(b,b);
io.print(b);
-x:= mosaic.compress(b,"dict test");
+x:= mosaic.compress(b,"dict test 10");
#mosaic.dump(x);
z:= mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.stable.out
b/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.stable.out
--- a/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.stable.out
+++ b/monetdb5/modules/mal/Tests/mosaic_dict_thetasubselect.stable.out
@@ -27,7 +27,7 @@ function user.main():void;
bat.append(b,"2014-08-14 12:00:00.000":timestamp);
b := bat.append(b,b);
io.print(b);
- x := mosaic.compress(b,"dict test");
+ x := mosaic.compress(b,"dict test 10");
#mosaic.dump(x);
z := mosaic.decompress(x);
io.print(z);
diff --git a/monetdb5/modules/mal/mosaic.c b/monetdb5/modules/mal/mosaic.c
--- a/monetdb5/modules/mal/mosaic.c
+++ b/monetdb5/modules/mal/mosaic.c
@@ -178,7 +178,7 @@ MOScompressInternal(Client cntxt, int *r
str msg = MAL_SUCCEED;
MOStask task;
int cand;
- lng chunksize=0, ch;
+ lng percentage=0, perc;
int filter[MOSAIC_METHODS];
if( properties)
@@ -188,9 +188,10 @@ MOScompressInternal(Client cntxt, int *r
for( i = 0; i< MOSAIC_METHODS; i++)
filter[i]= 1;
if( properties && (c = strstr(properties,"test")) ){
- if ( atoi(c+4) < DICTSIZE)
- dictsize = atoi(c+4);
- else
+ if ( atoi(c+4) < DICTSIZE){
+ if( atoi(c+4))
+ dictsize = atoi(c+4);
+ } else
dictsize = 2;
}
@@ -250,33 +251,33 @@ MOScompressInternal(Client cntxt, int *r
while(task->elm > 0){
// default is to extend the non-compressed block
cand = MOSAIC_NONE;
- ch =0;
- chunksize = 1;
+ perc = 100;
+ percentage = 100;
// select candidate amongst those
if (filter[MOSAIC_RLE])
- ch = MOSestimate_rle(cntxt,task);
- if ( ch > chunksize){
+ perc = MOSestimate_rle(cntxt,task);
+ if ( perc < percentage){
cand = MOSAIC_RLE;
- chunksize = ch;
+ percentage = perc;
}
if (filter[MOSAIC_DICT])
- ch = MOSestimate_dict(cntxt,task);
- if ( ch > chunksize){
+ perc = MOSestimate_dict(cntxt,task);
+ if ( perc <= percentage){
cand = MOSAIC_DICT;
- chunksize = ch;
+ percentage = perc;
}
if (filter[MOSAIC_ZONE])
- ch = MOSestimate_zone(cntxt,task);
- if ( ch > chunksize){
+ perc = MOSestimate_zone(cntxt,task);
+ if ( perc < percentage){
cand = MOSAIC_ZONE;
- chunksize = ch;
+ percentage = perc;
}
if (filter[MOSAIC_DELTA])
- ch = MOSestimate_delta(cntxt,task);
- if ( ch > chunksize){
+ perc = MOSestimate_delta(cntxt,task);
+ if ( perc < percentage){
cand = MOSAIC_DELTA;
- chunksize = ch;
+ percentage = perc;
}
// apply the compression to a chunk
diff --git a/monetdb5/modules/mal/mosaic_delta.c
b/monetdb5/modules/mal/mosaic_delta.c
--- a/monetdb5/modules/mal/mosaic_delta.c
+++ b/monetdb5/modules/mal/mosaic_delta.c
@@ -64,13 +64,13 @@ MOSskip_delta(MOStask task)
break;\
val = *w;\
}\
- chunksize = i;\
+ percentage = 100 * (sizeof(TYPE)+(int)i-1) / ((int)i * sizeof(TYPE));\
}
-lng
+int
MOSestimate_delta(Client cntxt, MOStask task)
{ BUN i = -1;
- lng chunksize = 0;
+ int percentage = 0;
(void) cntxt;
switch(ATOMstorage(task->type)){
@@ -84,10 +84,11 @@ MOSestimate_delta(Client cntxt, MOStask
break;
val = *w;
}
- chunksize = i;
+ percentage = 100 * (sizeof(int)+(int)i-1) / ((int)i *
sizeof(int));
}
}
- return chunksize;
+ mnstr_printf(cntxt->fdout,"#estimate delta %d elm %d
perc\n",(int)i,percentage);
+ return percentage;
}
#define DELTAcompress(TYPE)\
diff --git a/monetdb5/modules/mal/mosaic_delta.h
b/monetdb5/modules/mal/mosaic_delta.h
--- a/monetdb5/modules/mal/mosaic_delta.h
+++ b/monetdb5/modules/mal/mosaic_delta.h
@@ -32,7 +32,7 @@
mosaic_export void MOSdump_delta(Client cntxt, MOStask task);
mosaic_export void MOSadvance_delta(MOStask task);
mosaic_export void MOSskip_delta(MOStask task);
-mosaic_export lng MOSestimate_delta(Client cntxt, MOStask task);
+mosaic_export int MOSestimate_delta(Client cntxt, MOStask task);
mosaic_export void MOScompress_delta(Client cntxt, MOStask task);
mosaic_export void MOSdecompress_delta(Client cntxt, MOStask task);
mosaic_export str MOSsubselect_delta(Client cntxt, MOStask task, BUN first,
BUN last, void *low, void *hgh, bit *li, bit *hi, bit *anti);
diff --git a/monetdb5/modules/mal/mosaic_dict.c
b/monetdb5/modules/mal/mosaic_dict.c
--- a/monetdb5/modules/mal/mosaic_dict.c
+++ b/monetdb5/modules/mal/mosaic_dict.c
@@ -95,14 +95,16 @@ MOSskip_dict(MOStask task)
cnt++;\
}\
}\
+ if(i) percentage = 100 * sizeof(TYPE) * dictsize / ((int)i *
sizeof(TYPE));\
}
// calculate the expected reduction using DICT in terms of elements compressed
-lng
+int
MOSestimate_dict(Client cntxt, MOStask task)
{ BUN i = -1;
int cnt =0,j;
lng *size;
+ int percentage= 99;
(void) cntxt;
// use the dst to avoid overwriting noneblocked
@@ -125,9 +127,11 @@ MOSestimate_dict(Client cntxt, MOStask t
cnt++;
}
}
+ if(i) percentage = 100 * sizeof(int) * dictsize /
((int)i * sizeof(int));
}
}
- return cnt; // for later cnt >dictsize? cnt-dictsize:0;
+ mnstr_printf(cntxt->fdout,"#estimate dict %d elm %d
perc\n",(int)i,percentage);
+ return percentage;
}
// insert a series of values into the compressor block using dictionary
diff --git a/monetdb5/modules/mal/mosaic_dict.h
b/monetdb5/modules/mal/mosaic_dict.h
--- a/monetdb5/modules/mal/mosaic_dict.h
+++ b/monetdb5/modules/mal/mosaic_dict.h
@@ -34,7 +34,7 @@ mosaic_export int dictsize;
mosaic_export void MOSdump_dict(Client cntxt, MOStask task);
mosaic_export void MOSadvance_dict(MOStask task);
mosaic_export void MOSskip_dict(MOStask task);
-mosaic_export lng MOSestimate_dict(Client cntxt, MOStask task);
+mosaic_export int MOSestimate_dict(Client cntxt, MOStask task);
mosaic_export void MOScompress_dict(Client cntxt, MOStask task);
mosaic_export void MOSdecompress_dict(Client cntxt, MOStask task);
mosaic_export str MOSsubselect_dict(Client cntxt, MOStask task, BUN first,
BUN last, void *low, void *hgh, bit *li, bit *hi, bit *anti);
diff --git a/monetdb5/modules/mal/mosaic_rle.c
b/monetdb5/modules/mal/mosaic_rle.c
--- a/monetdb5/modules/mal/mosaic_rle.c
+++ b/monetdb5/modules/mal/mosaic_rle.c
@@ -85,14 +85,14 @@ MOSskip_rle(MOStask task)
for(i =1; i < task->elm; i++)\
if ( ((TYPE*)task->src)[i] != val)\
break;\
- chunksize = i;\
+ percentage = 100 * sizeof(TYPE)/ ( (int)i * sizeof(TYPE));\
}
// calculate the expected reduction using RLE in terms of elements compressed
-lng
+int
MOSestimate_rle(Client cntxt, MOStask task)
{ BUN i = -1;
- lng chunksize = 0;
+ int percentage = 0;
(void) cntxt;
switch(ATOMstorage(task->type)){
@@ -107,10 +107,11 @@ MOSestimate_rle(Client cntxt, MOStask ta
for(i =1; i<task->elm; i++)
if ( ((int*)task->src)[i] != val)
break;
- chunksize = i;
+ percentage = 100 * sizeof(int)/ ( i * sizeof(int));
}
}
- return chunksize;
+ mnstr_printf(cntxt->fdout,"#estimate rle %d elm %d
perc\n",(int)i,percentage);
+ return percentage;
}
// insert a series of values into the compressor block using rle.
diff --git a/monetdb5/modules/mal/mosaic_rle.h
b/monetdb5/modules/mal/mosaic_rle.h
--- a/monetdb5/modules/mal/mosaic_rle.h
+++ b/monetdb5/modules/mal/mosaic_rle.h
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list