diff options
| author | Wilson Fung <[email protected]> | 2013-06-23 02:59:55 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:50:48 -0700 |
| commit | d0d12843ce57c1b0c1e77bae2a43bf222af19375 (patch) | |
| tree | 07d17add206d8b8d6e83b89954afd8dcd98ac967 /src/gpgpu-sim/traffic_breakdown.cc | |
| parent | 33c2bb5ba2f0b45474fe2a72d87886692d6bf4ca (diff) | |
Interconnection traffic breakdown stats (integration from TM branch).
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 16495]
Diffstat (limited to 'src/gpgpu-sim/traffic_breakdown.cc')
| -rw-r--r-- | src/gpgpu-sim/traffic_breakdown.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/gpgpu-sim/traffic_breakdown.cc b/src/gpgpu-sim/traffic_breakdown.cc new file mode 100644 index 0000000..b21b8d8 --- /dev/null +++ b/src/gpgpu-sim/traffic_breakdown.cc @@ -0,0 +1,50 @@ +#include "traffic_breakdown.h" +#include "mem_fetch.h" + +void traffic_breakdown::print(FILE* fout) +{ + for (traffic_stat_t::const_iterator i_stat = m_stats.begin(); i_stat != m_stats.end(); i_stat++) { + unsigned int byte_transferred = 0; + for (traffic_class_t::const_iterator i_class = i_stat->second.begin(); i_class != i_stat->second.end(); i_class++) { + byte_transferred += i_class->first * i_class->second; // byte/packet x #packets + } + fprintf(fout, "traffic_breakdown_%s[%s] = %u {", m_network_name.c_str(), i_stat->first.c_str(), byte_transferred); + for (traffic_class_t::const_iterator i_class = i_stat->second.begin(); i_class != i_stat->second.end(); i_class++) { + fprintf(fout, "%u:%u,", i_class->first, i_class->second); + } + fprintf(fout, "}\n"); + } +} + +void traffic_breakdown::record_traffic(class mem_fetch * mf, unsigned int size) +{ + m_stats[classify_memfetch(mf)][size] += 1; +} + +std::string traffic_breakdown::classify_memfetch(class mem_fetch * mf) +{ + std::string traffic_name; + + enum mem_access_type access_type = mf->get_access_type(); + + switch (access_type) { + case CONST_ACC_R: + case TEXTURE_ACC_R: + case GLOBAL_ACC_W: + case LOCAL_ACC_R: + case LOCAL_ACC_W: + case INST_ACC_R: + case L1_WRBK_ACC: + case L2_WRBK_ACC: + case L2_WR_ALLOC_R: + traffic_name = mem_access_type_str(access_type); + break; + case GLOBAL_ACC_R: + // check for global atomic operation + traffic_name = (mf->isatomic())? "GLOBAL_ATOMIC" : mem_access_type_str(GLOBAL_ACC_R); + break; + default: assert(0 && "Unknown traffic type"); + } + return traffic_name; +} + |
