Changeset: 76cce1c1f712 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=76cce1c1f712
Modified Files:
monetdb5/modules/mosaic/TODO_MOSAIC.txt
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_dict.c
monetdb5/modules/mosaic/mosaic_dict.h
monetdb5/modules/mosaic/mosaic_dict256.c
monetdb5/modules/mosaic/mosaic_dict256.h
monetdb5/modules/mosaic/mosaic_frame.c
monetdb5/modules/mosaic/mosaic_frame.h
monetdb5/modules/mosaic/mosaic_hdr.c
monetdb5/modules/mosaic/mosaic_hdr.h
monetdb5/modules/mosaic/mosaic_join.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_projection.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
monetdb5/modules/mosaic/mosaic_select.h
monetdb5/modules/mosaic/mosaic_utility.h
Branch: mosaic
Log Message:
Don't allocate MOStask objects on the heap.
diffs (truncated from 1020 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
@@ -21,6 +21,5 @@ Create a plug-in estimation model framew
####code issues####
See if the iteration algorithms can be improved.
-Get rid of (most of) MOStask and/or don't allocate it on the heap.
Use GDK naming conventions, e.g. o for stuff coming out if canditer_next.
Update copyright in 2020.
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
@@ -88,7 +88,7 @@ static void
}
static str
-construct_compression_mask(MOStask task, const char* compressions) {
+construct_compression_mask(MOStask* task, const char* compressions) {
char* copy = NULL;
if (compressions) {
@@ -125,7 +125,7 @@ construct_compression_mask(MOStask task,
}
static void
-MOSinit(MOStask task, BAT *b) {
+MOSinit(MOStask* task, BAT *b) {
char *base;
if( VIEWmosaictparent(b) != 0)
b= BATdescriptor(VIEWmosaictparent(b));
@@ -152,25 +152,20 @@ void MOSblk(MosaicBlk blk)
str
MOSlayout(BAT *b, BAT *btech, BAT *bcount, BAT *binput, BAT *boutput, BAT
*bproperties)
{
- MOStask task=0;
+ MOStask task = {0};
unsigned i;
char buf[BUFSIZ];
lng zero=0;
- task= (MOStask) GDKzalloc(sizeof(*task));
- if( task == NULL)
- throw(SQL,"mosaic",MAL_MALLOC_FAIL);
-
if( b->tmosaic == NULL) {
- GDKfree(task);
throw(MAL,"mosaic.layout","Compression heap missing");
}
- MOSinit(task,b);
- MOSinitializeScan(task, b);
+ MOSinit(&task,b);
+ MOSinitializeScan(&task, b);
// safe the general properties
- snprintf(buf,BUFSIZ,"%g", task->hdr->ratio);
+ snprintf(buf,BUFSIZ,"%g", (task.hdr)->ratio);
if( BUNappend(btech, "ratio", false) != GDK_SUCCEED ||
BUNappend(bcount, &zero, false) != GDK_SUCCEED ||
BUNappend(binput, &zero, false) != GDK_SUCCEED ||
@@ -181,16 +176,16 @@ MOSlayout(BAT *b, BAT *btech, BAT *bcoun
lng zero = 0;
snprintf(buf,BUFSIZ,"%s blocks", MOSmethods[i].name);
if( BUNappend(btech, buf, false) != GDK_SUCCEED ||
- BUNappend(bcount, &task->hdr->blks[i], false) !=
GDK_SUCCEED ||
- BUNappend(binput, &task->hdr->elms[i], false) !=
GDK_SUCCEED ||
+ BUNappend(bcount, &(task.hdr)->blks[i], false) !=
GDK_SUCCEED ||
+ BUNappend(binput, &(task.hdr)->elms[i], false) !=
GDK_SUCCEED ||
BUNappend(boutput, &zero , false) != GDK_SUCCEED ||
BUNappend(bproperties, "", false) != GDK_SUCCEED)
throw(MAL,"mosaic.layout", MAL_MALLOC_FAIL);
}
- if( task->hdr->blks[MOSAIC_DICT256])
-
MOSlayout_dict256_hdr(task,btech,bcount,binput,boutput,bproperties);
- if( task->hdr->blks[MOSAIC_DICT])
-
MOSlayout_dict_hdr(task,btech,bcount,binput,boutput,bproperties);
+ if( (task.hdr)->blks[MOSAIC_DICT256])
+
MOSlayout_dict256_hdr(&task,btech,bcount,binput,boutput,bproperties);
+ if( (task.hdr)->blks[MOSAIC_DICT])
+
MOSlayout_dict_hdr(&task,btech,bcount,binput,boutput,bproperties);
if( BUNappend(btech, "========", false) != GDK_SUCCEED ||
BUNappend(bcount, &zero, false) != GDK_SUCCEED ||
@@ -273,7 +268,7 @@ static inline BUN get_normalized_compres
static str
-MOSprepareEstimate(MOStask task) {
+MOSprepareEstimate(MOStask* task) {
str error;
if (METHOD_IS_SET(task->mask, MOSAIC_DICT256)){
@@ -301,7 +296,7 @@ MOSprepareEstimate(MOStask task) {
#define postEstimate(NAME, TPE, DUMMY_ARGUMENT)
MOSpostEstimate_##NAME##_##TPE(task);
#define MOSestimate_AND_MOSoptimizerCost_DEF(TPE) \
-static str MOSestimate_inner_##TPE(MOStask task, MosaicEstimation* current,
const MosaicEstimation* previous) {\
+static str MOSestimate_inner_##TPE(MOStask* task, MosaicEstimation* current,
const MosaicEstimation* previous) {\
\
BUN max_compression_length = 0;\
MosaicEstimation estimations[MOSAIC_METHODS];\
@@ -373,7 +368,7 @@ static str MOSestimate_inner_##TPE(MOSta
\
return MAL_SUCCEED;\
}\
-static str MOSestimate_##TPE(MOStask task, BAT* estimates, size_t*
compressed_size) {\
+static str MOSestimate_##TPE(MOStask* task, BAT* estimates, size_t*
compressed_size) {\
str result = MAL_SUCCEED;\
\
*compressed_size = 0;\
@@ -440,7 +435,7 @@ MOSestimate_AND_MOSoptimizerCost_DEF(hge
static
-str MOSestimate(MOStask task, BAT* estimates, size_t* compressed_size) {
+str MOSestimate(MOStask* task, BAT* estimates, size_t* compressed_size) {
switch(ATOMbasetype(task->type)){
case TYPE_bte: return MOSestimate_bte(task, estimates, compressed_size);
case TYPE_sht: return MOSestimate_sht(task, estimates, compressed_size);
@@ -460,7 +455,7 @@ str MOSestimate(MOStask task, BAT* estim
}
static str
-MOSfinalizeDictionary(MOStask task) {
+MOSfinalizeDictionary(MOStask* task) {
str error;
@@ -490,7 +485,7 @@ MOSfinalizeDictionary(MOStask task) {
#define MOScompressInternal_DEF(TPE)\
static void \
-MOScompressInternal_##TPE(MOStask task, BAT* estimates)\
+MOScompressInternal_##TPE(MOStask* task, BAT* estimates)\
{\
/* second pass: compression phase*/\
for(BUN i = 0; i < BATcount(estimates); i++) {\
@@ -543,7 +538,7 @@ MOScompressInternal_DEF(hge)
str
MOScompressInternal(BAT* bsrc, const char* compressions)
{
- MOStask task;
+ MOStask task = {0};
str msg = MAL_SUCCEED;
lng t0,t1;
@@ -572,28 +567,23 @@ MOScompressInternal(BAT* bsrc, const cha
}
assert(bsrc->tmosaic->parentid == bsrc->batCacheid);
- if((task = (MOStask) GDKzalloc(sizeof(*task))) == NULL) {
- MOSdestroy(bsrc);
- throw(MAL, "mosaic.compress", MAL_MALLOC_FAIL);
- }
+ // initialize the non-compressed read pointer
+ task.src = Tloc(bsrc, 0);
+ task.start = 0;
+ task.stop = BATcount(bsrc);
+ task.timer = GDKusec();
- // initialize the non-compressed read pointer
- task->src = Tloc(bsrc, 0);
- task->start = 0;
- task->stop = BATcount(bsrc);
- task->timer = GDKusec();
+ MOSinit(&task,bsrc);
+ task.blk->cnt= 0;
+ MOSinitHeader(&task);
- MOSinit(task,bsrc);
- task->blk->cnt= 0;
- MOSinitHeader(task);
-
- if ( (msg = construct_compression_mask(task, compressions)) !=
MAL_SUCCEED) {
+ if ( (msg = construct_compression_mask(&task, compressions)) !=
MAL_SUCCEED) {
MOSdestroy(bsrc);
goto finalize;
}
// Zero pass: estimation preparation phase
- if ((msg = MOSprepareEstimate(task))) {
+ if ((msg = MOSprepareEstimate(&task))) {
MOSdestroy(bsrc);
goto finalize;
}
@@ -607,13 +597,13 @@ MOScompressInternal(BAT* bsrc, const cha
size_t compressed_size_bytes;
// First pass: estimation phase
- if ( ( msg = MOSestimate(task, estimates, &compressed_size_bytes) )) {
+ if ( ( msg = MOSestimate(&task, estimates, &compressed_size_bytes) )) {
BBPreclaim(estimates);
MOSdestroy(bsrc);
goto finalize;
}
- if ((msg = MOSfinalizeDictionary(task))) {
+ if ((msg = MOSfinalizeDictionary(&task))) {
BBPreclaim(estimates);
MOSdestroy(bsrc);
goto finalize;
@@ -626,35 +616,34 @@ MOScompressInternal(BAT* bsrc, const cha
goto finalize;
}
- MOSinit(task, bsrc);
+ MOSinit(&task, bsrc);
- task->start = 0;
+ task.start = 0;
- switch(ATOMbasetype(task->type)){
- case TYPE_bte: MOScompressInternal_bte(task, estimates); break;
- case TYPE_sht: MOScompressInternal_sht(task, estimates); break;
- case TYPE_int: MOScompressInternal_int(task, estimates); break;
- case TYPE_lng: MOScompressInternal_lng(task, estimates); break;
- case TYPE_flt: MOScompressInternal_flt(task, estimates); break;
- case TYPE_dbl: MOScompressInternal_dbl(task, estimates); break;
+ switch(ATOMbasetype(task.type)){
+ case TYPE_bte: MOScompressInternal_bte(&task, estimates); break;
+ case TYPE_sht: MOScompressInternal_sht(&task, estimates); break;
+ case TYPE_int: MOScompressInternal_int(&task, estimates); break;
+ case TYPE_lng: MOScompressInternal_lng(&task, estimates); break;
+ case TYPE_flt: MOScompressInternal_flt(&task, estimates); break;
+ case TYPE_dbl: MOScompressInternal_dbl(&task, estimates); break;
#ifdef HAVE_HGE
- case TYPE_hge: MOScompressInternal_hge(task, estimates); break;
+ case TYPE_hge: MOScompressInternal_hge(&task, estimates); break;
#endif
default: // Unknown block type. Should not happen.
assert(0);
}
- task->bsrc->tmosaic->free = (task->dst - (char*)task->hdr);
- task->timer = GDKusec() - task->timer;
+ task.bsrc->tmosaic->free = (task.dst - (char*)task.hdr);
+ task.timer = GDKusec() - task.timer;
// 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->bsrc->tvmosaic?
task->bsrc->tvmosaic->free : 0));
+ task.hdr->ratio =
+ (flt)task.bsrc->theap.free /
+ (task.bsrc->tmosaic->free + (task.bsrc->tvmosaic?
task.bsrc->tvmosaic->free : 0));
finalize:
- GDKfree(task);
t1 = GDKusec();
ALGODEBUG mnstr_printf(GDKstdout, "##BATmosaic: mosaic construction "
LLFMT " usec\n", t1 - t0);
@@ -706,7 +695,7 @@ MOScompress(Client cntxt, MalBlkPtr mb,
}
#define MOSdecompressInternal_DEF(TPE) \
-static void MOSdecompressInternal_##TPE(MOStask task)\
+static void MOSdecompressInternal_##TPE(MOStask* task)\
{\
while(task->start != task->stop){\
switch(MOSgetTag(task->blk)){\
@@ -753,7 +742,7 @@ MOSdecompressInternal_DEF(hge)
static str
MOSdecompressInternal(BAT** res, BAT* bsrc)
{
- MOStask task;
+ MOStask task = {0};
if (BATcheckmosaic(bsrc) == 0 ){
*res = bsrc;
@@ -765,12 +754,6 @@ MOSdecompressInternal(BAT** res, BAT* bs
throw(MAL, "mosaic.decompress", "cannot decompress tail-VIEW");
}
- // use the original heap for reconstruction
- task= (MOStask) GDKzalloc(sizeof(*task));
- if( task == NULL){
- throw(MAL, "mosaic.decompress", MAL_MALLOC_FAIL);
- }
-
BBPshare(bsrc->tmosaic->parentid);
*res = COLnew(0, bsrc->ttype, bsrc->batCapacity, TRANSIENT);
@@ -792,34 +775,30 @@ MOSdecompressInternal(BAT** res, BAT* bs
(*res)->tnonil = bsrc->tnonil;
(*res)->tnil = bsrc->tnil;
- MOSinit(task,bsrc);
+ MOSinit(&task,bsrc);
- task->bsrc = *res;
- task->src = Tloc(*res, 0);
+ task.bsrc = *res;
+ task.src = Tloc(*res, 0);
- task->timer = GDKusec();
+ task.timer = GDKusec();
- MOSinitializeScan(task, task->bsrc);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list