167 for (set<RowID>::const_iterator i = applicationIDs.begin();
168 i != applicationIDs.end(); i++) {
187 if (applicationFile.length() < 1) {
195 "No program found from application dir '%s'")
196 % applicationPath).str());
200#if (!defined(HAVE_CXX11) && !defined(HAVE_CXX0X))
201 std::auto_ptr<TTAProgram::Program> scheduledProgram(
204 std::unique_ptr<TTAProgram::Program> scheduledProgram(
208 if (scheduledProgram.get() == NULL) {
217 bool hasFunctionsOfInterest =
219 std::vector<ClockCycleCount> instructionExecutionCounts;
226 *scheduledProgram, *adf, testApplication, 0,
227 totalCycleCount,
true,
false,
228 hasFunctionsOfInterest ? &instructionExecutionCounts
232 *scheduledProgram, *adf, testApplication, 0,
233 totalCycleCount,
false,
false,
234 hasFunctionsOfInterest ? &instructionExecutionCounts
241 string correctResult =
244 if (resultString != correctResult) {
245 std::cerr <<
"Simulation FAILED, possible bug in scheduler!"
247 std::cerr <<
"Architecture id in DSDB:" << std::endl;
249 std::cerr <<
"use sqlite3 to find out which configuration "
250 <<
"has that id to get the machine written to "
251 <<
"ADF." << std::endl;
254 std::cerr <<
"********** result found:" << std::endl;
255 std::cerr << resultString << std::endl;
256 std::cerr <<
"********** expected result:" << std::endl;
257 std::cerr << correctResult << std::endl;
258 std::cerr <<
"**********" << std::endl;
275 if (hasFunctionsOfInterest) {
277 size_t instructionCount =
278 scheduledProgram->instructionVector().size();
279 assert(instructionExecutionCounts.size() == instructionCount);
280 auto& interestingProcedures =
282 for (
const auto& procName : interestingProcedures) {
283 if (!scheduledProgram->hasProcedure(procName))
continue;
285 scheduledProgram->procedure(procName);
289 procCycles += instructionExecutionCounts[i];
293 <<
"[Procedure: " << procName
295 <<
" cc: " << procCycles <<
"] " << std::endl;
297 cycleCountOfInterest += procCycles;
309 *adf, *idf, *scheduledProgram, *traceDB);
312 result.
setEnergy(*scheduledProgram, programEnergy);
355 const std::string bytecodeFile,
364 if (
options->compilerOptions()) {
365 compilerOptions =
options->compilerOptionsString();
368 compilerOptions = paramOptions;
372 if (compilerOptions.find(
"-O") == std::string::npos) {
373 compilerOptions +=
" -O3";
381 std::string adf = tmpDir +
DS +
"mach.adf";
382 std::string tpef = tmpDir +
DS +
"program.tpef";
393 std::vector<std::string> tceccOutputLines;
395 std::string tceccCommand = tceccPath +
" "
396 + compilerOptions +
" --no-link -a " + adf +
" -o "
397 + tpef +
" " + bytecodeFile +
" --no-plugin-cache 2>&1";
403 if (debug && tceccOutputLines.size() > 0) {
404 for (
unsigned int i = 0; i < tceccOutputLines.size(); ++i) {
405 std::cout << tceccOutputLines.at(i) << std::endl;
412 std::cout <<
"failed command: " << tceccCommand << std::endl
413 <<
"temporary directory left for inspection at: "
414 << tmpDir << std::endl;
459 const bool useCompiledSimulation,
460 std::vector<ClockCycleCount>* instructionExecutionCounts) {
463 useCompiledSimulation ?
473 const string traceFile =
":memory:";
475 if (!useCompiledSimulation)
486 std::string command =
"";
498 if (interpreter.
result().size() > 0) {
508 if (interpreter.
result().size() > 0) {
521 if (interpreter.
result().size() > 0) {
528 int instructionCount =
program.instructionVector().size();
529 if (instructionExecutionCounts !=
nullptr) {
530 instructionExecutionCounts->resize(instructionCount, 0);
531 for (
int i = 0; i < instructionCount; ++i) {
532 (*instructionExecutionCounts)[i] =
548#pragma GCC diagnostic ignored "-Wstrict-aliasing"
567 const std::string& pluginName,
DSDBManager* dsdb) {
568 string pluginFileName = pluginName +
".so";
570 for (vector<string>::const_iterator iter = searchPaths.begin();
571 iter != searchPaths.end(); iter++) {
580 "create_explorer_plugin_" + pluginName, pluginCreator,
590#pragma GCC diagnostic warning "-Wstrict-aliasing"
598 std::vector<DesignSpaceExplorerPlugin*> plugins;
599 vector<string> found_plugins;
601 for (vector<string>::const_iterator iter = searchPaths.begin();
602 iter != searchPaths.end(); iter++) {
608 for (
unsigned int i = 0; i < found_plugins.size(); ++i) {
615 plugins.push_back(plugin);
638 const double& frequency,
639 const double& maxArea,
640 const bool& createEstimates,
641 const std::string& icDec,
642 const std::string& icDecHDB) {
654 if (createEstimates) {
692 const double& frequency,
693 const double& maxArea,
694 const bool& createEstimates,
695 const std::string& icDec,
696 const std::string& icDecHDB) {
708 if (createEstimates) {
739 const double& frequency,
740 const double& maxArea,
741 const std::string& icDec,
742 const std::string& icDecHDB)
const {
752 icDecHDB, frequency, maxArea);
#define assert(condition)
int RowID
Type definition of row ID in relational databases.
TTAMachine::Machine * machine
the architecture definition of the estimated processor
find Finds info of the inner loops in the program
static MachInfoCmdLineOptions options
#define SIM_INTERP_QUIT_COMMAND
The command used to quit the command line interface.
CycleCount ClockCycleCount
Alias for ClockCycleCount.
void writeMachine(const TTAMachine::Machine &machine)
static CmdLineOptions * cmdLineOptions()
static int runShellCommandAndGetOutput(const std::string &command, std::vector< std::string > &outputLines, std::size_t maxOutputLines=DEFAULT_MAX_OUTPUT_LINES, bool includeStdErr=false)
static bool increasedVerbose()
static int verboseLevel()
static std::ostream & logStream()
virtual std::string readLine(std::string prompt="")
virtual void setPromptPrinting(bool flag)
virtual void initialize(std::string defPrompt="", FILE *in=stdin, FILE *out=stdout, FILE *err=stderr)
IDF::MachineImplementation * selectComponents(const TTAMachine::Machine *mach, const std::string &icDecoder="ic_hdb", const std::string &icDecoderHDB="asic_130nm_1.5V.hdb", const double &frequency=0, const double &maxArea=0)
void setLongestPathDelay(double delay)
void setArea(double area)
void setEnergy(const TTAProgram::Program &program, double energy)
AreaInGates totalArea(const TTAMachine::Machine &machine, const IDF::MachineImplementation &machineImplementation)
area estimation functions
EnergyInMilliJoules totalEnergy(const TTAMachine::Machine &machine, const IDF::MachineImplementation &machineImplementation, const TTAProgram::Program &program, const ExecutionTrace &traceDB)
energy estimation functions
DelayInNanoSeconds longestPath(const TTAMachine::Machine &machine, const IDF::MachineImplementation &machineImplementation)
delay estimation functions
TTAMachine::Machine * architecture(RowID id) const
void setAreaEstimate(RowID implementation, CostEstimator::AreaInGates area)
std::set< RowID > applicationIDs() const
IDF::MachineImplementation * implementation(RowID id) const
void setUnschedulable(RowID application, RowID architecture)
void setLongestPathDelayEstimate(RowID implementation, double delay)
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 addCycleCount(RowID application, RowID architecture, ClockCycleCount count)
bool isUnschedulable(RowID application, RowID architecture) const
void addEnergyEstimate(RowID application, RowID implementation, double energyEstimate)
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")
DSDBManager * dsdb_
Design space database where results are stored.
RowID addConfToDSDB(const DSDBManager::MachineConfiguration &conf)
virtual void setDSDB(DSDBManager &dsdb)
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
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::vector< DesignSpaceExplorerPlugin * > getPlugins()
void createEstimateData(const TTAMachine::Machine &mach, const IDF::MachineImplementation &idf, CostEstimator::AreaInGates &area, CostEstimator::DelayInNanoSeconds &longestPathDelay)
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")
static CostEstimates dummyEstimate_
Used for the default evaluate() argument.
CostEstimator::Estimator estimator_
The estimator frontend.
virtual DSDBManager & db()
static DesignSpaceExplorerPlugin * loadExplorerPlugin(const std::string &pluginName, DSDBManager *dsdb=NULL)
virtual bool evaluate(const DSDBManager::MachineConfiguration &configuration, CostEstimates &results=dummyEstimate_, bool estimate=false)
TTAProgram::Program * schedule(const std::string applicationFile, TTAMachine::Machine &machine, TCEString paramOptions="-O3")
virtual ~DesignSpaceExplorer()
static PluginTools pluginTool_
The plugin tool.
std::ostringstream * oStream_
Output stream.
static std::string tceCompiler()
static std::vector< std::string > explorerPluginPaths()
std::string errorMessageStack(bool messagesOnly=false) const
std::string errorMessage() const
void setCause(const Exception &cause)
ClockCycleCount executionCount() const
static bool fileIsReadable(const std::string fileName)
static bool removeFileOrDirectory(const std::string &path)
static const std::string DIRECTORY_SEPARATOR
static bool findFromDirectory(const std::string ®ex, const std::string &directory, STLCONT &found)
static std::string createTempDirectory(const std::string &path="/tmp", const std::string &tempDirPrefix="tmp_tce_")
static std::string fileNameBody(const std::string &fileName)
static bool fileExists(const std::string fileName)
static void setOutputStream(std::ostream &newOutputStream)
virtual std::string result()
ExecutionTrace * lastTraceDB(int core=-1)
@ SIM_COMPILED
Compiled, faster simulation.
@ SIM_NORMAL
Default, interpreted simulation (debugging engine).
virtual void loadMachine(const std::string &fileName)
ClockCycleCount cycleCount() const
void forceTraceDBFileName(const std::string &fileName)
void setUtilizationDataSaving(bool value)
void setRFAccessTracing(bool value)
void setTimeout(unsigned int value)
virtual void loadProgram(const std::string &fileName)
const ExecutableInstruction & executableInstructionAt(InstructionAddress address) const
virtual void killSimulation()
void setExecutionTracing(bool value)
bool isQuitCommandGiven() const
InstructionAddress location() const
virtual Address endAddress() const
virtual int instructionCount() const
virtual Address startAddress() const
static Program * loadFromTPEF(const std::string &tpefFileName, const TTAMachine::Machine &theMachine)
virtual bool interpret(const std::string &commandLine)
bool hasCorrectOutput() const
const std::string correctOutput() const
bool hasSimulateTTASim() const
const std::string applicationPath() const
std::istream * simulateTTASim() const
bool hasFunctionsOfInterest() const
void setupSimulation() const
const std::vector< TCEString > & functionsOfInterest() const
void setDestinationFile(const std::string &fileName)
double AreaInGates
type for area values in equivalent gates
double DelayInNanoSeconds
type for propagation delays in nano seconds
double EnergyInMilliJoules
type for consumed energy in milli joules