72 "requirements of applications are not reached anymore.");
98 virtual std::vector<RowID>
100 std::vector<RowID> result;
106 result.push_back(configurationID);
112 result.push_back(min);
161 std::vector<ClockCycleCount> maxCycleCounts;
163 std::set<RowID>::const_iterator applicationIter;
164 for (applicationIter = applicationIDs.begin();
165 applicationIter != applicationIDs.end();
172 maxCycleCounts.push_back(0);
174 maxCycleCounts.push_back(
178 static_cast<double>(1000000)));
182 RowID orgConfToMinimize = confToMinimize;
184 confToMinimize =
minimizeBuses(confToMinimize, maxCycleCounts);
205 if (orgConfToMinimize == confToMinimize) {
207 std::string(
"No new config could be generated by "
208 "MinimizeMachine plugin."));
212 return confToMinimize;
229 RowID confToMinimize,
230 std::vector<ClockCycleCount>& maxCycleCounts) {
241 debugLog(std::string(
"No machine architecture found in config id "
242 "by MimimizeMachine plugin. "));
244 return confToMinimize;
250 int origBusCount = busNav.
count();
251 if (origBusCount < 2) {
252 return confToMinimize;
265 if (!explorer.
evaluate(startConf, estimates,
false)) {
269 return confToMinimize;
277 return confToMinimize;
283 int busHigh = origBusCount;
285 int busMid = (busLow + busHigh) /2;
288 RowID lastArchID = 0;
289 RowID lastConfID = 0;
290 RowID lastOKArchID = 0;
291 RowID lastOKConfID = 0;
293 std::list<std::string> removedBusNames;
302 int busesToRemove = (origBusCount - busMid);
304 if (!modifier.
removeBuses(busesToRemove, *newMach, removedBusNames)) {
331 bool newConfigOK =
false;
332 if (explorer.
evaluate(newConfiguration, newEstimates,
false)) {
339 busHigh = busMid - 1;
340 busMid = (busLow + busMid) / 2;
341 lastOKArchID = lastArchID;
342 lastOKConfID = lastConfID;
345 busMid = (busMid + busHigh) / 2;
347 }
while (busLow <= busHigh && busLow <= busMid);
358 if (lastOKArchID == 0) {
359 return confToMinimize;
368 std::list<std::string>::const_iterator busNameIter =
369 removedBusNames.begin();
370 while (busNameIter != removedBusNames.end()) {
379 if (explorer.
evaluate(newConfiguration, newEstimates,
false)) {
392 return confToMinimize;
415 RowID confToMinimize,
416 std::vector<ClockCycleCount>& maxCycleCounts) {
419 RowID latestConfID = 0;
432 debugLog(std::string(
"No machine architecture found in config id "
433 "by MimimizeMachine plugin. "));
435 return confToMinimize;
448 if (!explorer.
evaluate(startConf, estimates,
false)) {
452 return confToMinimize;
459 return confToMinimize;
462 MachineResourceModifier::RegisterMap::const_iterator registerMapIter =
463 origRegisterMap.begin();
467 for (; registerMapIter != origRegisterMap.end(); registerMapIter++) {
476 while (i < rfNav.
count()) {
477 if (((*registerMapIter).second)->isArchitectureEqual(
482 std::list<std::string> socketList;
492 dsdb, newConfiguration, confID, newEstimates)) {
506 latestConfID = confID;
524 if (latestConfID != 0) {
528 return confToMinimize;
545 RowID confToMinimize,
546 std::vector<ClockCycleCount>& maxCycleCounts) {
549 RowID latestConfID = 0;
562 debugLog(std::string(
"No machine architecture found in config id "
563 "by MimimizeMachine plugin. "));
565 return confToMinimize;
576 if (!explorer.
evaluate(startConf, estimates,
false)) {
580 return confToMinimize;
587 return confToMinimize;
590 MachineResourceModifier::FunctionUnitMap::const_iterator fuMapIter =
596 for (; fuMapIter != origFUMap.end(); fuMapIter++) {
603 while (i < fuNav.
count()) {
604 if (((*fuMapIter).second)->isArchitectureEqual(
605 fuNav.
item(i),
true)) {
608 std::list<std::string> socketList;
618 dsdb, newConfiguration, confID, newEstimates)) {
631 latestConfID = confID;
648 if (latestConfID != 0) {
652 return confToMinimize;
688 return explorer.
evaluate(newConfiguration, newEstimates,
false);
703 const std::vector<ClockCycleCount>& maxCycleCounts) {
706 std::vector<ClockCycleCount> cycleCounts;
708 for (std::set<RowID>::const_iterator appI = appIds.begin();
709 appI != appIds.end(); ++appI) {
714 cycleCounts.push_back(
718 for (
int i = 0; i < (int)cycleCounts.size(); i++) {
720 if (maxCycleCounts.at(i) < 1) {
724 if (maxCycleCounts.at(i) < cycleCounts.at(i)) {
#define abortWithError(message)
#define assert(condition)
int RowID
Type definition of row ID in relational databases.
#define EXPORT_DESIGN_SPACE_EXPLORER_PLUGIN(PLUGIN_NAME__)
CycleCount ClockCycleCount
Alias for ClockCycleCount.
static std::string toString(const T &source)
double longestPathDelay() const
RowID addArchitecture(const TTAMachine::Machine &mom)
TTAMachine::Machine * architecture(RowID id) const
std::set< RowID > applicationIDs() const
IDF::MachineImplementation * implementation(RowID id) const
MachineConfiguration configuration(RowID id) const
std::string applicationPath(RowID id) const
RowID addImplementation(const IDF::MachineImplementation &impl, double longestPathDelay, CostEstimator::AreaInGates area)
bool hasCycleCount(RowID application, RowID architecture) const
RowID addConfiguration(const MachineConfiguration &conf)
void readCompulsoryParameter(const std::string paramName, T ¶m) const
void readOptionalParameter(const std::string paramName, T ¶m) const
void addParameter(TCEString name, ExplorerPluginParameterType type, bool compulsory=true, TCEString defaultValue="", TCEString description="")
virtual void setDSDB(DSDBManager &dsdb)
virtual DSDBManager & db()
virtual bool evaluate(const DSDBManager::MachineConfiguration &configuration, CostEstimates &results=dummyEstimate_, bool estimate=false)
void removeBusImplementation(const std::string &unitName)
std::multimap< double, TTAMachine::RegisterFile * > RegisterMap
Map of register amounts in percents.
bool removeBuses(const int &countToRemove, TTAMachine::Machine &mach, std::list< std::string > &removedBusNames)
std::multimap< double, TTAMachine::FunctionUnit * > FunctionUnitMap
Map of function unit amounts in percents.
void analyzeRegisters(const TTAMachine::Machine &mach, RegisterMap ®isterMap) const
void analyzeFunctionUnits(const TTAMachine::Machine &mach, FunctionUnitMap &unitMap) const
void removeNotConnectedSockets(TTAMachine::Machine &mach, std::list< std::string > &removedSocketNames)
unsigned int frequency_
running frequency in MHz for apps
RowID minimizeBuses(RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
static const std::string frequencyPN_
bool checkCycleCounts(const DSDBManager::MachineConfiguration &conf, const std::vector< ClockCycleCount > &maxCycleCounts)
RowID minimizeMachine(RowID confToMinimize)
virtual bool producesArchitecture() const
static const std::string minBusPN_
virtual bool requiresSimulationData() const
RowID minimizeRegisterFiles(RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
virtual bool requiresHDB() const
RowID minimizeFunctionUnits(RowID confToMinimize, std::vector< ClockCycleCount > &maxCycleCounts)
static const std::string minRFPN_
virtual std::vector< RowID > explore(const RowID &configurationID, const unsigned int &)
bool evalNewConfigWithoutImplementation(DesignSpaceExplorer &explorer, const TTAMachine::Machine &mach, DSDBManager &dsdb, DSDBManager::MachineConfiguration &newConfiguration, RowID &confID, CostEstimates &newEstimates)
bool minRF_
minimize register files
bool minBus_
minimize busses
PLUGIN_DESCRIPTION("Removes resources until the real time " "requirements of applications are not reached anymore.")
static const std::string minFUPN_
bool minFU_
minimize function units
virtual bool requiresStartingPointArchitecture() const
ComponentType * item(int index) const
virtual RegisterFileNavigator registerFileNavigator() const
virtual FunctionUnitNavigator functionUnitNavigator() const
virtual BusNavigator busNavigator() const
virtual void loadState(const ObjectState *state)
virtual ObjectState * saveState() const
virtual void removeFunctionUnit(FunctionUnit &unit)
virtual void removeRegisterFile(RegisterFile &unit)
Runtime maxRuntime() const