// Copyright (c) 2009-2011, Tor M. Aamodt // The University of British Columbia // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // Redistributions in binary form must reproduce the above copyright notice, this // list of conditions and the following disclaimer in the documentation and/or // other materials provided with the distribution. // Neither the name of The University of British Columbia nor the names of its // contributors may be used to endorse or promote products derived from this // software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef MEM_LATENCY_STAT_H #define MEM_LATENCY_STAT_H #include #include #include class memory_config; class memory_stats_t { public: memory_stats_t( unsigned n_shader, const class shader_core_config *shader_config, const memory_config *mem_config, const class gpgpu_sim* gpu); unsigned memlatstat_done( class mem_fetch *mf ); void memlatstat_read_done( class mem_fetch *mf ); void memlatstat_dram_access( class mem_fetch *mf ); void memlatstat_icnt2mem_pop( class mem_fetch *mf); void memlatstat_lat_pw(); void memlatstat_print(unsigned n_mem, unsigned gpu_mem_n_bk); void visualizer_print( gzFile visualizer_file ); // Reset local L2 stats that are aggregated each sampling window void clear_L2_stats_pw(); unsigned m_n_shader; const shader_core_config *m_shader_config; const memory_config *m_memory_config; const class gpgpu_sim* m_gpu; unsigned max_mrq_latency; unsigned max_dq_latency; unsigned max_mf_latency; unsigned max_icnt2mem_latency; unsigned long long int tot_icnt2mem_latency; unsigned long long int tot_icnt2sh_latency; unsigned long long int tot_mrq_latency; unsigned long long int tot_mrq_num; unsigned max_icnt2sh_latency; unsigned mrq_lat_table[32]; unsigned dq_lat_table[32]; unsigned mf_lat_table[32]; unsigned icnt2mem_lat_table[24]; unsigned icnt2sh_lat_table[24]; unsigned mf_lat_pw_table[32]; //table storing values of mf latency Per Window unsigned mf_num_lat_pw; unsigned max_warps; unsigned mf_tot_lat_pw; //total latency summed up per window. divide by mf_num_lat_pw to obtain average latency Per Window unsigned long long int mf_total_lat; unsigned long long int ** mf_total_lat_table; //mf latency sums[dram chip id][bank id] unsigned ** mf_max_lat_table; //mf latency sums[dram chip id][bank id] unsigned num_mfs; unsigned int ***bankwrites; //bankwrites[shader id][dram chip id][bank id] unsigned int ***bankreads; //bankreads[shader id][dram chip id][bank id] unsigned int **totalbankwrites; //bankwrites[dram chip id][bank id] unsigned int **totalbankreads; //bankreads[dram chip id][bank id] unsigned int **totalbankaccesses; //bankaccesses[dram chip id][bank id] unsigned int *num_MCBs_accessed; //tracks how many memory controllers are accessed whenever any thread in a warp misses in cache unsigned int *position_of_mrq_chosen; //position of mrq in m_queue chosen unsigned ***mem_access_type_stats; // dram access type classification // AerialVision L2 stats unsigned L2_read_miss; unsigned L2_write_miss; unsigned L2_read_hit; unsigned L2_write_hit; // L2 cache stats unsigned int *L2_cbtoL2length; unsigned int *L2_cbtoL2writelength; unsigned int *L2_L2tocblength; unsigned int *L2_dramtoL2length; unsigned int *L2_dramtoL2writelength; unsigned int *L2_L2todramlength; // DRAM access row locality stats unsigned int **concurrent_row_access; //concurrent_row_access[dram chip id][bank id] unsigned int **num_activates; //num_activates[dram chip id][bank id] unsigned int **row_access; //row_access[dram chip id][bank id] unsigned int **max_conc_access2samerow; //max_conc_access2samerow[dram chip id][bank id] unsigned int **max_servicetime2samerow; //max_servicetime2samerow[dram chip id][bank id] // Power stats unsigned total_n_access; unsigned total_n_reads; unsigned total_n_writes; }; #endif /*MEM_LATENCY_STAT_H*/