Changeset: daa3f34a8f92 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/daa3f34a8f92
Modified Files:
monetdb5/mal/mal_pipelines.c
monetdb5/mal/mal_stack.c
Branch: default
Log Message:
small mal stack optimizations
diffs (113 lines):
diff --git a/monetdb5/mal/mal_pipelines.c b/monetdb5/mal/mal_pipelines.c
--- a/monetdb5/mal/mal_pipelines.c
+++ b/monetdb5/mal/mal_pipelines.c
@@ -125,7 +125,7 @@ mal_pipelines_reset(void)
}
static MalStkPtr
-stack_copy(allocator *ma, MalStkPtr stk, int start)
+stack_copy(allocator *ma, MalStkPtr stk, int start, int stop)
{
MalStkPtr n = newGlobalStack(ma, stk->stktop);
ValPtr lhs, rhs;
@@ -140,27 +140,24 @@ stack_copy(allocator *ma, MalStkPtr stk,
if (isVarConstant(stk->blk, i) > 0) {
if (!isVarDisabled(stk->blk, i)) {
rhs = &getVarConstant(stk->blk, i);
- if(VALcopy(ma, lhs, rhs) == NULL)
- break;
- if (rhs->bat && rhs->val.bval) {
- assert(rhs->val.bval == bat_nil);
- BBPretain(rhs->val.bval);
- }
+ *lhs = *rhs;
+ lhs->allocated = false;
}
} else {
rhs = &stk->stk[i];
- if (/*getVarScope(stk->blk, i) < stk->calldepth ||*/
((getVarDeclared(stk->blk, i) <= start && getVarEolife(stk->blk, i) > start))
|| !rhs->vtype) {
+ if (getVarEolife(stk->blk, i) < start ||
getVarDeclared(stk->blk, i) > stop)
+ continue;
+ if (getVarDeclared(stk->blk, i) <= start) {
if(VALcopy(ma, lhs, rhs) == NULL)
break;
} else if (rhs->bat) {
lhs->bat = rhs->bat;
lhs->vtype = rhs->vtype;
- lhs->len = 0;
lhs->val.bval = bat_nil;
} else {
VALinit(ma, lhs, rhs->vtype,
ATOMnilptr(rhs->vtype));
}
- if (lhs->bat && lhs->val.bval)
+ if (lhs->bat && lhs->val.bval && lhs->val.bval !=
bat_nil)
BBPretain(lhs->val.bval);
}
}
@@ -203,7 +200,7 @@ PIPELINEworker(void *T)
allocator *ma = MT_thread_getallocator();
allocator_state ma_state = ma_open(ma);
- MalStkPtr stk = stack_copy(ma, s->stk, s->start);
+ MalStkPtr stk = stack_copy(ma, s->stk, s->start,
s->stop);
MT_thread_set_qry_ctx(&s->cntxt->qryctx);
diff --git a/monetdb5/mal/mal_stack.c b/monetdb5/mal/mal_stack.c
--- a/monetdb5/mal/mal_stack.c
+++ b/monetdb5/mal/mal_stack.c
@@ -54,26 +54,11 @@ newGlobalStack(allocator *ma, int size)
{
MalStkPtr s;
- s = (MalStkPtr) ma? ma_alloc(ma, stackSize(size)) :
GDKmalloc(stackSize(size));
+ s = (MalStkPtr) ma? ma_zalloc(ma, stackSize(size)) :
GDKzalloc(stackSize(size));
if (!s)
return NULL;
s->allocated = !ma;
s->stksize = size;
- s->stktop = s->stkbot = s->stkdepth = s->calldepth = 0;
- s->keepAlive = s->keepTmps = 0;
- s->admit = s->wrapup = NULL;
-
- s->status = 0;
- s->pcup = 0;
- s->tag = 0;
- s->memory = 0;
- s->up = NULL;
- s->blk = NULL;
- for(int i = 0; i < size; i++) {
- s->stk[i].vtype = 0;
- s->stk[i].bat = false;
- s->stk[i].allocated = false;
- }
return s;
}
@@ -107,15 +92,12 @@ reallocGlobalStack(allocator *ma, MalStk
void
clearStack(MalStkPtr s)
{
- ValPtr v;
- int i;
-
if (!s)
return;
- i = s->stktop;
- for (v = s->stk; i > 0; i--, v++) {
- if (v->bat) {
+ int i = s->stktop;
+ for (ValPtr v = s->stk; i > 0; i--, v++) {
+ if (v->bat && v->val.bval != bat_nil) {
BBPrelease(v->val.bval);
v->bat = false;
} else if (v->allocated && ATOMextern(v->vtype)) {
@@ -131,6 +113,7 @@ clearStack(MalStkPtr s)
v->allocated = false;
v->vtype = 0;
}
+ s->stktop = 0;
s->stkbot = 0;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]