shmem_perf_model.cc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "fixed_types.h"
  2. #include "shmem_perf_model.h"
  3. #include "simulator.h"
  4. #include "core_manager.h"
  5. #include "fxsupport.h"
  6. #include "subsecond_time.h"
  7. ShmemPerfModel::ShmemPerfModel():
  8. m_enabled(false),
  9. m_num_memory_accesses(0),
  10. m_total_memory_access_latency(SubsecondTime::Zero())
  11. {
  12. for (UInt32 i = 0; i < NUM_CORE_THREADS; i++)
  13. m_elapsed_time[i] = SubsecondTime::Zero();
  14. }
  15. ShmemPerfModel::~ShmemPerfModel()
  16. {}
  17. void
  18. ShmemPerfModel::setElapsedTime(Thread_t thread_num, SubsecondTime time)
  19. {
  20. LOG_PRINT("setElapsedTime: thread(%u), time(%s)", thread_num, itostr(time).c_str());
  21. //ScopedLock sl(m_shmem_perf_model_lock);
  22. assert(thread_num < NUM_CORE_THREADS);
  23. m_elapsed_time[thread_num] = time;
  24. }
  25. SubsecondTime
  26. ShmemPerfModel::getElapsedTime(Thread_t thread_num)
  27. {
  28. //ScopedReadLock sl(m_shmem_perf_model_lock);
  29. return m_elapsed_time[thread_num];
  30. }
  31. void
  32. ShmemPerfModel::updateElapsedTime(SubsecondTime time, Thread_t thread_num)
  33. {
  34. LOG_PRINT("updateElapsedTime: time(%s)", itostr(time).c_str());
  35. //ScopedLock sl(m_shmem_perf_model_lock);
  36. if (m_elapsed_time[thread_num] < time)
  37. m_elapsed_time[thread_num] = time;
  38. }
  39. void
  40. ShmemPerfModel::incrElapsedTime(SubsecondTime time, Thread_t thread_num)
  41. {
  42. LOG_PRINT("incrElapsedTime: time(%s)", itostr(time).c_str());
  43. //ScopedLock sl(m_shmem_perf_model_lock);
  44. SubsecondTime i_elapsed_time = m_elapsed_time[thread_num];
  45. SubsecondTime t_elapsed_time = i_elapsed_time + time;
  46. LOG_ASSERT_ERROR(t_elapsed_time >= i_elapsed_time,
  47. "t_elapsed_time(%s) < i_elapsed_time(%s)",
  48. itostr(t_elapsed_time).c_str(),
  49. itostr(i_elapsed_time).c_str());
  50. atomic_add_subsecondtime(m_elapsed_time[thread_num], time);
  51. }
  52. void
  53. ShmemPerfModel::incrTotalMemoryAccessLatency(SubsecondTime shmem_time)
  54. {
  55. if (m_enabled)
  56. {
  57. //ScopedLock sl(m_shmem_perf_model_lock);
  58. __sync_fetch_and_add(&m_num_memory_accesses, 1);
  59. atomic_add_subsecondtime(m_total_memory_access_latency, shmem_time);
  60. }
  61. }