Beispiel #1
0
void 
Process::executeProcess(){  
   IntVTime sendTime = dynamic_cast<const IntVTime&>(getSimulationTime());
   
   do { 
      PHOLDEvent* recvEvent = (PHOLDEvent*) getEvent();
    
      if( recvEvent != NULL ){
         ProcessState* myState = (ProcessState *) getState();
         myState->eventReceived();

         SimulationObject* receiver = getDestination(myState);

         // Generate the delay between the send and receive times.
         int ldelay = msgDelay();
         IntVTime recvTime = sendTime + 1 + ldelay;

         PHOLDEvent* newRequest = new PHOLDEvent(sendTime, recvTime, this, receiver);

         newRequest->numberOfHops = recvEvent->numberOfHops + 1;
         newRequest->eventNumber = recvEvent->eventNumber;

         computationGrain();

         receiver->receiveEvent(newRequest);
         myState->eventSent();
      }
   } while(haveMoreEvents() == true); // end of while loop
}
Beispiel #2
0
void
Process::initialize() {
   for (int i = 0; i < outputNames.size(); i++)
      outputHandles.push_back(getObjectHandle(outputNames[i]));

   // replace hotspots with their indexes in our output handles
   // delete hotspots that are not in our neighborhood
   vector<vector<int> >::iterator it(hotspots.begin());
   for(; it != hotspots.end(); ++it) {
     vector<int>::iterator iit((*it).begin());
     while(iit != (*it).end()) {
       int n = procNumToOutputNum(*iit);
       if(n < 0 || n >= numberOfOutputs)
         (*it).erase(iit);
       else
         *iit++ = n;
     }
   }

   ProcessState* myState = dynamic_cast<ProcessState *>( getState() );
   ASSERT(myState != NULL);

   delete myState->gen; // delete old copy
   myState->gen = new MLCG(processNumber, (processNumber + 1));
   for (int i = 0; i < myState->sizeOfStateData; i++) {
      myState->stateBulk[i] = '1';
   }

   // Process numbers have to be 0, 1, 2, ... to get a fully ordered
   // and sequenced set of event numbers in steps of 1.
   int eventNumberBase = numberOfTokens * processNumber;
   for(int i = 1; i <= numberOfTokens; i++ ) {
      IntVTime sendTime = dynamic_cast<const IntVTime&>(getSimulationTime());
      int ldelay = msgDelay();
      PHOLDEvent *event = new PHOLDEvent(sendTime, sendTime + 1 + ldelay, this, this);
      event->eventNumber = eventNumberBase + i;

      receiveEvent(event);
      myState->eventSent();
   }
}