OpenASIP  2.0
Private Member Functions | Private Attributes | Static Private Attributes | List of all members
MinimizeMachine Class Reference
Inheritance diagram for MinimizeMachine:
Inheritance graph
Collaboration diagram for MinimizeMachine:
Collaboration graph

Private Member Functions

 PLUGIN_DESCRIPTION ("Removes resources until the real time " "requirements of applications are not reached anymore.")
 
 MinimizeMachine ()
 
virtual bool requiresStartingPointArchitecture () const
 
virtual bool producesArchitecture () const
 
virtual bool requiresHDB () const
 
virtual bool requiresSimulationData () const
 
virtual std::vector< RowIDexplore (const RowID &configurationID, const unsigned int &)
 
void readParameters ()
 
RowID minimizeMachine (RowID confToMinimize)
 
RowID minimizeBuses (RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
 
RowID minimizeRegisterFiles (RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
 
RowID minimizeFunctionUnits (RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
 
bool evalNewConfigWithoutImplementation (DesignSpaceExplorer &explorer, const TTAMachine::Machine &mach, DSDBManager &dsdb, DSDBManager::MachineConfiguration &newConfiguration, RowID &confID, CostEstimates &newEstimates)
 
bool checkCycleCounts (const DSDBManager::MachineConfiguration &conf, const std::vector< ClockCycleCount > &maxCycleCounts)
 

Private Attributes

bool minBus_
 minimize busses More...
 
bool minFU_
 minimize function units More...
 
bool minRF_
 minimize register files More...
 
unsigned int frequency_
 running frequency in MHz for apps More...
 

Static Private Attributes

static const std::string minBusPN_
 
static const std::string minFUPN_
 
static const std::string minRFPN_
 
static const std::string frequencyPN_
 

Additional Inherited Members

- Public Types inherited from DesignSpaceExplorerPlugin
typedef std::pair< std::string, ExplorerPluginParameterParameter
 
typedef std::map< std::string, ExplorerPluginParameterParameterMap
 
typedef std::map< std::string, ExplorerPluginParameter >::iterator PMIt
 
typedef std::map< std::string, ExplorerPluginParameter >::const_iterator PMCIt
 
- Public Member Functions inherited from DesignSpaceExplorerPlugin
virtual bool requiresApplication () const
 
virtual std::string description () const
 
void addParameter (TCEString name, ExplorerPluginParameterType type, bool compulsory=true, TCEString defaultValue="", TCEString description="")
 
template<typename T >
void readCompulsoryParameter (const std::string paramName, T &param) const
 
template<typename T >
void readOptionalParameter (const std::string paramName, T &param) const
 
template<typename RT >
RT parameterValue (const std::string &paramName) const
 
virtual ~DesignSpaceExplorerPlugin ()
 
virtual void giveParameter (const std::string &name, const std::string &value)
 
virtual std::string name () const
 
virtual void setPluginName (const std::string &pluginName)
 
virtual bool hasParameter (const std::string &paramName) const
 
ParameterMap parameters () const
 
virtual bool booleanValue (const std::string &parameter) const
 
- Public Member Functions inherited from DesignSpaceExplorer
 DesignSpaceExplorer ()
 
virtual ~DesignSpaceExplorer ()
 
virtual void setDSDB (DSDBManager &dsdb)
 
virtual bool evaluate (const DSDBManager::MachineConfiguration &configuration, CostEstimates &results=dummyEstimate_, bool estimate=false)
 
virtual DSDBManagerdb ()
 
std::vector< DesignSpaceExplorerPlugin * > getPlugins ()
 
RowID createImplementationAndStore (const DSDBManager::MachineConfiguration &conf, const double &frequency=0.0, const double &maxArea=0.0, const bool &createEstimates=true, const std::string &icDec="DefaultICDecoder", const std::string &icDecHDB="asic_130nm_1.5V.hdb")
 
bool createImplementation (const DSDBManager::MachineConfiguration &conf, DSDBManager::MachineConfiguration &newConf, const double &frequency=0.0, const double &maxArea=0.0, const bool &createEstimates=true, const std::string &icDec="DefaultICDecoder", const std::string &icDecHDB="asic_130nm_1.5V.hdb")
 
IDF::MachineImplementationselectComponents (const TTAMachine::Machine &mach, const double &frequency=0.0, const double &maxArea=0.0, const std::string &icDec="DefaultICDecoder", const std::string &icDecHDB="asic_130nm_1.5V.hdb") const
 
void createEstimateData (const TTAMachine::Machine &mach, const IDF::MachineImplementation &idf, CostEstimator::AreaInGates &area, CostEstimator::DelayInNanoSeconds &longestPathDelay)
 
RowID addConfToDSDB (const DSDBManager::MachineConfiguration &conf)
 
- Static Public Member Functions inherited from DesignSpaceExplorer
static DesignSpaceExplorerPluginloadExplorerPlugin (const std::string &pluginName, DSDBManager *dsdb=NULL)
 
- Protected Member Functions inherited from DesignSpaceExplorerPlugin
 DesignSpaceExplorerPlugin ()
 
void checkParameters () const
 
- Protected Member Functions inherited from DesignSpaceExplorer
TTAProgram::Programschedule (const std::string applicationFile, TTAMachine::Machine &machine, TCEString paramOptions="-O3")
 
const ExecutionTracesimulate (const TTAProgram::Program &program, const TTAMachine::Machine &machine, const TestApplication &testApplication, const ClockCycleCount &maxCycles, ClockCycleCount &runnedCycles, const bool tracing, const bool useCompiledSimulation=false, std::vector< ClockCycleCount > *executionCounts=NULL)
 
- Protected Attributes inherited from DesignSpaceExplorerPlugin
std::string pluginName_
 the name of the explorer plugin More...
 
ParameterMap parameters_
 Parameters for the plugin. More...
 

Detailed Description

Explorer plugin that removes resources until the real time requirements of applications are not reached anymore.

@TODO: maxRunTime parameter, which overrides app dir max runtime setting @TODO: if no maxRunTime then no frequency is needed == no cycle count limits

Supported parameters:

Definition at line 70 of file MinimizeMachine.cc.

Constructor & Destructor Documentation

◆ MinimizeMachine()

MinimizeMachine::MinimizeMachine ( )
inlineprivate

Definition at line 74 of file MinimizeMachine.cc.

75  minBus_(true),
76  minFU_(true),
77  minRF_(true),
78  frequency_(0) {
79 
80  // compulsory parameters
82 
83  // parameters that have a default value
87  }

References BOOL, Conversion::toString(), and UINT.

Here is the call graph for this function:

Member Function Documentation

◆ checkCycleCounts()

bool MinimizeMachine::checkCycleCounts ( const DSDBManager::MachineConfiguration conf,
const std::vector< ClockCycleCount > &  maxCycleCounts 
)
inlineprivate

Checks that max cycle counts are not exceeded.

Expects that maxCycleCount vector contains cycle counts for the matching programs in the same order as the estimates.

Parameters
estimatesEstimations that contain cycle counts.
maxCycleCountsMaximum cycle counts of the applications.
Returns
true if maximum cycle counts are not exceeded, false otherwise.

Definition at line 701 of file MinimizeMachine.cc.

703  {
704 
705 
706  std::vector<ClockCycleCount> cycleCounts;
707  std::set<RowID> appIds = db().applicationIDs();
708  for (std::set<RowID>::const_iterator appI = appIds.begin();
709  appI != appIds.end(); ++appI) {
710  RowID appID = *appI;
711  if (!db().hasCycleCount(appID, conf.architectureID)) {
712  abortWithError("there was no cycle count?");
713  }
714  cycleCounts.push_back(
715  db().cycleCount(appID, conf.architectureID));
716  }
717 
718  for (int i = 0; i < (int)cycleCounts.size(); i++) {
719  // if no time constraints
720  if (maxCycleCounts.at(i) < 1) {
721  continue;
722  }
723  // if some apps maxCycles was exceeded
724  if (maxCycleCounts.at(i) < cycleCounts.at(i)) {
725  return false;
726  }
727  }
728  return true;
729  }

References abortWithError, and DSDBManager::MachineConfiguration::architectureID.

◆ evalNewConfigWithoutImplementation()

bool MinimizeMachine::evalNewConfigWithoutImplementation ( DesignSpaceExplorer explorer,
const TTAMachine::Machine mach,
DSDBManager dsdb,
DSDBManager::MachineConfiguration newConfiguration,
RowID confID,
CostEstimates newEstimates 
)
inlineprivate

Create, store and evaluate a new configuration without implementation.

Parameters
explorerDesign space explorer to use to evaluate.
machmachine for the new configuration.
dsdbDesign space database to store the new configuration.
newConfigurationNew machine configuration.
confIDRow ID of the new configuration in the DSDB.
newEstimatesEstimates that are calculated during evaluation.
Returns
true if evaluation succeed, if not, return false.

Definition at line 669 of file MinimizeMachine.cc.

672  {
673  try {
674  newConfiguration.architectureID = dsdb.addArchitecture(mach);
675  } catch (const RelationalDBException& e) {
676  // Error occurred while adding adf to the dsdb, adf
677  // probably too big
678  throw e;
679  }
680  newConfiguration.hasImplementation = false;
681 
682  try {
683  confID = dsdb.addConfiguration(newConfiguration);
684  } catch (const KeyNotFound& e) {
685  throw e;
686  }
687 
688  return explorer.evaluate(newConfiguration, newEstimates, false);
689  }

References DSDBManager::addArchitecture(), DSDBManager::addConfiguration(), DSDBManager::MachineConfiguration::architectureID, DesignSpaceExplorer::evaluate(), and DSDBManager::MachineConfiguration::hasImplementation.

Here is the call graph for this function:

◆ explore()

virtual std::vector<RowID> MinimizeMachine::explore ( const RowID configurationID,
const unsigned int &   
)
inlineprivatevirtual

Minimizes given configuration by not exceeding applications max runtime which depends on given frequncy

Reimplemented from DesignSpaceExplorerPlugin.

Definition at line 99 of file MinimizeMachine.cc.

99  {
100  std::vector<RowID> result;
101 
102  readParameters();
103 
104  // TODO: make better parameter error function
105  if (frequency_ < 1) {
106  result.push_back(configurationID);
107  return result;
108  }
109 
110  RowID min = minimizeMachine(configurationID);
111 
112  result.push_back(min);
113  return result;
114  }

◆ minimizeBuses()

RowID MinimizeMachine::minimizeBuses ( RowID  confToMinimize,
std::vector< ClockCycleCount > &  maxCycleCounts 
)
inlineprivate

Reduces the number of buses in the machine as much as possible to still achieve the application run time requirements.

This function can handle implementations. Uses binary search to minimize the buses.

Parameters
confToMinimizeID of the machine configuration which buses are reduced.
maxCycleCountsMax cycle counts per program.
Returns
ID of the new congiguration where buses are reduced.

Definition at line 228 of file MinimizeMachine.cc.

230  {
231 
232  DSDBManager& dsdb = db();
233 
234  DSDBManager::MachineConfiguration configuration =
235  dsdb.configuration(confToMinimize);
236 
237  TTAMachine::Machine* mach = NULL;
238  try {
239  mach = dsdb.architecture(configuration.architectureID);
240  } catch (const Exception& e) {
241  debugLog(std::string("No machine architecture found in config id "
242  "by MimimizeMachine plugin. "));
243  delete mach;
244  return confToMinimize;
245  }
246 
248 
249  // can't reduce buses from one
250  int origBusCount = busNav.count();
251  if (origBusCount < 2) {
252  return confToMinimize;
253  }
254 
255  DesignSpaceExplorer explorer;
256  explorer.setDSDB(dsdb);
257 
258  CostEstimates estimates;
259 
260  // new configuration must be created
262  startConf.architectureID = dsdb.addArchitecture(*mach);
263  startConf.hasImplementation = false;
264 
265  if (!explorer.evaluate(startConf, estimates, false)) {
266  delete mach;
267  mach = NULL;
268  // return the original conf
269  return confToMinimize;
270  }
271 
272  // check if some apps maxCycles was exceeded
273  if (!checkCycleCounts(startConf, maxCycleCounts)) {
274  delete mach;
275  mach = NULL;
276  // return the original conf
277  return confToMinimize;
278  }
279 
280  MachineResourceModifier modifier;
281 
282  // variables for binary search
283  int busHigh = origBusCount;
284  int busLow = 1;
285  int busMid = (busLow + busHigh) /2;
286 
287  TTAMachine::Machine* newMach = NULL;
288  RowID lastArchID = 0;
289  RowID lastConfID = 0;
290  RowID lastOKArchID = 0;
291  RowID lastOKConfID = 0;
292 
293  std::list<std::string> removedBusNames;
294 
295  // use binary search to find out the bus count that can be removed
296  // removes busses as long as each apps max cycle counts are not exceeded
297  // if buses are not of equal value this doesn't really work.
298  do {
299  assert(newMach == NULL);
300  newMach = new TTAMachine::Machine(*mach);
301 
302  int busesToRemove = (origBusCount - busMid);
303 
304  if (!modifier.removeBuses(busesToRemove, *newMach, removedBusNames)) {
305  // TODO: some good way to cope with non complete bus removal
306  }
307 
308  DSDBManager::MachineConfiguration newConfiguration;
309  try {
310  lastArchID = dsdb.addArchitecture(*newMach);
311  // machine stored to dsdb can be deleted
312  delete newMach;
313  newMach = NULL;
314  } catch (const RelationalDBException& e) {
315  // Error occurred while adding adf to the dsdb, adf
316  // probably too big
317  delete newMach;
318  newMach = NULL;
319  break;
320  }
321 
322  newConfiguration.architectureID = lastArchID;
323  newConfiguration.hasImplementation = false;
324  try {
325  lastConfID = dsdb.addConfiguration(newConfiguration);
326  } catch (const KeyNotFound& e) {
327  break;
328  }
329  CostEstimates newEstimates;
330 
331  bool newConfigOK = false;
332  if (explorer.evaluate(newConfiguration, newEstimates, false)) {
333  // goes through every apps new cycles
334  newConfigOK =
335  checkCycleCounts(newConfiguration, maxCycleCounts);
336  }
337 
338  if (newConfigOK) {
339  busHigh = busMid - 1;
340  busMid = (busLow + busMid) / 2;
341  lastOKArchID = lastArchID;
342  lastOKConfID = lastConfID;
343  } else {
344  busLow = busMid + 1;
345  busMid = (busMid + busHigh) / 2;
346  }
347  } while (busLow <= busHigh && busLow <= busMid);
348 
349  // these aren't needed anymore
350  lastArchID = 0;
351  lastConfID = 0;
352 
353  // delete old machine
354  delete mach;
355  mach = NULL;
356 
357  // check if no new architecture/config could be created
358  if (lastOKArchID == 0) {
359  return confToMinimize;
360  }
361 
362  // create new idf for the new machine if needed
363  if (configuration.hasImplementation) {
365  dsdb.implementation(configuration.implementationID);
366 
367  // remove removed busses from orginal implementation file
368  std::list<std::string>::const_iterator busNameIter =
369  removedBusNames.begin();
370  while (busNameIter != removedBusNames.end()) {
371  idf->removeBusImplementation(*busNameIter);
372  busNameIter++;
373  }
374 
375  DSDBManager::MachineConfiguration newConfiguration;
376  newConfiguration.architectureID = lastOKArchID;
377 
378  CostEstimates newEstimates;
379  if (explorer.evaluate(newConfiguration, newEstimates, false)) {
380  newConfiguration.implementationID =
381  dsdb.addImplementation(
382  *idf, newEstimates.longestPathDelay(),newEstimates.area());
383 
384  delete idf;
385  idf = NULL;
386 
387  newConfiguration.hasImplementation = true;
388  // add new configuration
389  RowID confID = dsdb.addConfiguration(newConfiguration);
390  return confID;
391  } else {
392  return confToMinimize;
393  }
394  } else {
395  return lastOKConfID;
396  }
397 
398  assert(false);
399  return 9999;
400  }

References DSDBManager::addArchitecture(), DSDBManager::addConfiguration(), DSDBManager::addImplementation(), DSDBManager::architecture(), DSDBManager::MachineConfiguration::architectureID, CostEstimates::area(), assert, TTAMachine::Machine::busNavigator(), DSDBManager::configuration(), TTAMachine::Machine::Navigator< ComponentType >::count(), debugLog, DesignSpaceExplorer::evaluate(), DSDBManager::MachineConfiguration::hasImplementation, DSDBManager::implementation(), DSDBManager::MachineConfiguration::implementationID, CostEstimates::longestPathDelay(), MachineResourceModifier::removeBuses(), IDF::MachineImplementation::removeBusImplementation(), and DesignSpaceExplorer::setDSDB().

Here is the call graph for this function:

◆ minimizeFunctionUnits()

RowID MinimizeMachine::minimizeFunctionUnits ( RowID  confToMinimize,
std::vector< ClockCycleCount > &  maxCycleCounts 
)
inlineprivate

Reduces the number of function units in the machine as much as possible to still achieve the application run time requirements.

This function won't handle implementations.

Parameters
confToMinimizeID of the machine configuration which function units are reduced.
maxCycleCountsMax cycle counts per program.
Returns
ID of the new congiguration where function units are reduced or same that was given if nothing was done.

Definition at line 544 of file MinimizeMachine.cc.

546  {
547 
548  DSDBManager& dsdb = db();
549  RowID latestConfID = 0;
550 
551  MachineResourceModifier modifier;
552  DesignSpaceExplorer explorer;
553  explorer.setDSDB(dsdb);
554 
555  DSDBManager::MachineConfiguration configuration =
556  dsdb.configuration(confToMinimize);
557 
558  const TTAMachine::Machine* origMach = NULL;
559  try {
560  origMach = dsdb.architecture(configuration.architectureID);
561  } catch (const Exception& e) {
562  debugLog(std::string("No machine architecture found in config id "
563  "by MimimizeMachine plugin. "));
564  delete origMach;
565  return confToMinimize;
566  }
567 
569  modifier.analyzeFunctionUnits(*origMach, origFUMap);
570 
571  CostEstimates estimates;
573  startConf.architectureID = dsdb.addArchitecture(*origMach);
574  startConf.hasImplementation = false;
575 
576  if (!explorer.evaluate(startConf, estimates, false)) {
577  // can't evaluate the given configuration
578  delete origMach;
579  origMach = NULL;
580  return confToMinimize;
581  }
582 
583  // check if some apps maxCycles was exceeded
584  if (!checkCycleCounts(startConf, maxCycleCounts)) {
585  delete origMach;
586  origMach = NULL;
587  return confToMinimize;
588  }
589 
590  MachineResourceModifier::FunctionUnitMap::const_iterator fuMapIter =
591  origFUMap.begin();
592 
593  ObjectState* currentState = origMach->saveState();
594 
595  // go through all different function unit types
596  for (; fuMapIter != origFUMap.end(); fuMapIter++) {
597  TTAMachine::Machine mach;
598  mach.loadState(currentState);
600  mach.functionUnitNavigator();
601  int i = 0;
602  // go through every function unit in the machine to find matching FU
603  while (i < fuNav.count()) {
604  if (((*fuMapIter).second)->isArchitectureEqual(
605  fuNav.item(i), true)) {
606 
607  mach.removeFunctionUnit(*fuNav.item(i));
608  std::list<std::string> socketList;
609  modifier.removeNotConnectedSockets(mach, socketList);
610 
611  DSDBManager::MachineConfiguration newConfiguration;
612  RowID confID = 0;
613  CostEstimates newEstimates;
614 
615  // if the evaluation fails the removed FU is needed
616  // and the old machine state is loaded
617  if (!evalNewConfigWithoutImplementation(explorer, mach,
618  dsdb, newConfiguration, confID, newEstimates)) {
619 
620  // continue with old machine state and
621  // try with next FU type
622  break;
623  }
624 
625  // goes through every apps new cycles
626  if (!checkCycleCounts(newConfiguration, maxCycleCounts)) {
627  // continue with old machine state and
628  // try with next register file type
629  break;
630  }
631  latestConfID = confID;
632 
633  // save the new machine state
634  delete currentState;
635  currentState = mach.saveState();
636 
637  // continue removing same FU type
638  // no need to advance the FU navigator,
639  // because of the removal
640  continue;
641  }
642  // if the units did not match, try next one in the machine
643  i++;
644  }
645  }
646  delete origMach;
647  origMach = NULL;
648  if (latestConfID != 0) {
649  return latestConfID;
650  } else {
651  // no new config could be created
652  return confToMinimize;
653  }
654  }

References DSDBManager::addArchitecture(), MachineResourceModifier::analyzeFunctionUnits(), DSDBManager::architecture(), DSDBManager::MachineConfiguration::architectureID, DSDBManager::configuration(), TTAMachine::Machine::Navigator< ComponentType >::count(), debugLog, DesignSpaceExplorer::evaluate(), TTAMachine::Machine::functionUnitNavigator(), DSDBManager::MachineConfiguration::hasImplementation, TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Machine::loadState(), TTAMachine::Machine::removeFunctionUnit(), MachineResourceModifier::removeNotConnectedSockets(), TTAMachine::Machine::saveState(), and DesignSpaceExplorer::setDSDB().

Here is the call graph for this function:

◆ minimizeMachine()

RowID MinimizeMachine::minimizeMachine ( RowID  confToMinimize)
inlineprivate

Minimizes the number of buses, function units and register files in the given configuration in that order.

This function minimizes the buses first, then function units and then register files. Removes also the extra sockets after minimization. Won't handle implementaions (IDF handling missing from fu and rf part).

Parameters
confToMinimizeConfiguration to be minimized.
maxCyclesMaximum clock cycle count that won't be exceeded.
Returns
Minimized configuration id.

Definition at line 157 of file MinimizeMachine.cc.

157  {
158 
159  // calculate maxCycleCounts for all apps
160  DSDBManager& dsdb = db();
161  std::vector<ClockCycleCount> maxCycleCounts;
162  std::set<RowID> applicationIDs = dsdb.applicationIDs();
163  std::set<RowID>::const_iterator applicationIter;
164  for (applicationIter = applicationIDs.begin();
165  applicationIter != applicationIDs.end();
166  applicationIter++) {
167 
168  TestApplication testApplication(
169  dsdb.applicationPath(*applicationIter));
170 
171  if (testApplication.maxRuntime() <= 0) {
172  maxCycleCounts.push_back(0);
173  } else {
174  maxCycleCounts.push_back(
175  static_cast<ClockCycleCount>(
176  testApplication.maxRuntime() *
177  static_cast<double>(frequency_) *
178  static_cast<double>(1000000)));
179  }
180  }
181 
182  RowID orgConfToMinimize = confToMinimize;
183  if (minBus_) {
184  confToMinimize = minimizeBuses(confToMinimize, maxCycleCounts);
185  CostEstimates res;
186  evaluate(dsdb.configuration(confToMinimize), res, true);
187  }
188 
189  if (minFU_) {
190  confToMinimize = minimizeFunctionUnits(
191  confToMinimize,
192  maxCycleCounts);
193  CostEstimates res;
194  evaluate(dsdb.configuration(confToMinimize), res, true);
195  }
196 
197  if (minRF_) {
198  confToMinimize = minimizeRegisterFiles(
199  confToMinimize,
200  maxCycleCounts);
201  CostEstimates res;
202  evaluate(dsdb.configuration(confToMinimize), res, true);
203  }
204 
205  if (orgConfToMinimize == confToMinimize) {
206  debugLog(
207  std::string("No new config could be generated by "
208  "MinimizeMachine plugin."));
209  }
210  CostEstimates res;
211  evaluate(dsdb.configuration(confToMinimize), res, true);
212  return confToMinimize;
213  }

References DSDBManager::applicationIDs(), DSDBManager::applicationPath(), DSDBManager::configuration(), debugLog, and TestApplication::maxRuntime().

Here is the call graph for this function:

◆ minimizeRegisterFiles()

RowID MinimizeMachine::minimizeRegisterFiles ( RowID  confToMinimize,
std::vector< ClockCycleCount > &  maxCycleCounts 
)
inlineprivate

Reduces the number of register files in the machine as much as possible to still achieve the application run time requirements.

This function won't handle implementations.

Parameters
confToMinimizeID of the machine configuration which register files are reduced.
maxCycleCountsMax cycle counts per program.
Returns
ID of the new congiguration where register files are reduced or same that was given if nothing was done.

Definition at line 414 of file MinimizeMachine.cc.

416  {
417 
418  DSDBManager& dsdb = db();
419  RowID latestConfID = 0;
420 
421  MachineResourceModifier modifier;
422  DesignSpaceExplorer explorer;
423  explorer.setDSDB(dsdb);
424 
425  DSDBManager::MachineConfiguration configuration =
426  dsdb.configuration(confToMinimize);
427 
428  const TTAMachine::Machine* origMach = NULL;
429  try {
430  origMach = dsdb.architecture(configuration.architectureID);
431  } catch (const Exception& e) {
432  debugLog(std::string("No machine architecture found in config id "
433  "by MimimizeMachine plugin. "));
434  delete origMach;
435  return confToMinimize;
436  }
437 
438  MachineResourceModifier::RegisterMap origRegisterMap;
439  modifier.analyzeRegisters(*origMach, origRegisterMap);
440 
441  CostEstimates estimates;
442 
444  startConf.architectureID = dsdb.addArchitecture(*origMach);
445  startConf.hasImplementation = false;
446 
447  // evaluates the desing with all dsdb apps
448  if (!explorer.evaluate(startConf, estimates, false)) {
449  // can't evaluate the given configuration
450  delete origMach;
451  origMach = NULL;
452  return confToMinimize;
453  }
454 
455  // check if some apps maxCycles was exceeded
456  if (!checkCycleCounts(startConf, maxCycleCounts)) {
457  delete origMach;
458  origMach = NULL;
459  return confToMinimize;
460  }
461 
462  MachineResourceModifier::RegisterMap::const_iterator registerMapIter =
463  origRegisterMap.begin();
464 
465  ObjectState* currentState = origMach->saveState();
466  // go through all different register file types
467  for (; registerMapIter != origRegisterMap.end(); registerMapIter++) {
468  TTAMachine::Machine mach;
469  mach.loadState(currentState);
471  mach.registerFileNavigator();
472 
473  int i = 0;
474  rfNav = mach.registerFileNavigator();
475  // go through every register file in the machine to find matching RF
476  while (i < rfNav.count()) {
477  if (((*registerMapIter).second)->isArchitectureEqual(
478  *rfNav.item(i))) {
479 
480  // remove the register file
481  mach.removeRegisterFile(*rfNav.item(i));
482  std::list<std::string> socketList;
483  modifier.removeNotConnectedSockets(mach, socketList);
484 
485  DSDBManager::MachineConfiguration newConfiguration;
486  RowID confID = 0;
487  CostEstimates newEstimates;
488 
489  // if the evaluation fails the removed RF is needed
490  // and the old machine state is loaded
491  if (!evalNewConfigWithoutImplementation(explorer, mach,
492  dsdb, newConfiguration, confID, newEstimates)) {
493 
494  // continue with old machine state and
495  // try with next register file type
496  break;
497  }
498 
499  // check every apps new cycle counts against
500  // maxCycleCounts
501  if (!checkCycleCounts(newConfiguration, maxCycleCounts)) {
502  // continue with old machine state and
503  // try with next register file type
504  break;
505  }
506  latestConfID = confID;
507 
508  // save the new machine state
509  delete currentState;
510  currentState = mach.saveState();
511 
512  // else continue removing same register types
513  // no need to advance the rf navigator,
514  // because of the removal
515  continue;
516  }
517  // if the registers did not match, try next one in the machine
518  i++;
519  }
520  }
521 
522  delete origMach;
523  origMach = NULL;
524  if (latestConfID != 0) {
525  return latestConfID;
526  } else {
527  // no new config could be created
528  return confToMinimize;
529  }
530  }

References DSDBManager::addArchitecture(), MachineResourceModifier::analyzeRegisters(), DSDBManager::architecture(), DSDBManager::MachineConfiguration::architectureID, DSDBManager::configuration(), TTAMachine::Machine::Navigator< ComponentType >::count(), debugLog, DesignSpaceExplorer::evaluate(), DSDBManager::MachineConfiguration::hasImplementation, TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Machine::loadState(), TTAMachine::Machine::registerFileNavigator(), MachineResourceModifier::removeNotConnectedSockets(), TTAMachine::Machine::removeRegisterFile(), TTAMachine::Machine::saveState(), and DesignSpaceExplorer::setDSDB().

Here is the call graph for this function:

◆ PLUGIN_DESCRIPTION()

MinimizeMachine::PLUGIN_DESCRIPTION ( "Removes resources until the real time " "requirements of applications are not reached anymore."  )
private

◆ producesArchitecture()

virtual bool MinimizeMachine::producesArchitecture ( ) const
inlineprivatevirtual

Implements DesignSpaceExplorerPlugin.

Definition at line 90 of file MinimizeMachine.cc.

90 { return true; }

◆ readParameters()

void MinimizeMachine::readParameters ( )
inlineprivate

Reads the parameters given to the plugin.

Definition at line 135 of file MinimizeMachine.cc.

◆ requiresHDB()

virtual bool MinimizeMachine::requiresHDB ( ) const
inlineprivatevirtual

Implements DesignSpaceExplorerPlugin.

Definition at line 91 of file MinimizeMachine.cc.

91 { return true; }

◆ requiresSimulationData()

virtual bool MinimizeMachine::requiresSimulationData ( ) const
inlineprivatevirtual

Implements DesignSpaceExplorerPlugin.

Definition at line 92 of file MinimizeMachine.cc.

92 { return false; }

◆ requiresStartingPointArchitecture()

virtual bool MinimizeMachine::requiresStartingPointArchitecture ( ) const
inlineprivatevirtual

Implements DesignSpaceExplorerPlugin.

Definition at line 89 of file MinimizeMachine.cc.

89 { return true; }

Member Data Documentation

◆ frequency_

unsigned int MinimizeMachine::frequency_
private

running frequency in MHz for apps

Definition at line 130 of file MinimizeMachine.cc.

◆ frequencyPN_

const std::string MinimizeMachine::frequencyPN_
staticprivate

Definition at line 121 of file MinimizeMachine.cc.

◆ minBus_

bool MinimizeMachine::minBus_
private

minimize busses

Definition at line 124 of file MinimizeMachine.cc.

◆ minBusPN_

const std::string MinimizeMachine::minBusPN_
staticprivate

Definition at line 118 of file MinimizeMachine.cc.

◆ minFU_

bool MinimizeMachine::minFU_
private

minimize function units

Definition at line 126 of file MinimizeMachine.cc.

◆ minFUPN_

const std::string MinimizeMachine::minFUPN_
staticprivate

Definition at line 119 of file MinimizeMachine.cc.

◆ minRF_

bool MinimizeMachine::minRF_
private

minimize register files

Definition at line 128 of file MinimizeMachine.cc.

◆ minRFPN_

const std::string MinimizeMachine::minRFPN_
staticprivate

Definition at line 120 of file MinimizeMachine.cc.


The documentation for this class was generated from the following file:
TTAMachine::Machine::removeFunctionUnit
virtual void removeFunctionUnit(FunctionUnit &unit)
Definition: Machine.cc:530
DesignSpaceExplorer::evaluate
virtual bool evaluate(const DSDBManager::MachineConfiguration &configuration, CostEstimates &results=dummyEstimate_, bool estimate=false)
Definition: DesignSpaceExplorer.cc:133
DesignSpaceExplorerPlugin::readCompulsoryParameter
void readCompulsoryParameter(const std::string paramName, T &param) const
MinimizeMachine::minimizeBuses
RowID minimizeBuses(RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
Definition: MinimizeMachine.cc:228
MachineResourceModifier::FunctionUnitMap
std::multimap< double, TTAMachine::FunctionUnit * > FunctionUnitMap
Map of function unit amounts in percents.
Definition: MachineResourceModifier.hh:56
DesignSpaceExplorer::db
virtual DSDBManager & db()
Definition: DesignSpaceExplorer.cc:300
MachineResourceModifier::removeBuses
bool removeBuses(const int &countToRemove, TTAMachine::Machine &mach, std::list< std::string > &removedBusNames)
Definition: MachineResourceModifier.cc:182
CostEstimates
Definition: CostEstimates.hh:57
RelationalDBException
Definition: Exception.hh:692
UINT
@ UINT
Definition: ExplorerPluginParameter.hh:40
DSDBManager::architecture
TTAMachine::Machine * architecture(RowID id) const
Definition: DSDBManager.cc:807
DSDBManager::MachineConfiguration::hasImplementation
bool hasImplementation
Definition: DSDBManager.hh:80
MinimizeMachine::frequency_
unsigned int frequency_
running frequency in MHz for apps
Definition: MinimizeMachine.cc:130
MinimizeMachine::minRF_
bool minRF_
minimize register files
Definition: MinimizeMachine.cc:128
MinimizeMachine::minimizeFunctionUnits
RowID minimizeFunctionUnits(RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
Definition: MinimizeMachine.cc:544
RowID
int RowID
Type definition of row ID in relational databases.
Definition: DBTypes.hh:37
DesignSpaceExplorerPlugin::DesignSpaceExplorerPlugin
DesignSpaceExplorerPlugin()
Definition: DesignSpaceExplorerPlugin.cc:48
MachineResourceModifier::RegisterMap
std::multimap< double, TTAMachine::RegisterFile * > RegisterMap
Map of register amounts in percents.
Definition: MachineResourceModifier.hh:54
ObjectState
Definition: ObjectState.hh:59
MachineResourceModifier
Definition: MachineResourceModifier.hh:49
TTAMachine::Machine::Navigator::count
int count() const
Conversion::toString
static std::string toString(const T &source)
TTAMachine::Machine::loadState
virtual void loadState(const ObjectState *state)
Definition: Machine.cc:728
MinimizeMachine::evalNewConfigWithoutImplementation
bool evalNewConfigWithoutImplementation(DesignSpaceExplorer &explorer, const TTAMachine::Machine &mach, DSDBManager &dsdb, DSDBManager::MachineConfiguration &newConfiguration, RowID &confID, CostEstimates &newEstimates)
Definition: MinimizeMachine.cc:669
BOOL
@ BOOL
Definition: ExplorerPluginParameter.hh:40
assert
#define assert(condition)
Definition: Application.hh:86
DSDBManager::MachineConfiguration::implementationID
RowID implementationID
Definition: DSDBManager.hh:81
DesignSpaceExplorerPlugin::readOptionalParameter
void readOptionalParameter(const std::string paramName, T &param) const
CostEstimates::longestPathDelay
double longestPathDelay() const
Definition: CostEstimates.cc:112
abortWithError
#define abortWithError(message)
Definition: Application.hh:72
DSDBManager::MachineConfiguration
Definition: DSDBManager.hh:78
MachineResourceModifier::analyzeFunctionUnits
void analyzeFunctionUnits(const TTAMachine::Machine &mach, FunctionUnitMap &unitMap) const
Definition: MachineResourceModifier.cc:554
TTAMachine::Machine::functionUnitNavigator
virtual FunctionUnitNavigator functionUnitNavigator() const
Definition: Machine.cc:380
CostEstimates::area
double area() const
Definition: CostEstimates.cc:101
TTAMachine::Machine::removeRegisterFile
virtual void removeRegisterFile(RegisterFile &unit)
Definition: Machine.cc:554
MinimizeMachine::readParameters
void readParameters()
Definition: MinimizeMachine.cc:135
TTAMachine::Machine::saveState
virtual ObjectState * saveState() const
Definition: Machine.cc:686
Exception
Definition: Exception.hh:54
DSDBManager
Definition: DSDBManager.hh:76
IDF::MachineImplementation::removeBusImplementation
void removeBusImplementation(const std::string &unitName)
Definition: MachineImplementation.cc:709
MinimizeMachine::minRFPN_
static const std::string minRFPN_
Definition: MinimizeMachine.cc:120
DSDBManager::addConfiguration
RowID addConfiguration(const MachineConfiguration &conf)
Definition: DSDBManager.cc:299
DSDBManager::addArchitecture
RowID addArchitecture(const TTAMachine::Machine &mom)
Definition: DSDBManager.cc:191
TTAMachine::Machine::registerFileNavigator
virtual RegisterFileNavigator registerFileNavigator() const
Definition: Machine.cc:450
DSDBManager::configuration
MachineConfiguration configuration(RowID id) const
Definition: DSDBManager.cc:361
MinimizeMachine::frequencyPN_
static const std::string frequencyPN_
Definition: MinimizeMachine.cc:121
MinimizeMachine::minFU_
bool minFU_
minimize function units
Definition: MinimizeMachine.cc:126
DesignSpaceExplorer::setDSDB
virtual void setDSDB(DSDBManager &dsdb)
Definition: DesignSpaceExplorer.cc:107
MinimizeMachine::minimizeMachine
RowID minimizeMachine(RowID confToMinimize)
Definition: MinimizeMachine.cc:157
MinimizeMachine::minFUPN_
static const std::string minFUPN_
Definition: MinimizeMachine.cc:119
TTAMachine::Machine::busNavigator
virtual BusNavigator busNavigator() const
Definition: Machine.cc:356
MinimizeMachine::minBus_
bool minBus_
minimize busses
Definition: MinimizeMachine.cc:124
DSDBManager::implementation
IDF::MachineImplementation * implementation(RowID id) const
Definition: DSDBManager.cc:887
ClockCycleCount
CycleCount ClockCycleCount
Alias for ClockCycleCount.
Definition: SimulatorConstants.hh:57
DesignSpaceExplorer
Definition: DesignSpaceExplorer.hh:70
TTAMachine::Machine::Navigator::item
ComponentType * item(int index) const
KeyNotFound
Definition: Exception.hh:285
DSDBManager::applicationPath
std::string applicationPath(RowID id) const
Definition: DSDBManager.cc:947
MachineResourceModifier::analyzeRegisters
void analyzeRegisters(const TTAMachine::Machine &mach, RegisterMap &registerMap) const
Definition: MachineResourceModifier.cc:410
debugLog
#define debugLog(text)
Definition: Application.hh:95
DSDBManager::MachineConfiguration::architectureID
RowID architectureID
Definition: DSDBManager.hh:79
MinimizeMachine::minBusPN_
static const std::string minBusPN_
Definition: MinimizeMachine.cc:118
TestApplication
Definition: TestApplication.hh:46
TTAMachine::Machine::Navigator
Definition: Machine.hh:186
DesignSpaceExplorerPlugin::addParameter
void addParameter(TCEString name, ExplorerPluginParameterType type, bool compulsory=true, TCEString defaultValue="", TCEString description="")
MinimizeMachine::minimizeRegisterFiles
RowID minimizeRegisterFiles(RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
Definition: MinimizeMachine.cc:414
MinimizeMachine::checkCycleCounts
bool checkCycleCounts(const DSDBManager::MachineConfiguration &conf, const std::vector< ClockCycleCount > &maxCycleCounts)
Definition: MinimizeMachine.cc:701
DSDBManager::addImplementation
RowID addImplementation(const IDF::MachineImplementation &impl, double longestPathDelay, CostEstimator::AreaInGates area)
Definition: DSDBManager.cc:252
IDF::MachineImplementation
Definition: MachineImplementation.hh:54
DSDBManager::applicationIDs
std::set< RowID > applicationIDs() const
Definition: DSDBManager.cc:1381
MachineResourceModifier::removeNotConnectedSockets
void removeNotConnectedSockets(TTAMachine::Machine &mach, std::list< std::string > &removedSocketNames)
Definition: MachineResourceModifier.cc:244
TTAMachine::Machine
Definition: Machine.hh:73