Changeset: 186f8c9f62b4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=186f8c9f62b4
Modified Files:
monetdb5/mal/mal_recycle.c
monetdb5/modules/mal/trader.c
monetdb5/optimizer/opt_recycler.mx
monetdb5/scheduler/run_octopus.c
Branch: default
Log Message:
Adjustments for octopus.bind:
- added subsumption of binds
- subsumption used also in bid computation
- use only base table recycling in distributed case
diffs (228 lines):
diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -1954,13 +1954,14 @@ static int
RECYCLEdataTransfer(Client cntxt, MalStkPtr s, InstrPtr p)
{
int i, j, qidx, lcomp, rcomp, pc = -1;
- bat bid, sbid = -1;
+ /* bat bid; */
+ bat sbid = -1;
InstrPtr q;
bit gluse = FALSE;
- size_t scnt = 0;
+ BUN scnt = 0;
BAT *b, *bn;
- oid lval = 0, hval = 0;
- dbl ratio;
+ /* oid lval = 0, hval = 0;
+ dbl ratio; */
static str octopusRef = 0, bindRef = 0, bindidxRef = 0;
if (octopusRef == 0)
@@ -1990,6 +1991,7 @@ RECYCLEdataTransfer(Client cntxt, MalStk
if ( p->argc == 7 )
goto exactmatch;
else goto subsumption;
+
else { /* q is bat partition */
lcomp = VALcmp(&getVar(recycleBlk,getArg(q,6))->value,
@@ -1999,8 +2001,8 @@ RECYCLEdataTransfer(Client cntxt, MalStk
if ( lcomp == 0 && rcomp == 0 ) /* found an
exact match */
goto exactmatch;
- else if ( lcomp <= 0 && rcomp <= 0 )
- goto subsumption;
+/* else if ( lcomp <= 0 && rcomp <= 0 )
+ goto subsumption;*/
else
continue;
}
@@ -2028,38 +2030,39 @@ RECYCLEdataTransfer(Client cntxt, MalStk
mal_unset_lock(recycleLock,"recycle");
return i;
- subsumption:
- bid = getVarConstant(recycleBlk, getArg(q,0)).val.bval;
- b = BBPquickdesc(bid, FALSE);
- if( sbid == -1){
- sbid = bid;
- scnt = BATcount(b);
- pc = i;
- }
- else if ( BATcount(b) < scnt ) {
- sbid = bid;
- scnt = BATcount(b);
- pc = i;
- }
+ subsumption:
+ sbid = getVarConstant(recycleBlk, getArg(q,0)).val.bval;
+ pc = i;
+ break;
notfound:
continue;
}
if ( sbid >= 0 ) { /* subsumption of octopus.bind */
+ BUN psz;
+ int part_nr = *(int *)getArgReference(s, p, 6);
+ int nr_parts = *(int *)getArgReference(s, p, 7);
+
b = BBPquickdesc(sbid, FALSE);
- lval = *(oid *)getArgReference(s, p, 6);
+ scnt = BATcount(b);
+ psz = scnt?(scnt/nr_parts):0;
+ bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?scnt:((part_nr+1)*psz));
+ BATseqbase(bn, part_nr*psz);
+
+ /* lval = *(oid *)getArgReference(s, p, 6);
hval = *(oid *)getArgReference(s, p, 7);
bn = BATslice(b, lval, hval);
BATseqbase(bn, lval);
- ratio = (dbl)BATcount(bn)/(dbl)scnt;
+ ratio = (dbl)BATcount(bn)/(dbl)scnt; */
+
VALset(&s->stk[getArg(p,0)], TYPE_bat, &bn->batCacheid);
BBPkeepref( bn->batCacheid);
recycleBlk->profiler[pc].counter++;
recycleBlk->profiler[pc].clk = GDKusec();
recycleQPat->ptrn[cntxt->rcc->curQ]->dtreuse +=
- (lng) (ratio * recycleBlk->profiler[pc].wbytes);
+ (lng) scnt?(psz * recycleBlk->profiler[pc].wbytes /
scnt):0;
cntxt->rcc->recycled0++;
cntxt->rcc->recent = i;
}
diff --git a/monetdb5/modules/mal/trader.c b/monetdb5/modules/mal/trader.c
--- a/monetdb5/modules/mal/trader.c
+++ b/monetdb5/modules/mal/trader.c
@@ -55,17 +55,18 @@ static lng estimateSavings0(MalBlkPtr mb
static lng estimateSavings(MalBlkPtr mb, sht bidtype)
{
MalStkPtr stk = NULL;
- int i, j, k, marked = 0;
+ int i, j, k, marked = 0, maxparam = 0;
ValPtr lhs, rhs;
InstrPtr p, q;
lng savedInstr = 0, savedKB = 0;
- static str octopusRef = 0, bindRef = 0;
-
+ static str octopusRef = 0, bindRef = 0, bindidxRef = 0;
if (octopusRef == 0)
octopusRef = putName("octopus",7);
if (bindRef == 0)
- bindRef = putName("bind",4);
+ bindRef = putName("bind",4);
+ if (bindidxRef == 0)
+ bindidxRef = putName("bind_idxbat",11);
if( recycleBlk == 0 || reusePolicy == 0)
return 0;
@@ -93,6 +94,8 @@ static lng estimateSavings(MalBlkPtr mb,
lhs->len = 0;
}
}
+ maxparam = getArg(mb->stmt[0], mb->stmt[0]->argc - 1);
+ /* don't compare function parameters */
for (k = 0; k < mb->stop; k++){
p = getInstrPtr(mb,k);
@@ -112,20 +115,18 @@ static lng estimateSavings(MalBlkPtr mb,
(getModuleId(p) != getModuleId(q)))
continue;
- switch(reusePolicy){
+ if (p->argc < q->argc-1) continue;
+ /* sub-range instructions can be subsumed from entire
table */
- case REUSE_COVER:
- /* 1: check for subsumption : TODO*/
-
- case REUSE_EXACT:
- /* 2: exact covering */
- if (p->argc != q->argc-1) continue;
+ else if (p->argc == q->argc-1) { /* check for exact
match */
if ( bidtype == BID_TRANS ) j = p->retc + 1;
else j = p->retc;
- for ( ; j < p->argc; j++)
+ for ( ; j < p->argc; j++){
+ if (getArg(p,j) <= maxparam) continue;
if (VALcmp(&stk->stk[getArg(p,j)],
&getVarConstant(recycleBlk,getArg(q,j))))
goto nomatch;
+ }
/* found an exact match - get the results on
the stack */
for( j=0; j<p->retc; j++){
@@ -136,18 +137,23 @@ static lng estimateSavings(MalBlkPtr mb,
if ( bidtype == BID_TRANS )
savedKB +=
recycleBlk->profiler[i].wbytes;
else savedInstr++;
- goto nextinstr;
-
- nomatch:
+ break;
+ }
+ else { /* check for bind subsumption */
+ int nr_part = 0;
+ if ( bidtype != BID_TRANS )
continue;
+ for (j = p->retc + 1; j < 6; j++)
+ if ( VALcmp(&stk->stk[getArg(p,j)],
+ &getVarConstant(recycleBlk,
getArg(q,j))) )
+ goto nomatch;
+ nr_part = * (int*) getVarValue(mb, getArg(p,7));
+ savedKB +=
nr_part?recycleBlk->profiler[i].wbytes/nr_part : 0;
}
- } /* end loop over RP */
-
- /* processing of subsumed instruction: TODO */
-
- nextinstr:
- continue;
+ nomatch:
+ continue;
+ } /* end loop over RP */
}
/* clean up the phony stack */
diff --git a/monetdb5/optimizer/opt_recycler.mx
b/monetdb5/optimizer/opt_recycler.mx
--- a/monetdb5/optimizer/opt_recycler.mx
+++ b/monetdb5/optimizer/opt_recycler.mx
@@ -115,7 +115,7 @@ comment "Recycler marking and code injec
#include "mal_instruction.h"
static lng recycleSeq = 0; /* should become part of MAL block
basics */
-static bte baseTableMode = 0; /* only recycle base tables */
+static bte baseTableMode = 1; /* only recycle base tables */
static int
OPTrecycleImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
diff --git a/monetdb5/scheduler/run_octopus.c b/monetdb5/scheduler/run_octopus.c
--- a/monetdb5/scheduler/run_octopus.c
+++ b/monetdb5/scheduler/run_octopus.c
@@ -612,6 +612,12 @@ OCTOPUSmakeSchedule(Client cntxt, MalBlk
bid[j][k] = *(lng*) getArgReference(stk,pci,i);
}
+ for ( j = 0; j < tcnt; j++){
+ for ( k = 0; k < tcnt; k++)
+ mnstr_printf(cntxt->fdout, LLFMT" ", bid[j][k]);
+ mnstr_printf(cntxt->fdout, "\n");
+ }
+
/* compute schedule */
/* Round Robin
for ( j = 0; j < tcnt; j++)
@@ -626,6 +632,7 @@ OCTOPUSmakeSchedule(Client cntxt, MalBlk
pr = workers[sch[j]].pnum;
stk->stk[v].val.sval = GDKstrdup(peers[pr].uri);
stk->stk[v].len = (int) strlen(stk->stk[v].val.sval);
+ mnstr_printf(cntxt->fdout, "Tentacle %d scheduled on node %d:
%s\n", j+1, sch[j], peers[pr].uri);
}
for ( j= 0; j < tcnt; j++)
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list