void GlobalEventQueue::AddSystem( NVMain *subSystem, Config *config ) { double subSystemFrequency = config->GetEnergy( "CLK" ) * 1000000.0; EventQueue *queue = subSystem->GetEventQueue( ); bool eventDrivenSub = config->GetBool( "EventDriven" ); /* First subsystem decides if the entire system is event driven or not. */ if( eventQueues.empty( ) ) eventDriven = eventDrivenSub; if( eventDrivenSub != eventDriven ) { std::cout << "NVMain: Warning: Subsystem setting of event driven does not match parent!" << std::endl; if( eventDriven ) { std::cout << " Forcing subsystem to be event driven." << std::endl; config->SetBool( "EventDriven", true ); } else { std::cout << " Forcing subsystem to be execution driven." << std::endl; config->SetBool( "EventDriven", false ); } } assert( subSystemFrequency <= frequency ); /* * The CLK value in the config file is the frequency this subsystem should run at. * We aren't doing and checks here to make sure the input side (i.e. CPUFreq) is * corrent since we don't know what it should be. */ eventQueues.insert( std::pair<EventQueue*, double>(queue, subSystemFrequency) ); queue->SetFrequency( subSystemFrequency ); std::cout << "NVMain: GlobalEventQueue: Added a memory subsystem running at " << config->GetEnergy( "CLK" ) << "MHz. My frequency is " << (frequency / 1000000.0) << "MHz." << std::endl; }