//get an operator and execute it. //the status should be updated into the query plan. void QueryPlanTree::execute() { ThreadOp* resultOp=getNextOp();//---->get the first Op. ThreadOp* previousOp=resultOp; QueryPlanNode* curNode=(QueryPlanNode*)(nodeVec[curActiveNode]);//-->get the first node:>corresponding to first Op while(resultOp!=NULL) { //first, we get the type, next, we init the op. curNode=(QueryPlanNode*)(nodeVec[curActiveNode]); curNode->initOp(resultOp->execMode); //int timer=genTimer(0); resultOp->execute(); //getTimer(timer); //double t=getTimer(timer); deschedule: if(resultOp->execMode){ GPUBurdenDEC(AddGPUBurden_OP[resultOp->optType]); } else{ CPUBurdenDEC(AddCPUBurden_OP[resultOp->optType]); } curNode->PostExecution(resultOp->execMode); previousOp=resultOp; resultOp=getNextOp(); } //store the result; q_Rout=previousOp->Rout; q_numResult=previousOp->numResult; }
//get an operator and execute it. //the status should be updated into the query plan. void QueryPlanTree::execute(EXEC_MODE eM) { ThreadOp* resultOp=getNextOp(eM); ThreadOp* previousOp=resultOp; QueryPlanNode* curNode=(QueryPlanNode*)(nodeVec[curActiveNode]); EXEC_MODE tempEM=eM; while(resultOp!=NULL) { //first, we get the type, next, we init the op. curNode=(QueryPlanNode*)(nodeVec[curActiveNode]); //int timer=genTimer(curActiveNode); //genTimer(timer); curNode->initOp(eM); //double t=genTimer(timer); //printf("time spend in initOp is %lf\n",t); resultOp->execute(eM); curNode->PostExecution(eM); previousOp=resultOp; resultOp=getNextOp(eM); } //store the result; q_Rout=previousOp->Rout; q_numResult=previousOp->numResult; }
inline void stepCPU() { // Fetch opcode WORD op = getNextOp(); // Decipher opcode and call opcode function switch(op & 0xF000) { case 0x0000 : { switch(op & 0x000F) { case 0x0000: op00E0(op); break; case 0x000E: op00EE(op); break; } } break; case 0x1000 : op1NNN(op); break; case 0x2000 : op2NNN(op); break; case 0x3000 : op3XNN(op); break; case 0x4000 : op4XNN(op); break; case 0x5000 : op5XY0(op); break; case 0x6000 : op6XNN(op); break; case 0x7000 : op7XNN(op); break; case 0x8000 : { switch(op & 0x000F) { case 0x0000: op8XY0(op); break; case 0x0001: op8XY1(op); break; case 0x0002: op8XY2(op); break; case 0x0003: op8XY3(op); break; case 0x0004: op8XY4(op); break; case 0x0005: op8XY5(op); break; case 0x0006: op8XY6(op); break; case 0x0007: op8XY7(op); break; case 0x000E: op8XYE(op); break; } } break; case 0x9000 : op9XY0(op); break; case 0xA000 : opANNN(op); break; case 0xB000 : opBNNN(op); break; case 0xC000 : opCXNN(op); break; case 0xD000 : opDXYN(op); break; case 0xE000 : { switch(op & 0x000F) { case 0x000E : opEX9E(op); break; case 0x0001 : opEXA1(op); break; } } break; case 0xF000 : { switch(op & 0x000F) { case 0x0007 : opFX07(op); break; case 0x000A : opFX0A(op); break; case 0x0005 : { switch(op & 0x00F0) { case 0x0010 : opFX15(op); break; case 0x0050 : opFX55(op); break; case 0x0060 : opFX65(op); break; } } break; case 0x0008 : opFX18(op); break; case 0x000E : opFX1E(op); break; case 0x0009 : opFX29(op); break; case 0x0003 : opFX33(op); break; } } break; default: break; } }