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

Reply via email to