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

Reply via email to