Changeset: fab42ddc4495 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fab42ddc4495
Modified Files:
MonetDB5/src/optimizer/opt_octopus.mx
MonetDB5/src/scheduler/run_octopus.mx
Branch: default
Log Message:
More compact mal code generation by Octopus.
diffs (truncated from 437 to 300 lines):
diff -r 4b2f0780c9af -r fab42ddc4495 MonetDB5/src/optimizer/opt_octopus.mx
--- a/MonetDB5/src/optimizer/opt_octopus.mx Wed Aug 18 15:54:17 2010 +0200
+++ b/MonetDB5/src/optimizer/opt_octopus.mx Wed Aug 18 16:12:41 2010 +0200
@@ -243,11 +243,10 @@
}
static MalBlkPtr
-OPTtentacle(Client cntxt, MalBlkPtr mb, InstrPtr *old, InstrPtr pci, int
start, int idx, int v2,
-int tcnt, int *wnm, int *tnm, int **sch, int **res){
+OPTtentacle(Client cntxt, MalBlkPtr mb, InstrPtr *old, InstrPtr pci, int
start, int idx, int v2, int *wvar, int *tnm, int *res){
MalBlkPtr tm = NULL;
InstrPtr p = NULL, q = NULL, sig = old[0];
- int varid= pci->argv[idx],i,j,top=0, fnd, k;
+ int varid= pci->argv[idx],i,j,top=0, fnd;
char buf[BUFSIZ];
InstrPtr *list = (InstrPtr*) GDKzalloc(sizeof(InstrPtr) * mb->ssize);
char *needed= (char*) GDKzalloc(mb->vtop);
@@ -323,20 +322,17 @@
snprintf(buf,BUFSIZ,"exec_"LLFMT, mb->legid);
name2 = putName(buf,strlen(buf));
-/* generate tentacle CALLS: every tentacle is called once on each worker: tcnt
times */
- for ( k = 0; k < tcnt; k++ ){
- q= newStmt2(mb,octopusRef, name2);
- getArg(q,0) = res[tidx][k];
- setVarUDFtype(mb,getArg(q,0));
- q= pushArgument(mb,q,sch[tidx][k]);
- q= pushArgument(mb,q,wnm[k]);
- q= pushArgument(mb,q,tnm[tidx]);
- q= pushArgument(mb,q,v2);
- needed[varid]= 1;
- for (j= sig->retc; j < sig->argc; j++)
- q = pushArgument(mb,q,getArg(sig, j));
- }
-
+/* generate tentacle CALL: every tentacle is called once on the scheduled
worker */
+ q= newStmt2(mb,octopusRef, name2);
+ getArg(q,0) = res[tidx];
+ setVarUDFtype(mb,getArg(q,0));
+ q= pushArgument(mb,q,wvar[tidx]);
+ q= pushArgument(mb,q,tnm[tidx]);
+ q= pushArgument(mb,q,v2);
+ needed[varid]= 1;
+ for (j= sig->retc; j < sig->argc; j++)
+ q = pushArgument(mb,q,getArg(sig, j));
+
/* create the TENTACLE function */
name = (str) getVarValue(mb, tnm[tidx]);
putName(name,strlen(name));
@@ -345,7 +341,7 @@
tm= s->def;
tm->keephistory= mb->keephistory;
p= getInstrPtr(tm,0);
- for(i=q->retc+3; i<q->argc; i++){
+ for(i=q->retc+2; i<q->argc; i++){
alias[getArg(q,i)] = cloneVariable(tm,mb,getArg(q,i));
p= pushArgument(tm,p, alias[getArg(q,i)]);
}
@@ -412,9 +408,10 @@
int k,l, rexit, bs, tcnt=0;
char buf[BUFSIZ];
ValRecord cst;
- int *wnm=NULL,*tnm=NULL; /* array indices to var table where
workers and tentacle names are stored */
+ int *wnm=NULL,*tnm=NULL, *wvar=NULL;
+ /* array indices to var table where workers and tentacle names
are stored */
int **bid=NULL; /* array index to bids variables */
- int **sch=NULL, **res=NULL; /* array index to schedule variables
and results */
+ int *res=NULL; /* array index to result variables */
static str registerRef = 0;
if ( tentacle == NULL)
@@ -478,7 +475,7 @@
if( (getModuleId(p)== matRef && getFunctionId(p)== packRef) &&
i == target && tn + p->argc - p->retc < maxtn){
InstrPtr qq, mp;
- int conn,dbvar,qvar,schvar, resType, mpArgType;
+ int conn,dbvar,qvar, resType, mpArgType;
tcnt = p->argc - p->retc;
resType = getVarType(mb, getArg(p,0));
@@ -489,11 +486,9 @@
q= getInstrPtr(sm,0);
mpArgType = getArgType(mb,p,1);
setArgType(sm,q,0,mpArgType);
- schvar =
newVariable(sm,GDKstrdup("scheduled"),TYPE_bte);
dbvar= newVariable(sm,GDKstrdup("dbname"),TYPE_str);
qvar = newVariable(sm,GDKstrdup("query"),TYPE_str);
version= newVariable(sm,GDKstrdup("version"),TYPE_int);
- q= pushArgument(sm,q,schvar);
q= pushArgument(sm,q,dbvar);
q= pushArgument(sm,q,qvar);
q= pushArgument(sm,q,version);
@@ -519,31 +514,31 @@
cst.vtype = TYPE_str;
wnm = (int*) GDKzalloc(sizeof(int) * tcnt);
+ wvar = (int*) GDKzalloc(sizeof(int) * tcnt);
tnm = (int*) GDKzalloc(sizeof(int) * tcnt);
bid = (int**) GDKzalloc(sizeof(int*) * tcnt);
- sch = (int**) GDKzalloc(sizeof(int*) * tcnt);
- res = (int**) GDKzalloc(sizeof(int*) * tcnt);
+ res = (int*) GDKzalloc(sizeof(int*) * tcnt);
for ( j= 0; j < tcnt; j++){
snprintf(buf,BUFSIZ,"worker_%d",j);
cst.val.sval= GDKstrdup(buf);
cst.len= (int) strlen(cst.val.sval);
wnm[j] = defConstant(mb, TYPE_str, &cst);
-
+
+ wvar[j] =
newVariable(mb,GDKstrdup(buf),TYPE_str);
+
snprintf(buf,BUFSIZ,"tentacle_"LLFMT"_%d",
mb->legid,p->argv[j+1]);
cst.val.sval= GDKstrdup(buf);
cst.len= (int) strlen(cst.val.sval);
tnm[j] = defConstant(mb, TYPE_str, &cst);
bid[j] = (int*) GDKzalloc(sizeof(int) * tcnt);
- sch[j] = (int*) GDKzalloc(sizeof(int) * tcnt);
- res[j] = (int*) GDKzalloc(sizeof(int) * tcnt);
}
- for ( j= 0; j < tcnt; j++)
- for ( k= 0; k < tcnt; k++){
- r = newFcnCall(mb,octopusRef,
registerRef);
- r = pushArgument(mb,r,wnm[k]);
+ for ( k= 0; k < tcnt; k++){
+ r = newFcnCall(mb,octopusRef, registerRef);
+ r = pushArgument(mb,r,wnm[k]);
+ for ( j= 0; j < tcnt; j++)
r = pushArgument(mb,r,tnm[j]);
}
@@ -552,12 +547,17 @@
getArg(r,0) = rexit;
/* Generate bidding block */
- for ( j = 0; j < tcnt; j++)
- for ( k = 0; k < tcnt; k++){
- r = newAssignment(mb);
- setArgType(mb,r,0,TYPE_lng);
- pushLng(mb,r,(lng)-1);
- bid[j][k] = getArg(r,0);
+ for ( k = 0; k < tcnt; k++){
+ r = newAssignment(mb);
+ setArgType(mb, r, 0, TYPE_lng);
+ bid[0][k] = getArg(r, 0);
+ for ( j = 1; j < tcnt; j++){
+ bid[j][k] = newTmpVariable(mb,
TYPE_lng);
+ r = pushArgument(mb,r,bid[j][k]);
+ }
+ for ( j = 0; j < tcnt; j++)
+ r = pushLng(mb,r,(lng)-1);
+ r->retc = tcnt;
}
r = newStmt2(mb,schedulerRef,putName("bidding",7));
r->barrier = BARRIERsymbol;
@@ -584,16 +584,12 @@
/* Generate call to bid scheduling */
r = newStmt2(mb, schedulerRef, putName("makeSchedule",
12));
- setArgType(mb, r, 0, TYPE_bte);
- sch[0][0] = getArg(r, 0);
+ setArgType(mb, r, 0, TYPE_str);
+ getArg(r, 0) = wvar[0];
setVarUDFtype(mb, getArg(r, 0));
- for (j = 0; j < tcnt; j++)
- for (k = 0; k < tcnt; k++)
- if (j || k) {
- sch[j][k] = newTmpVariable(mb,
TYPE_bte);
- r = pushArgument(mb, r,
sch[j][k]);
- }
- r->retc = tcnt * tcnt;
+ for (j = 1; j < tcnt; j++)
+ r = pushReturn(mb, r, wvar[j]);
+
r = pushInt(mb, r, tcnt);
for (j = 0; j < tcnt; j++)
for (k = 0; k < tcnt; k++)
@@ -601,19 +597,18 @@
/* Execution block */
/* Initialize result variables */
- for (j = 0; j < tcnt; j++)
- for (k = 0; k < tcnt; k++) {
- if (isaBatType(mpArgType)) {
- r = newFcnCall(mb, batRef,
newRef);
- r = pushType(mb, r,
getHeadType(mpArgType));
- r = pushType(mb, r,
getTailType(mpArgType));
- } else {
- r = newAssignment(mb);
- r = pushNil(mb, r, mpArgType);
- }
- setArgType(mb, r, 0, mpArgType);
- res[j][k] = getArg(r, 0);
+ for (j = 0; j < tcnt; j++) {
+ if (isaBatType(mpArgType)) {
+ r = newFcnCall(mb, batRef, newRef);
+ r = pushType(mb, r,
getHeadType(mpArgType));
+ r = pushType(mb, r,
getTailType(mpArgType));
+ } else {
+ r = newAssignment(mb);
+ r = pushNil(mb, r, mpArgType);
}
+ setArgType(mb, r, 0, mpArgType);
+ res[j] = getArg(r, 0);
+ }
/* barrier (go,version):= scheduler.octopus(timeout); */
qq = q = newStmt(mb, schedulerRef, octopusRef);
@@ -625,7 +620,7 @@
q->barrier = BARRIERsymbol;
for (j = p->retc; j < p->argc; j++)
- tentacle[tn++] = OPTtentacle(cntxt, mb, old, p,
i - 1, j, v2, tcnt, wnm, tnm, sch, res);
+ tentacle[tn++] = OPTtentacle(cntxt, mb, old, p,
i - 1, j, v2, wvar, tnm, res);
/* exit c; */
q = newAssignment(mb);
@@ -657,20 +652,17 @@
}
getArg(q, 0) = getArg(getInstrPtr(sm, 0), 0);
- /* barrier cond:= calc.>(i,0); */
+ /* barrier cond:= calc.>(i,0);
r = newFcnCall(sm,calcRef,putName(">",1));
r->barrier = BARRIERsymbol;
rexit = getArg(r,0);
setArgType(sm,r,0,TYPE_bit);
r = pushArgument(sm,r,schvar);
- r = pushBte(sm,r,0);
+ r = pushBte(sm,r,0); */
q = newStmt(sm, octopusRef,connectRef);
conn= getArg(q,0);
q = pushArgument(sm, q, dbvar);
-/* q= pushStr(sm,q,"monetdb");
- q= pushStr(sm,q,"monetdb");
- q= pushStr(sm,q,"msql"); */
/* v:= remote.put(conn,version) */
q= newFcnCall(sm,remoteRef,putRef);
@@ -717,8 +709,7 @@
/* catch and propagate errors */
newCatchStmt(sm, "ANYexception");
-/* q = newStmt(sm, remoteRef,disconnectRef);
- pushArgument(sm,q,conn); */
+
newRaiseStmt(sm,"ANYexception");
newExitStmt(sm, "ANYexception");
@@ -731,10 +722,6 @@
getArg(q,0)= getArg(getInstrPtr(sm,0),0);
pushArgument(sm,q,l);
- r = newAssignment(sm);
- r->barrier= EXITsymbol;
- getArg(r,0) = rexit;
-
/* return exec_qry; */
q= newAssignment(sm);
q->barrier= RETURNsymbol;
@@ -806,11 +793,8 @@
GDKfree(tnm);
for ( j= 0; j < tcnt; j++){
GDKfree(bid[j]);
- GDKfree(sch[j]);
- GDKfree(res[j]);
}
GDKfree(bid);
- GDKfree(sch);
GDKfree(res);
GDKfree(old);
GDKfree(tentacle);
diff -r 4b2f0780c9af -r fab42ddc4495 MonetDB5/src/scheduler/run_octopus.mx
--- a/MonetDB5/src/scheduler/run_octopus.mx Wed Aug 18 15:54:17 2010 +0200
+++ b/MonetDB5/src/scheduler/run_octopus.mx Wed Aug 18 16:12:41 2010 +0200
@@ -65,7 +65,7 @@
address OCTOPUSdiscoverRegister
comment "Discover workers and register tentacles.";
-pattern octopus.register(dbname:str,fname:str):void
+pattern octopus.register(dbname:str,fname:str...):void
address OCTOPUSregister
comment "Register mal function fname at server dbname.";
@@ -77,7 +77,7 @@
address OCTOPUSbidding
comment "Collect bids from workers.";
-pattern scheduler.makeSchedule(:int,:lng...):bte...
+pattern scheduler.makeSchedule(:int,:lng...):str...
address OCTOPUSmakeSchedule
comment "Make schedule based on bids.";
@@ -348,9 +348,11 @@
if ( p->token == NOOPsymbol )
return 1;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list