diff options
| author | Tor Aamodt <[email protected]> | 2010-10-24 00:36:19 -0800 |
|---|---|---|
| committer | Tor Aamodt <[email protected]> | 2010-10-24 00:36:19 -0800 |
| commit | 6eee7514ea8b72fbecd761c50ccfd3394edf2307 (patch) | |
| tree | 1260a88984124f960251dba47142e950f4367be2 /src/gpgpu-sim/visualizer.cc | |
| parent | 4da926e61569a069bac229e8ba649e600fc78a04 (diff) | |
1. adding top level configuration class and making shader and memory configuration
components of this class.
2. clock memory pipeline no. subwarp times for each shader clock and increase
rob-size for texture cache (trying to improve correlation, currently at 0.9218)
3. start to modify shader stats to add back features for visualizer (warp
divergence distribution kind of working again)
passing cuda 3.1 regression and ptxplus correlation tests
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7909]
Diffstat (limited to 'src/gpgpu-sim/visualizer.cc')
| -rw-r--r-- | src/gpgpu-sim/visualizer.cc | 120 |
1 files changed, 7 insertions, 113 deletions
diff --git a/src/gpgpu-sim/visualizer.cc b/src/gpgpu-sim/visualizer.cc index 730e0c9..a6f836c 100644 --- a/src/gpgpu-sim/visualizer.cc +++ b/src/gpgpu-sim/visualizer.cc @@ -75,153 +75,47 @@ static void time_vector_print_interval2gzfile(gzFile outfile); -bool g_visualizer_enabled; -char *g_visualizer_filename; -int g_visualizer_zlevel; - -void visualizer_options(option_parser_t opp) -{ - option_parser_register(opp, "-visualizer_enabled", OPT_BOOL, - &g_visualizer_enabled, "Turn on visualizer output (1=On, 0=Off)", - "1"); - - option_parser_register(opp, "-visualizer_outputfile", OPT_CSTR, - &g_visualizer_filename, "Specifies the output log file for visualizer", - NULL); - - option_parser_register(opp, "-visualizer_zlevel", OPT_INT32, - &g_visualizer_zlevel, "Compression level of the visualizer output log (0=no comp, 9=highest)", - "6"); - -} - void gpgpu_sim::visualizer_printstat() { gzFile visualizer_file = NULL; // gzFile is basically a pointer to a struct, so it is fine to initialize it as NULL - if ( !g_visualizer_enabled ) + if ( !m_config.g_visualizer_enabled ) return; - // initialize file name if it is not set - if ( g_visualizer_filename == NULL ) { - time_t curr_time; - time(&curr_time); - char *date = ctime(&curr_time); - char *s = date; - while (*s) { - if (*s == ' ' || *s == '\t' || *s == ':') *s = '-'; - if (*s == '\n' || *s == '\r' ) *s = 0; - s++; - } - char buf[1024]; - snprintf(buf,1024,"gpgpusim_visualizer__%s.log.gz",date); - g_visualizer_filename = strdup(buf); - } // clean the content of the visualizer log if it is the first time, otherwise attach at the end static bool visualizer_first_printstat = true; - visualizer_file = gzopen(g_visualizer_filename, (visualizer_first_printstat)? "w" : "a"); + + visualizer_file = gzopen(m_config.g_visualizer_filename, (visualizer_first_printstat)? "w" : "a"); if (visualizer_file == NULL) { printf("error - could not open visualizer trace file.\n"); exit(1); } - gzsetparams(visualizer_file, g_visualizer_zlevel, Z_DEFAULT_STRATEGY); + gzsetparams(visualizer_file, m_config.g_visualizer_zlevel, Z_DEFAULT_STRATEGY); visualizer_first_printstat = false; - - /* - // instruction count per shader core - gzprintf(visualizer_file, "shaderinsncount: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%u ",m_sc[i]->get_num_sim_insn()); - gzprintf(visualizer_file, "\n"); - - // warp divergence per shader core - gzprintf(visualizer_file, "shaderwarpdiv: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%u ", m_sc[i]->get_n_diverge()); - gzprintf(visualizer_file, "\n"); - */ - + cflog_visualizer_gzprint(visualizer_file); shader_CTA_count_visualizer_gzprint(visualizer_file); // per shader core cache miss rate -/* - gzprintf(visualizer_file, "CacheMissRate_GlobalLocalL1_All: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%0.4f ", m_sc[i]->L1_windowed_cache_miss_rate(0)); - gzprintf(visualizer_file, "\n"); - gzprintf(visualizer_file, "CacheMissRate_TextureL1_All: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%0.4f ", m_sc[i]->L1tex_windowed_cache_miss_rate(0)); - gzprintf(visualizer_file, "\n"); - gzprintf(visualizer_file, "CacheMissRate_ConstL1_All: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%0.4f ", m_sc[i]->L1const_windowed_cache_miss_rate(0)); - gzprintf(visualizer_file, "\n"); - gzprintf(visualizer_file, "CacheMissRate_GlobalLocalL1_noMgHt: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%0.4f ", m_sc[i]->L1_windowed_cache_miss_rate(1)); - gzprintf(visualizer_file, "\n"); - gzprintf(visualizer_file, "CacheMissRate_TextureL1_noMgHt: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%0.4f ", m_sc[i]->L1tex_windowed_cache_miss_rate(1)); - gzprintf(visualizer_file, "\n"); - gzprintf(visualizer_file, "CacheMissRate_ConstL1_noMgHt: "); - for (unsigned i=0;i<m_n_shader;i++) - gzprintf(visualizer_file, "%0.4f ", m_sc[i]->L1const_windowed_cache_miss_rate(1)); - gzprintf(visualizer_file, "\n"); - // reset for next interval - for (unsigned i=0;i<m_n_shader;i++) - m_sc[i]->new_cache_window(); -*/ for (unsigned i=0;i<m_memory_config->m_n_mem;i++) m_memory_partition_unit[i]->visualizer_print(visualizer_file); + m_shader_stats->visualizer_print(visualizer_file); - // overall cache miss rates - gzprintf(visualizer_file, "Lonetexturemiss: %d\n", m_shader_stats->L1_texture_miss); - gzprintf(visualizer_file, "Loneconstmiss: %d\n", m_shader_stats->L1_const_miss); - gzprintf(visualizer_file, "Lonereadmiss: %d\n", m_shader_stats->L1_read_miss); - gzprintf(visualizer_file, "Lonewritemiss: %d\n", m_shader_stats->L1_write_miss); gzprintf(visualizer_file, "Ltwowritemiss: %d\n", m_memory_stats->L2_write_miss); gzprintf(visualizer_file, "Ltwowritehit: %d\n", m_memory_stats->L2_write_hit); gzprintf(visualizer_file, "Ltworeadmiss: %d\n", m_memory_stats->L2_read_miss); gzprintf(visualizer_file, "Ltworeadhit: %d\n", m_memory_stats->L2_read_hit); // latency stats - if (m_memory_stats->num_mfs) { + if (m_memory_stats->num_mfs) gzprintf(visualizer_file, "averagemflatency: %lld\n", m_memory_stats->mf_total_lat/m_memory_stats->num_mfs); - } // other parameters for graphing gzprintf(visualizer_file, "globalcyclecount: %lld\n", gpu_sim_cycle); gzprintf(visualizer_file, "globalinsncount: %lld\n", gpu_sim_insn); gzprintf(visualizer_file, "globaltotinsncount: %lld\n", gpu_tot_sim_insn); - gzprintf(visualizer_file, "gpucompletedthreads: %lld\n", m_shader_stats->gpu_completed_thread); - gzprintf(visualizer_file, "gpgpu_n_cache_bkconflict: %d\n", m_shader_stats->gpgpu_n_cache_bkconflict); - gzprintf(visualizer_file, "gpgpu_n_shmem_bkconflict: %d\n", m_shader_stats->gpgpu_n_shmem_bkconflict); - gzprintf(visualizer_file, "gpu_stall_by_MSHRwb: %d\n", m_shader_stats->gpu_stall_by_MSHRwb); - // warp divergence breakdown - static unsigned int *last_shader_cycle_distro = NULL; - if (!last_shader_cycle_distro) - last_shader_cycle_distro = (unsigned int*) calloc(m_shader_config->warp_size + 3, sizeof(unsigned int)); time_vector_print_interval2gzfile(visualizer_file); - gzprintf(visualizer_file, "WarpDivergenceBreakdown:"); - unsigned int total=0; - unsigned int cf = (m_shader_config->gpgpu_warpdistro_shader==-1)?num_shader():1; - gzprintf(visualizer_file, " %d", (m_shader_stats->shader_cycle_distro[0] - last_shader_cycle_distro[0]) / cf ); - gzprintf(visualizer_file, " %d", (m_shader_stats->shader_cycle_distro[2] - last_shader_cycle_distro[2]) / cf ); - for (unsigned i=0; i<m_shader_config->warp_size+3; i++) { - if ( i>=3 ) { - total += (m_shader_stats->shader_cycle_distro[i] - last_shader_cycle_distro[i]); - if ( ((i-3) % (m_shader_config->warp_size/8)) == ((m_shader_config->warp_size/8)-1) ) { - gzprintf(visualizer_file, " %d", total / cf ); - total=0; - } - } - last_shader_cycle_distro[i] = m_shader_stats->shader_cycle_distro[i]; - } - gzprintf(visualizer_file,"\n"); gzclose(visualizer_file); } |
