simulator.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef SIMULATOR_H
  2. #define SIMULATOR_H
  3. #include "config.h"
  4. #include "log.h"
  5. #include "inst_mode.h"
  6. class _Thread;
  7. class SyscallServer;
  8. class SyncServer;
  9. class MagicServer;
  10. class ClockSkewMinimizationServer;
  11. class StatsManager;
  12. class Transport;
  13. class CoreManager;
  14. class Thread;
  15. class ThreadManager;
  16. class ThreadStatsManager;
  17. class SimThreadManager;
  18. class HooksManager;
  19. class ClockSkewMinimizationManager;
  20. class FastForwardPerformanceManager;
  21. class TraceManager;
  22. class DvfsManager;
  23. class SamplingManager;
  24. class FaultinjectionManager;
  25. class TagsManager;
  26. class RoutineTracer;
  27. class MemoryTracker;
  28. namespace config { class Config; }
  29. class Simulator
  30. {
  31. public:
  32. Simulator();
  33. ~Simulator();
  34. void start();
  35. static Simulator* getSingleton() { return m_singleton; }
  36. static void setConfig(config::Config * cfg, Config::SimulationMode mode);
  37. static void allocate();
  38. static void release();
  39. SyscallServer* getSyscallServer() { return m_syscall_server; }
  40. SyncServer* getSyncServer() { return m_sync_server; }
  41. MagicServer* getMagicServer() { return m_magic_server; }
  42. ClockSkewMinimizationServer* getClockSkewMinimizationServer() { return m_clock_skew_minimization_server; }
  43. CoreManager *getCoreManager() { return m_core_manager; }
  44. SimThreadManager *getSimThreadManager() { return m_sim_thread_manager; }
  45. ThreadManager *getThreadManager() { return m_thread_manager; }
  46. ClockSkewMinimizationManager *getClockSkewMinimizationManager() { return m_clock_skew_minimization_manager; }
  47. FastForwardPerformanceManager *getFastForwardPerformanceManager() { return m_fastforward_performance_manager; }
  48. Config *getConfig() { return &m_config; }
  49. config::Config *getCfg() {
  50. //if (! m_config_file_allowed)
  51. // LOG_PRINT_ERROR("getCfg() called after init, this is not nice\n");
  52. return m_config_file;
  53. }
  54. void hideCfg() { m_config_file_allowed = false; }
  55. StatsManager *getStatsManager() { return m_stats_manager; }
  56. ThreadStatsManager *getThreadStatsManager() { return m_thread_stats_manager; }
  57. DvfsManager *getDvfsManager() { return m_dvfs_manager; }
  58. HooksManager *getHooksManager() { return m_hooks_manager; }
  59. SamplingManager *getSamplingManager() { return m_sampling_manager; }
  60. FaultinjectionManager *getFaultinjectionManager() { return m_faultinjection_manager; }
  61. TraceManager *getTraceManager() { return m_trace_manager; }
  62. TagsManager *getTagsManager() { return m_tags_manager; }
  63. RoutineTracer *getRoutineTracer() { return m_rtn_tracer; }
  64. MemoryTracker *getMemoryTracker() { return m_memory_tracker; }
  65. void setMemoryTracker(MemoryTracker *memory_tracker) { m_memory_tracker = memory_tracker; }
  66. bool isRunning() { return m_running; }
  67. static void enablePerformanceModels();
  68. static void disablePerformanceModels();
  69. void setInstrumentationMode(InstMode::inst_mode_t new_mode, bool update_barrier);
  70. InstMode::inst_mode_t getInstrumentationMode() { return InstMode::inst_mode; }
  71. private:
  72. Config m_config;
  73. Log m_log;
  74. TagsManager *m_tags_manager;
  75. SyscallServer *m_syscall_server;
  76. SyncServer *m_sync_server;
  77. MagicServer *m_magic_server;
  78. ClockSkewMinimizationServer *m_clock_skew_minimization_server;
  79. StatsManager *m_stats_manager;
  80. Transport *m_transport;
  81. CoreManager *m_core_manager;
  82. ThreadManager *m_thread_manager;
  83. ThreadStatsManager *m_thread_stats_manager;
  84. SimThreadManager *m_sim_thread_manager;
  85. ClockSkewMinimizationManager *m_clock_skew_minimization_manager;
  86. FastForwardPerformanceManager *m_fastforward_performance_manager;
  87. TraceManager *m_trace_manager;
  88. DvfsManager *m_dvfs_manager;
  89. HooksManager *m_hooks_manager;
  90. SamplingManager *m_sampling_manager;
  91. FaultinjectionManager *m_faultinjection_manager;
  92. RoutineTracer *m_rtn_tracer;
  93. MemoryTracker *m_memory_tracker;
  94. bool m_running;
  95. bool m_inst_mode_output;
  96. static Simulator *m_singleton;
  97. static config::Config *m_config_file;
  98. static bool m_config_file_allowed;
  99. static Config::SimulationMode m_mode;
  100. void printInstModeSummary();
  101. };
  102. __attribute__((unused)) static Simulator *Sim()
  103. {
  104. return Simulator::getSingleton();
  105. }
  106. #endif // SIMULATOR_H