//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;
}
Ejemplo n.º 3
0
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; 
    }
}