Changeset: dd058b7431d3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd058b7431d3
Modified Files:
monetdb5/modules/mal/mosaic.c
monetdb5/modules/mal/mosaic.mal
monetdb5/modules/mal/mosaic_dictionary.c
monetdb5/modules/mal/mosaic_frame.c
Branch: mosaic
Log Message:
Fixes non-initialized struct.
Moving the task descriptor out of place led to uninitialized values.
diffs (190 lines):
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
@@ -252,6 +252,7 @@ MOScompressInternal(Client cntxt, int *r
// initialize the non-compressed read pointer
task->src = Tloc(bsrc, BUNfirst(bsrc));
task->elm = BATcount(bsrc);
+ task->start = 0;
task->stop = BATcount(bsrc);
task->size = bsrc->T->heap.free;
task->timer = GDKusec();
@@ -279,6 +280,7 @@ MOScompressInternal(Client cntxt, int *r
}
task->src = Tloc(bcompress, BUNfirst(bcompress));
task->elm = BATcount(bcompress);
+ task->start = 0;
task->stop = BATcount(bsrc);
task->size = bcompress->T->heap.free;
task->timer = GDKusec();
@@ -455,7 +457,6 @@ MOScompressInternal(Client cntxt, int *r
BBPreleaseref(bcompress->batCacheid);
}
task->hdr->factor = (task->xsize ==0 ? 0:(flt)task->size/task->xsize);
- GDKfree(task);
#ifdef _DEBUG_MOSAIC_
MOSdumpInternal(cntxt,bcompress);
#endif
@@ -488,7 +489,9 @@ MOScompress(Client cntxt, MalBlkPtr mb,
for( i = 0; i< MOSAIC_METHODS; i++)
task->filter[i]= 1;
- return MOScompressInternal(cntxt, (int*) getArgReference(stk,pci,0),
(int*) getArgReference(stk,pci,1), task, 0, flg);
+ prop= MOScompressInternal(cntxt, (int*) getArgReference(stk,pci,0),
(int*) getArgReference(stk,pci,1), task, 0, flg);
+ GDKfree(task);
+ return prop;
}
// bulk decompress a heap
@@ -1303,7 +1306,7 @@ MOSanalyse(Client cntxt, MalBlkPtr mb, M
}
cand++;
}
- if( top == 0) { properties[0]="compressed"; top++;}
+ if( top == 0) { properties[0]="mosaic"; top++;}
if( pci->argc > cand ){
@@ -1362,36 +1365,41 @@ str
MOSmosaic(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
int ply;
- char * properties;
MOStask task;
- int i,ret;
+ int i,mx,ret;
bat bid;
+ float xf[MOSAIC_METHODS];
- (void) task;
- (void) ply;
- (void) i;
(void) mb;
(void) cntxt;
- (void) bid;
task= (MOStask) GDKzalloc(sizeof(*task));
if( task == NULL)
throw(MAL, "mosaic.mosaic", MAL_MALLOC_FAIL);
+ bid = *getArgReference_int(stk,pci,1);
ply = *getArgReference_int(stk,pci,2);
- properties = *getArgReference_str(stk,pci,1);
- if( properties && !strstr(properties,"mosaic"))
- for( i = 0; i< MOSAIC_METHODS; i++)
- task->filter[i]= strstr(properties,MOSfiltername[i]) !=
0;
- else
- for( i = 0; i< MOSAIC_METHODS; i++)
+ for( ; ply > 0; ply--){
+ for( i = 0; i< MOSAIC_METHODS - 1; i++)
+ xf[i]=0;
+
+ for( i = 1; i< MOSAIC_METHODS - 1; i++){
task->filter[i]= 1;
#ifdef _DEBUG_MOSAIC_
- mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t", bid,
BBP_physical(bid), type);
+ mnstr_printf(cntxt->fdout,"#%d\t%-8s\t", bid,
BBP_physical(bid));
#endif
-
- MOScompressInternal(cntxt, &ret, &bid, task, 0, TRUE);
+ MOScompressInternal(cntxt, &ret, &bid, task, 0, TRUE);
+ xf[i] = xfactor;
+ task->filter[i]= 0;
+ if( ret != bid)
+ BBPdecref(ret, TRUE);
+ }
+ for(mx =0, i = 1; i< MOSAIC_METHODS - 1; i++)
+ mx = xf[mx] < xf[i] ? i: mx;
+ mnstr_printf(cntxt->fdout,"#best strategy %s
%9.5f\n",MOSfiltername[mx],xf[mx]);
+ }
+ GDKfree(task);
return MAL_SUCCEED;
}
diff --git a/monetdb5/modules/mal/mosaic.mal b/monetdb5/modules/mal/mosaic.mal
--- a/monetdb5/modules/mal/mosaic.mal
+++ b/monetdb5/modules/mal/mosaic.mal
@@ -32,6 +32,10 @@ pattern analyse(b:int)
address MOSanalyse
comment "Apply default heap compression on a specific column";
+pattern optimize(bid:int, ply:int)
+address MOSmosaic
+comment "Perform a search thru the compression space";
+
pattern dump(b:bat[:oid,:any])
address MOSdump
comment "Dump the compressed structure";
diff --git a/monetdb5/modules/mal/mosaic_dictionary.c
b/monetdb5/modules/mal/mosaic_dictionary.c
--- a/monetdb5/modules/mal/mosaic_dictionary.c
+++ b/monetdb5/modules/mal/mosaic_dictionary.c
@@ -148,7 +148,7 @@ MOSskip_dictionary(Client cntxt, MOStask
}\
hdr->bits = 1;\
hdr->mask =1;\
- for( i=1 ; i < (BUN) hdr->dictsize-1; i *=2){\
+ for( i=2 ; i < (BUN) hdr->dictsize; i *=2){\
hdr->bits++;\
hdr->mask = (hdr->mask <<1) | 1;\
}\
@@ -168,7 +168,7 @@ MOScreatedictionary(Client cntxt, MOStas
hdr->dictsize = 0;
switch(ATOMstorage(task->type)){
case TYPE_sht: makeDict(sht); break;
- case TYPE_int: makeDict(int); break;
+ case TYPE_lng: makeDict(lng); break;
case TYPE_oid: makeDict(oid); break;
case TYPE_wrd: makeDict(wrd); break;
case TYPE_flt: makeDict(flt); break;
@@ -176,9 +176,9 @@ MOScreatedictionary(Client cntxt, MOStas
#ifdef HAVE_HGE
case TYPE_hge: makeDict(hge); break;
#endif
- case TYPE_lng:
- { lng *val = ((lng*)task->src) + task->start;
- lng *dict = (lng*)hdr->dict,v;
+ case TYPE_int:
+ { int *val = ((int*)task->src) + task->start;
+ int *dict = (int*)hdr->dict,v;
for(i =task->start; i< task->stop; i++, val++){
for(j= 0; j< hdr->dictsize; j++)
@@ -209,7 +209,7 @@ MOScreatedictionary(Client cntxt, MOStas
}
hdr->bits = 1;
hdr->mask =1;
- for( i=1 ; i < (BUN) hdr->dictsize-1; i *=2){
+ for( i=2 ; i < (BUN) hdr->dictsize; i *=2){
hdr->bits++;
hdr->mask = (hdr->mask <<1) | 1;
}
diff --git a/monetdb5/modules/mal/mosaic_frame.c
b/monetdb5/modules/mal/mosaic_frame.c
--- a/monetdb5/modules/mal/mosaic_frame.c
+++ b/monetdb5/modules/mal/mosaic_frame.c
@@ -146,7 +146,7 @@ MOSskip_frame(Client cntxt, MOStask task
}\
hdr->framebits = 1;\
hdr->mask =1;\
- for( i=1 ; i < (BUN) hdr->framesize-1; i *=2){\
+ for( i=2 ; i < (BUN) hdr->framesize; i *=2){\
hdr->framebits++;\
hdr->mask = (hdr->mask <<1) | 1;\
}\
@@ -198,6 +198,7 @@ MOScreateframe(Client cntxt, MOStask tas
} else
cnt[j]++;
}
+ //assert(hdr->framesize);
// sort it
for(i=0; i< (BUN) hdr->framesize; i++)
for(j=i+1; j< hdr->framesize; j++)
@@ -208,7 +209,7 @@ MOScreateframe(Client cntxt, MOStask tas
}
hdr->framebits = 1;
hdr->mask =1;
- for( i=1 ; i < (BUN) hdr->framesize-1; i *=2){
+ for( i=2 ; i < (BUN) hdr->framesize; i *=2){
hdr->framebits++;
hdr->mask = (hdr->mask <<1) | 1;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list