|
typedef std::pair< std::string, ExplorerPluginParameter > | Parameter |
|
typedef std::map< std::string, ExplorerPluginParameter > | ParameterMap |
|
typedef std::map< std::string, ExplorerPluginParameter >::iterator | PMIt |
|
typedef std::map< std::string, ExplorerPluginParameter >::const_iterator | PMCIt |
|
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 ¶m) const |
|
template<typename T > |
void | readOptionalParameter (const std::string paramName, T ¶m) const |
|
template<typename RT > |
RT | parameterValue (const std::string ¶mName) 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 ¶mName) const |
|
ParameterMap | parameters () const |
|
virtual bool | booleanValue (const std::string ¶meter) const |
|
| DesignSpaceExplorer () |
|
virtual | ~DesignSpaceExplorer () |
|
virtual void | setDSDB (DSDBManager &dsdb) |
|
virtual bool | evaluate (const DSDBManager::MachineConfiguration &configuration, CostEstimates &results=dummyEstimate_, bool estimate=false) |
|
virtual DSDBManager & | db () |
|
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::MachineImplementation * | selectComponents (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 DesignSpaceExplorerPlugin * | loadExplorerPlugin (const std::string &pluginName, DSDBManager *dsdb=NULL) |
|
| DesignSpaceExplorerPlugin () |
|
void | checkParameters () const |
|
TTAProgram::Program * | schedule (const std::string applicationFile, TTAMachine::Machine &machine, TCEString paramOptions="-O3") |
|
const ExecutionTrace * | simulate (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) |
|
std::string | pluginName_ |
| the name of the explorer plugin More...
|
|
ParameterMap | parameters_ |
| Parameters for the plugin. More...
|
|
Explorer plugin that optimizes the interconnection network by removing connections with least effect to the cycle count first.
1) Sweeps through the buses in order. 2) For each bus, tries to remove each connection one-by-one, and evaluates the effect to the cycle count. The one with the least effect is removed first. The process is repeated until the minimum cycle count increase crosses an user-defined threshold, or the program becomes unschedulable. Emphasize RF port connections as they tend to get to the longest path due to the register selection logic being in the same path. 3) After that, the next bus is tried similarly, until either all the buses have been optimized this way. 4) The DSDB can be queried with the connection count as the first measure, the cycle count the second with both as small as possible.
Definition at line 95 of file ConnectionSweeper.cc.
virtual std::vector<RowID> ConnectionSweeper::explore |
( |
const RowID & |
startPointConfigurationID, |
|
|
const unsigned int & |
maxIter |
|
) |
| |
|
inlineprivatevirtual |
Explores the design space from the starting point machine and returns best exploring results as configuration IDs.
Exploring creates new machine configurations (architecture, implementation) that are ordered so that the best results are first in the result vector.
- Parameters
-
startPoint | Starting point machine configuration for the plugin. |
maxIter | Maximum number of design space points the plugin is allowed to explore. Default value for maxIter is zero when the iteration number is not taken into account. In that case the exploration runs indefinetly or stops at a point defined by the algorithm. |
- Returns
- Ordered vector of IDs of the best machine configurations where the target programs can be successfully run. The IDs of the best machine configurations are first in the result vector. Returns an empty vector if does not find any possible machine configurations.
Reimplemented from DesignSpaceExplorerPlugin.
Definition at line 118 of file ConnectionSweeper.cc.
132 for (std::set<RowID>::const_iterator appI = appIds.begin();
133 appI != appIds.end(); ++appI) {
137 bool success =
evaluate(startConf, estimates,
false);
141 "Could not evaluate the starting point arch.");
148 s <<
"app: " << appID <<
" original cycles: ";
154 std::vector<RowID> result;
159 const int thresholdStep =
166 s <<
"### Testing max worsening threshold "
171 s =
"### Reducing register file and immediate unit connections.";
173 std::list<RowID> rfSweepResults =
174 sweepRFs(startPointConfigurationID);
176 if (rfSweepResults.size() == 0)
break;
178 RowID bestFromRFSweep = rfSweepResults.front();
179 result.insert(result.begin(), bestFromRFSweep);
181 s =
"### Reducing bypass connections.";
184 std::list<RowID> bypassSweepResults =
186 if (bypassSweepResults.size() == 0)
break;
188 RowID bestFromBPSweep = rfSweepResults.front();
189 result.insert(result.begin(), bestFromBPSweep);
References __func__, DSDBManager::applicationIDs(), DSDBManager::architecture(), DSDBManager::MachineConfiguration::architectureID, assert, DSDBManager::configuration(), DSDBManager::cycleCount(), DSDBManager::hasCycleCount(), MachineConnectivityCheck::totalConnectionCount(), and verboseLog.
std::list<RowID> ConnectionSweeper::sweepBypasses |
( |
RowID |
startPointConfigurationID | ) |
|
|
inlineprivate |
Sweeps the bypass connections, that is, everything else but the register file and immediate unit connections.
Definition at line 277 of file ConnectionSweeper.cc.
286 std::list<RowID> result;
293 std::vector<const TTAMachine::Connection*> connections;
300 bool rfConnection =
false;
305 for (
int portI = 0; portI < conn.
socket()->portCount();
322 for (
int portI = 0; portI < conn.
socket()->portCount();
332 if (!rfConnection) connections.push_back(&conn);
339 verboseLog(
"trying the connections one-by-one\n");
343 if (newConfs.size() > 0) {
345 for (std::list<RowID>::reverse_iterator i = newConfs.rbegin();
346 i != newConfs.rend(); ++i) {
347 result.insert(result.begin(), *i);
References DSDBManager::MachineConfiguration::architectureID, TTAMachine::Machine::busNavigator(), TTAMachine::Segment::connection(), TTAMachine::Segment::connectionCount(), TTAMachine::Machine::immediateUnitNavigator(), TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Component::name(), TTAMachine::Port::parentUnit(), TTAMachine::Socket::port(), TTAMachine::Machine::registerFileNavigator(), TTAMachine::Bus::segment(), TTAMachine::Connection::socket(), and verboseLog.