From 4d441a9746616b2e45397097e6a7600a67aa973c Mon Sep 17 00:00:00 2001 From: Tor Aamodt Date: Sat, 7 Aug 2010 05:35:29 -0800 Subject: watchpoint facility for ptx debugging [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7160] --- src/abstract_hardware_model.h | 56 ---------- src/cuda-sim/cuda-sim.cc | 26 ++--- src/cuda-sim/cuda-sim.h | 8 ++ src/cuda-sim/instructions.cc | 22 ++-- src/cuda-sim/memory.cc | 20 +++- src/cuda-sim/memory.h | 21 +++- src/cuda-sim/ptx_ir.cc | 2 +- src/debug.cc | 176 ++++++++++++++++++++++++++++++ src/debug.h | 66 +++++++++++ src/gpgpu-sim/Makefile | 248 ++++++++++++++++++++++++++++++++++++++++++ src/gpgpu-sim/gpu-sim.cc | 110 +------------------ src/gpgpu-sim/gpu-sim.h | 1 + src/gpgpu-sim/shader.h | 2 + 13 files changed, 553 insertions(+), 205 deletions(-) create mode 100644 src/cuda-sim/cuda-sim.h create mode 100644 src/debug.cc create mode 100644 src/debug.h (limited to 'src') diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h index 98d934c..3b3d07e 100644 --- a/src/abstract_hardware_model.h +++ b/src/abstract_hardware_model.h @@ -67,62 +67,6 @@ private: unsigned m_bank; // n in ".const[n]"; note .const == .const[0] (see PTX 2.1 manual, sec. 5.1.3) }; -#include - -class brk_pt { -public: - brk_pt() { m_valid=false; } - brk_pt( const char *fileline, unsigned uid ) - { - m_valid = true; - m_watch = false; - m_fileline = std::string(fileline); - m_thread_uid=uid; - } - brk_pt( unsigned addr, unsigned value ) - { - m_valid = true; - m_watch = true; - m_addr = addr; - m_value = value; - } - - unsigned get_value() const { return m_value; } - addr_t get_addr() const { return m_addr; } - bool is_valid() const { return m_valid; } - bool is_watchpoint() const { return m_watch; } - bool is_equal( const std::string &fileline, unsigned uid ) const - { - if( m_watch ) - return false; - if( (m_thread_uid != (unsigned)-1) && (uid != m_thread_uid) ) - return false; - return m_fileline == fileline; - } - std::string location() const - { - char buffer[1024]; - sprintf(buffer,"%s thread uid = %u", m_fileline.c_str(), m_thread_uid); - return buffer; - } - - unsigned set_value( unsigned val ) { return m_value=val; } -private: - bool m_valid; - bool m_watch; - - // break point - std::string m_fileline; - unsigned m_thread_uid; - - // watch point - unsigned m_addr; - unsigned m_value; -}; - -bool thread_at_brkpt( void *ptx_thd_info, const struct brk_pt &b ); -unsigned read_location( addr_t addr ); - #endif #endif diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc index adc9e98..5f568b4 100644 --- a/src/cuda-sim/cuda-sim.cc +++ b/src/cuda-sim/cuda-sim.cc @@ -587,7 +587,7 @@ int load_static_globals( symbol_table *symtab, unsigned min_gaddr, unsigned max_ operand_info op = *i; ptx_reg_t value = op.get_literal_value(); assert( (addr+offset+nbytes) < min_gaddr ); // min_gaddr is start of "heap" for cudaMalloc - g_global_mem->write(addr+offset,nbytes,&value); // assuming little endian here + g_global_mem->write(addr+offset,nbytes,&value,NULL,NULL); // assuming little endian here offset+=nbytes; ng_bytes+=nbytes; } @@ -631,7 +631,7 @@ int load_constants( symbol_table *symtab, addr_t min_gaddr ) unsigned addr=constant->get_address() + nbytes_written; assert( addr+nbytes < min_gaddr ); - g_global_mem->write(addr,nbytes,&value); // assume little endian (so u8 is the first byte in u32) + g_global_mem->write(addr,nbytes,&value,NULL,NULL); // assume little endian (so u8 is the first byte in u32) nc_bytes+=nbytes; nbytes_written += nbytes; } @@ -755,7 +755,7 @@ void gpgpu_ptx_sim_memcpy_to_gpu( size_t dst_start_addr, const void *src, size_t fflush(stdout); char *src_data = (char*)src; for (unsigned n=0; n < count; n ++ ) - g_global_mem->write(dst_start_addr+n,1, src_data+n); + g_global_mem->write(dst_start_addr+n,1, src_data+n,NULL,NULL); printf( " done.\n"); fflush(stdout); } @@ -779,7 +779,7 @@ void gpgpu_ptx_sim_memcpy_gpu_to_gpu( size_t dst, size_t src, size_t count ) for (unsigned n=0; n < count; n ++ ) { unsigned char tmp; g_global_mem->read(src+n,1,&tmp); - g_global_mem->write(dst+n,1, &tmp); + g_global_mem->write(dst+n,1, &tmp,NULL,NULL); } printf( " done.\n"); fflush(stdout); @@ -792,7 +792,7 @@ void gpgpu_ptx_sim_memset( size_t dst_start_addr, int c, size_t count ) fflush(stdout); unsigned char c_value = (unsigned char)c; for (unsigned n=0; n < count; n ++ ) - g_global_mem->write(dst_start_addr+n,1,&c_value); + g_global_mem->write(dst_start_addr+n,1,&c_value,NULL,NULL); printf( " done.\n"); fflush(stdout); } @@ -1058,7 +1058,7 @@ void function_info::finalize( memory_space *param_mem, symbol_table *symtab ) const size_t word_size = 4; for (size_t idx = 0; idx < size; idx += word_size) { const char *pdata = reinterpret_cast(param_value.pdata) + idx; // cast to char * for ptr arithmetic - param_mem->write(param_address + idx, word_size, pdata); + param_mem->write(param_address + idx, word_size, pdata,NULL,NULL); } param->set_address(param_address); param_address += size; @@ -1681,7 +1681,7 @@ void gpgpu_ptx_sim_memcpy_symbol(const char *hostVar, const void *src, size_t co printf("GPGPU-Sim PTX: gpgpu_ptx_sim_memcpy_symbol: copying %zu bytes %s symbol %s+%zu @0x%x ...\n", count, (to?" to ":"from"), sym_name.c_str(), offset, dst ); for ( unsigned n=0; n < count; n++ ) { - if( to ) mem->write(dst+n,1,((char*)src)+n); + if( to ) mem->write(dst+n,1,((char*)src)+n,NULL,NULL); else mem->read(dst+n,1,((char*)src)+n); } fflush(stdout); @@ -2357,15 +2357,3 @@ void *gpgpusim_opencl_getkernel_Object( const char *kernel_name ) return i->second; } -bool thread_at_brkpt( void *thd, const struct brk_pt &b ) -{ - ptx_thread_info *thread = (ptx_thread_info *) thd; - return b.is_equal(thread->get_location(),thread->get_uid()); -} - -unsigned read_location( addr_t addr ) -{ - unsigned result=0; - g_global_mem->read(addr,4,&result); - return result; -} diff --git a/src/cuda-sim/cuda-sim.h b/src/cuda-sim/cuda-sim.h new file mode 100644 index 0000000..83e274a --- /dev/null +++ b/src/cuda-sim/cuda-sim.h @@ -0,0 +1,8 @@ +#ifndef CUDASIM_H_INCLUDED +#define CUDASIM_H_INCLUDED + +class memory_space; + +extern memory_space *g_global_mem; + +#endif diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc index 3ce0a2f..d663d0a 100644 --- a/src/cuda-sim/instructions.cc +++ b/src/cuda-sim/instructions.cc @@ -635,7 +635,7 @@ void atom_callback( void* ptx_inst, void* thd ) // Write operation result into global memory // (i.e. copy src1_data to dst) - g_global_mem->write(src1_data.u32,size/8,&op_result.s64); + g_global_mem->write(src1_data.u32,size/8,&op_result.s64,thread,pI); } // atom_impl will now result in a callback being called in mem_ctrl_pop (gpu-sim.c) @@ -2638,30 +2638,30 @@ void st_impl( const ptx_instruction *pI, ptx_thread_info *thread ) if (!vector_spec) { data = thread->get_operand_value(src1); - mem->write(addr,size/8,&data.s64); + mem->write(addr,size/8,&data.s64,thread,pI); } else { if (vector_spec == V2_TYPE) { ptx_reg_t* ptx_regs = new ptx_reg_t[2]; thread->get_vector_operand_values(src1, ptx_regs, 2); - mem->write(addr,size/8,&ptx_regs[0].s64); - mem->write(addr+size/8,size/8,&ptx_regs[1].s64); + mem->write(addr,size/8,&ptx_regs[0].s64,thread,pI); + mem->write(addr+size/8,size/8,&ptx_regs[1].s64,thread,pI); free(ptx_regs); } if (vector_spec == V3_TYPE) { ptx_reg_t* ptx_regs = new ptx_reg_t[3]; thread->get_vector_operand_values(src1, ptx_regs, 3); - mem->write(addr,size/8,&ptx_regs[0].s64); - mem->write(addr+size/8,size/8,&ptx_regs[1].s64); - mem->write(addr+2*size/8,size/8,&ptx_regs[2].s64); + mem->write(addr,size/8,&ptx_regs[0].s64,thread,pI); + mem->write(addr+size/8,size/8,&ptx_regs[1].s64,thread,pI); + mem->write(addr+2*size/8,size/8,&ptx_regs[2].s64,thread,pI); free(ptx_regs); } if (vector_spec == V4_TYPE) { ptx_reg_t* ptx_regs = new ptx_reg_t[4]; thread->get_vector_operand_values(src1, ptx_regs, 4); - mem->write(addr,size/8,&ptx_regs[0].s64); - mem->write(addr+size/8,size/8,&ptx_regs[1].s64); - mem->write(addr+2*size/8,size/8,&ptx_regs[2].s64); - mem->write(addr+3*size/8,size/8,&ptx_regs[3].s64); + mem->write(addr,size/8,&ptx_regs[0].s64,thread,pI); + mem->write(addr+size/8,size/8,&ptx_regs[1].s64,thread,pI); + mem->write(addr+2*size/8,size/8,&ptx_regs[2].s64,thread,pI); + mem->write(addr+3*size/8,size/8,&ptx_regs[3].s64,thread,pI); free(ptx_regs); } } diff --git a/src/cuda-sim/memory.cc b/src/cuda-sim/memory.cc index 09c9e81..b825f12 100644 --- a/src/cuda-sim/memory.cc +++ b/src/cuda-sim/memory.cc @@ -63,6 +63,7 @@ #include "memory.h" #include +#include "../debug.h" template memory_space_impl::memory_space_impl( std::string name, unsigned hash_size ) { @@ -79,13 +80,21 @@ template memory_space_impl::memory_space_impl( std::strin assert( m_log2_block_size != (unsigned)-1 ); } -template void memory_space_impl::write( mem_addr_t addr, size_t length, const void *data ) +template void memory_space_impl::write( mem_addr_t addr, size_t length, const void *data, class ptx_thread_info *thd, const ptx_instruction *pI) { mem_addr_t index = addr >> m_log2_block_size; unsigned offset = addr & (BSIZE-1); unsigned nbytes = length; assert( (addr+length) <= (index+1)*BSIZE ); m_data[index].write(offset,nbytes,(const unsigned char*)data); + if( !m_watchpoints.empty() ) { + std::map::iterator i; + for( i=m_watchpoints.begin(); i!=m_watchpoints.end(); i++ ) { + mem_addr_t wa = i->second; + if( ((addr<=wa) && ((addr+length)>wa)) || ((addr>wa) && (addr < (wa+4))) ) + hit_watchpoint(i->first,thd,pI); + } + } } template void memory_space_impl::read( mem_addr_t addr, size_t length, void *data ) const @@ -119,6 +128,11 @@ template void memory_space_impl::print( const char *forma } } +template void memory_space_impl::set_watch( addr_t addr, unsigned watchpoint ) +{ + m_watchpoints[watchpoint]=addr; +} + template class memory_space_impl<32>; template class memory_space_impl<64>; template class memory_space_impl<8192>; @@ -137,7 +151,7 @@ int main(int argc, char *argv[] ) memory_space *mem = new memory_space_impl<32>("test",4); // write address to [address] for( mem_addr_t addr=0; addr < 16*1024; addr+=4) - mem->write(addr,4,&addr); + mem->write(addr,4,&addr,NULL,NULL); for( mem_addr_t addr=0; addr < 16*1024; addr+=4) { unsigned tmp=0; @@ -150,7 +164,7 @@ int main(int argc, char *argv[] ) for( mem_addr_t addr=0; addr < 16*1024; addr+=1) { unsigned char val = (addr + 128) % 256; - mem->write(addr,1,&val); + mem->write(addr,1,&val,NULL,NULL); } for( mem_addr_t addr=0; addr < 16*1024; addr+=1) { diff --git a/src/cuda-sim/memory.h b/src/cuda-sim/memory.h index 78e7db7..bac4d24 100644 --- a/src/cuda-sim/memory.h +++ b/src/cuda-sim/memory.h @@ -62,6 +62,8 @@ #ifndef memory_h_INCLUDED #define memory_h_INCLUDED +#include "../abstract_hardware_model.h" + #ifdef __GNUC__ #if __GNUC__ >= 4 && __GNUC_MINOR__ >= 3 #include @@ -85,7 +87,8 @@ #include #include #include -#include "../abstract_hardware_model.h" +#include +#include typedef address_type mem_addr_t; @@ -95,16 +98,16 @@ template class mem_storage { public: mem_storage( const mem_storage &another ) { - m_data = new unsigned char[ BSIZE ]; + m_data = (unsigned char*)calloc(1,BSIZE); memcpy(m_data,another.m_data,BSIZE); } mem_storage() { - m_data = new unsigned char[ BSIZE ]; + m_data = (unsigned char*)calloc(1,BSIZE); } ~mem_storage() { - delete[] m_data; + free(m_data); } void write( unsigned offset, size_t length, const unsigned char *data ) @@ -138,28 +141,34 @@ private: unsigned char *m_data; }; +class ptx_thread_info; +class ptx_instruction; + class memory_space { public: virtual ~memory_space() {} - virtual void write( mem_addr_t addr, size_t length, const void *data ) = 0; + virtual void write( mem_addr_t addr, size_t length, const void *data, ptx_thread_info *thd, const ptx_instruction *pI ) = 0; virtual void read( mem_addr_t addr, size_t length, void *data ) const = 0; virtual void print( const char *format, FILE *fout ) const = 0; + virtual void set_watch( addr_t addr, unsigned watchpoint ) = 0; }; template class memory_space_impl : public memory_space { public: memory_space_impl( std::string name, unsigned hash_size ); - virtual void write( mem_addr_t addr, size_t length, const void *data ); + virtual void write( mem_addr_t addr, size_t length, const void *data, ptx_thread_info *thd, const ptx_instruction *pI ); virtual void read( mem_addr_t addr, size_t length, void *data ) const; virtual void print( const char *format, FILE *fout ) const; + virtual void set_watch( addr_t addr, unsigned watchpoint ); private: std::string m_name; unsigned m_log2_block_size; typedef mem_map > map_t; map_t m_data; + std::map m_watchpoints; }; #endif diff --git a/src/cuda-sim/ptx_ir.cc b/src/cuda-sim/ptx_ir.cc index cfa6650..e0f2316 100644 --- a/src/cuda-sim/ptx_ir.cc +++ b/src/cuda-sim/ptx_ir.cc @@ -1416,7 +1416,7 @@ void copy_buffer_to_frame(ptx_thread_info * thread, const arg_buffer_t &a) const symbol *dst = a.get_dst(); addr_t frame_offset = dst->get_address(); addr_t to_addr = thread->get_local_mem_stack_pointer() + frame_offset; - thread->m_local_mem->write(to_addr,size,buffer); + thread->m_local_mem->write(to_addr,size,buffer,NULL,NULL); } } diff --git a/src/debug.cc b/src/debug.cc new file mode 100644 index 0000000..3e71209 --- /dev/null +++ b/src/debug.cc @@ -0,0 +1,176 @@ +#include "debug.h" +#include "gpgpu-sim/shader.h" +#include "gpgpu-sim/gpu-sim.h" +#include "cuda-sim/ptx_sim.h" +#include "cuda-sim/cuda-sim.h" +#include "cuda-sim/ptx_ir.h" + +#include +#include +#include + +class watchpoint_event { +public: + watchpoint_event() + { + m_thread=NULL; + m_inst=NULL; + } + watchpoint_event(const ptx_thread_info *thd, const ptx_instruction *pI) + { + m_thread=thd; + m_inst = pI; + } + const ptx_thread_info *thread() const { return m_thread; } + const ptx_instruction *inst() const { return m_inst; } +private: + const ptx_thread_info *m_thread; + const ptx_instruction *m_inst; +}; + +std::map g_watchpoint_hits; + +void hit_watchpoint( unsigned watchpoint_num, ptx_thread_info *thd, const ptx_instruction *pI ) +{ + g_watchpoint_hits[watchpoint_num]=watchpoint_event(thd,pI); +} + +/// interactive debugger + +void gpgpu_debug() +{ + bool done=true; + + static bool single_step=true; + static unsigned next_brkpt=1; + static std::map breakpoints; + + /// if single stepping, go to interactive debugger + + if( single_step ) + done=false; + + /// check if we've reached a breakpoint + + for( std::map::iterator i=breakpoints.begin(); i!=breakpoints.end(); i++) { + unsigned num=i->first; + brk_pt &b=i->second; + if( b.is_watchpoint() ) { + unsigned addr = b.get_addr(); + unsigned new_value = read_location(addr); + if( new_value != b.get_value() ) { + printf( "GPGPU-Sim DBG: watch point %u triggered (old value=%x, new value=%x)\n", + num,b.get_value(),new_value ); + std::map::iterator w=g_watchpoint_hits.find(num); + if( w==g_watchpoint_hits.end() ) + printf( "GPGPU-Sim DBG: memory transfer modified value\n"); + else { + watchpoint_event wa = w->second; + const ptx_thread_info *thd = wa.thread(); + const ptx_instruction *pI = wa.inst(); + printf( "GPGPU-Sim DBG: modified by thread uid=%u, sid=%u, hwtid=%u\n", + thd->get_uid(),thd->get_hw_sid(), thd->get_hw_tid() ); + printf( "GPGPU-Sim DBG: "); + pI->print_insn(stdout); + printf( "\n" ); + g_watchpoint_hits.erase(w); + } + b.set_value(new_value); + done = false; + } + } else { + for( unsigned sid=0; sid < gpu_n_shader; sid++ ) { + inst_t *fvi = first_valid_thread(sc[sid]->pipeline_reg[IF_ID]); + if( !fvi ) continue; + if( thread_at_brkpt(fvi->ptx_thd_info, b) ) { + done = false; + printf("GPGPU-Sim DBG: reached breakpoint %u at %s (sm=%u, hwtid=%u)\n", + num, b.location().c_str(), sid, fvi->hw_thread_id ); + } + } + } + } + + if( done ) + assert( g_watchpoint_hits.empty() ); + + /// enter interactive debugger loop + + while (!done) { + printf("(gpgpu-sim dbg) "); + fflush(stdout); + + char line[1024]; + fgets(line,1024,stdin); + + char *tok = strtok(line," \t\n"); + if( !strcmp(tok,"dp") ) { + int shader_num = 0; + tok = strtok(NULL," \t\n"); + sscanf(tok,"%d",&shader_num); + dump_pipeline_impl((0x40|0x4|0x1),shader_num,0); + printf("\n"); + fflush(stdout); + } else if( !strcmp(tok,"q") || !strcmp(tok,"quit") ) { + printf("\nreally quit GPGPU-Sim (y/n)?\n"); + fgets(line,1024,stdin); + tok = strtok(NULL," \t\n"); + if( !strcmp(tok,"y") ) { + exit(0); + } else { + printf("not quiting.\n"); + } + } else if( !strcmp(tok,"b") ) { + tok = strtok(NULL," \t\n"); + char brkpt[1024]; + sscanf(tok,"%s",brkpt); + tok = strtok(NULL," \t\n"); + unsigned uid; + sscanf(tok,"%u",&uid); + breakpoints[next_brkpt++] = brk_pt(brkpt,uid); + } else if( !strcmp(tok,"d") ) { + tok = strtok(NULL," \t\n"); + unsigned uid; + sscanf(tok,"%u",&uid); + breakpoints.erase(uid); + } else if( !strcmp(tok,"s") ) { + done = true; + } else if( !strcmp(tok,"c") ) { + single_step=false; + done = true; + } else if( !strcmp(tok,"w") ) { + tok = strtok(NULL," \t\n"); + unsigned addr; + sscanf(tok,"%x",&addr); + unsigned value = read_location(addr); + g_global_mem->set_watch(addr,next_brkpt); + breakpoints[next_brkpt++] = brk_pt(addr,value); + } else if( !strcmp(tok,"h") ) { + printf("commands:\n"); + printf(" q - quit GPGPU-Sim\n"); + printf(" b : - set breakpoint\n"); + printf(" w - set watchpoint\n"); + printf(" del - delete breakpoint\n"); + printf(" s - single step one shader cycle (all cores)\n"); + printf(" c - continue simulation without single stepping\n"); + printf(" dp - display pipeline contents on SM \n"); + printf(" h - print this message\n"); + } else { + printf("\ncommand not understood.\n"); + } + fflush(stdout); + } +} + +bool thread_at_brkpt( void *thd, const struct brk_pt &b ) +{ + ptx_thread_info *thread = (ptx_thread_info *) thd; + return b.is_equal(thread->get_location(),thread->get_uid()); +} + +unsigned read_location( addr_t addr ) +{ + unsigned result=0; + g_global_mem->read(addr,4,&result); + return result; +} diff --git a/src/debug.h b/src/debug.h new file mode 100644 index 0000000..463780a --- /dev/null +++ b/src/debug.h @@ -0,0 +1,66 @@ +#ifndef PTX_DEBUG_INCLUDED +#define PTX_DEBUG_INCLUDED + +#include "abstract_hardware_model.h" + +#include + +class brk_pt { +public: + brk_pt() { m_valid=false; } + brk_pt( const char *fileline, unsigned uid ) + { + m_valid = true; + m_watch = false; + m_fileline = std::string(fileline); + m_thread_uid=uid; + } + brk_pt( unsigned addr, unsigned value ) + { + m_valid = true; + m_watch = true; + m_addr = addr; + m_value = value; + } + + unsigned get_value() const { return m_value; } + addr_t get_addr() const { return m_addr; } + bool is_valid() const { return m_valid; } + bool is_watchpoint() const { return m_watch; } + bool is_equal( const std::string &fileline, unsigned uid ) const + { + if( m_watch ) + return false; + if( (m_thread_uid != (unsigned)-1) && (uid != m_thread_uid) ) + return false; + return m_fileline == fileline; + } + std::string location() const + { + char buffer[1024]; + sprintf(buffer,"%s thread uid = %u", m_fileline.c_str(), m_thread_uid); + return buffer; + } + + unsigned set_value( unsigned val ) { return m_value=val; } +private: + bool m_valid; + bool m_watch; + + // break point + std::string m_fileline; + unsigned m_thread_uid; + + // watch point + unsigned m_addr; + unsigned m_value; +}; + +class ptx_thread_info; +class ptx_instruction; +bool thread_at_brkpt( void *ptx_thd_info, const struct brk_pt &b ); +unsigned read_location( addr_t addr ); +void hit_watchpoint( unsigned watchpoint_num, ptx_thread_info *thd, const ptx_instruction *pI ); +void gpgpu_debug(); + +#endif diff --git a/src/gpgpu-sim/Makefile b/src/gpgpu-sim/Makefile index 2b1412a..96b1a5c 100644 --- a/src/gpgpu-sim/Makefile +++ b/src/gpgpu-sim/Makefile @@ -114,3 +114,251 @@ dram_sched.$(OEXT): ../cuda-sim/ptx.tab.h # DO NOT DELETE +addrdec.o: /usr/include/string.h /usr/include/features.h +addrdec.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +addrdec.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h addrdec.h +addrdec.o: /usr/include/stdio.h /usr/include/bits/types.h +addrdec.o: /usr/include/bits/typesizes.h /usr/include/libio.h +addrdec.o: /usr/include/_G_config.h /usr/include/wchar.h +addrdec.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +addrdec.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +addrdec.o: /usr/include/endian.h /usr/include/bits/endian.h +addrdec.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +addrdec.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +addrdec.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +addrdec.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +addrdec.o: /usr/include/assert.h ../option_parser.h +delayqueue.o: delayqueue.h /usr/include/stdio.h /usr/include/features.h +delayqueue.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +delayqueue.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +delayqueue.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +delayqueue.o: /usr/include/libio.h /usr/include/_G_config.h +delayqueue.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +delayqueue.o: /usr/include/bits/sys_errlist.h /usr/include/assert.h +delayqueue.o: /usr/include/stdlib.h /usr/include/sys/types.h +delayqueue.o: /usr/include/time.h /usr/include/endian.h +delayqueue.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +delayqueue.o: /usr/include/sys/select.h /usr/include/bits/select.h +delayqueue.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +delayqueue.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +delayqueue.o: /usr/include/alloca.h gpu-misc.h ../intersim/statwraper.h +dram.o: gpu-misc.h dram.h /usr/include/stdio.h /usr/include/features.h +dram.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +dram.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +dram.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +dram.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +dram.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +dram.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +dram.o: /usr/include/endian.h /usr/include/bits/endian.h +dram.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +dram.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +dram.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +dram.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h delayqueue.h +dram.o: /usr/include/assert.h ../cuda-sim/dram_callback.h +dram_sched.o: dram_sched.h dram.h /usr/include/stdio.h +dram_sched.o: /usr/include/features.h /usr/include/sys/cdefs.h +dram_sched.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +dram_sched.o: /usr/include/gnu/stubs-64.h /usr/include/bits/types.h +dram_sched.o: /usr/include/bits/typesizes.h /usr/include/libio.h +dram_sched.o: /usr/include/_G_config.h /usr/include/wchar.h +dram_sched.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +dram_sched.o: /usr/include/stdlib.h /usr/include/sys/types.h +dram_sched.o: /usr/include/time.h /usr/include/endian.h +dram_sched.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +dram_sched.o: /usr/include/sys/select.h /usr/include/bits/select.h +dram_sched.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +dram_sched.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +dram_sched.o: /usr/include/alloca.h delayqueue.h /usr/include/assert.h +dram_sched.o: ../cuda-sim/dram_callback.h shader.h /usr/include/math.h +dram_sched.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h +dram_sched.o: /usr/include/bits/mathcalls.h /usr/include/limits.h +dram_sched.o: /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h +dram_sched.o: /usr/include/linux/limits.h /usr/include/bits/posix2_lim.h +dram_sched.o: ../cuda-sim/ptx.tab.h gpu-cache.h ../abstract_hardware_model.h +dram_sched.o: stack.h gpu-sim.h /usr/include/zlib.h /usr/include/zconf.h +dram_sched.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h +dram_sched.o: /usr/include/bits/confname.h /usr/include/getopt.h +dram_sched.o: ../option_parser.h mem_fetch.h addrdec.h gpu-misc.h +dwf.o: dwf.h ../abstract_hardware_model.h histogram.h /usr/include/string.h +dwf.o: /usr/include/features.h /usr/include/sys/cdefs.h +dwf.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +dwf.o: /usr/include/gnu/stubs-64.h +gpu-cache.o: gpu-cache.h /usr/include/stdio.h /usr/include/features.h +gpu-cache.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +gpu-cache.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +gpu-cache.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +gpu-cache.o: /usr/include/libio.h /usr/include/_G_config.h +gpu-cache.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +gpu-cache.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h +gpu-cache.o: /usr/include/sys/types.h /usr/include/time.h +gpu-cache.o: /usr/include/endian.h /usr/include/bits/endian.h +gpu-cache.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +gpu-cache.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +gpu-cache.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +gpu-cache.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +gpu-cache.o: ../abstract_hardware_model.h gpu-misc.h addrdec.h +gpu-cache.o: /usr/include/assert.h ../option_parser.h /usr/include/string.h +gpu-misc.o: gpu-misc.h +gpu-sim.o: gpu-sim.h /usr/include/stdio.h /usr/include/features.h +gpu-sim.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +gpu-sim.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +gpu-sim.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +gpu-sim.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +gpu-sim.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +gpu-sim.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +gpu-sim.o: /usr/include/endian.h /usr/include/bits/endian.h +gpu-sim.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +gpu-sim.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +gpu-sim.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +gpu-sim.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +gpu-sim.o: /usr/include/math.h /usr/include/bits/huge_val.h +gpu-sim.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h +gpu-sim.o: /usr/include/zlib.h /usr/include/zconf.h /usr/include/unistd.h +gpu-sim.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h +gpu-sim.o: /usr/include/getopt.h ../option_parser.h shader.h +gpu-sim.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +gpu-sim.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +gpu-sim.o: /usr/include/bits/posix2_lim.h /usr/include/assert.h +gpu-sim.o: ../cuda-sim/ptx.tab.h ../cuda-sim/dram_callback.h gpu-cache.h +gpu-sim.o: ../abstract_hardware_model.h delayqueue.h stack.h dram.h +gpu-sim.o: mem_fetch.h addrdec.h gpu-misc.h icnt_wrapper.h dwf.h +gpu-sim.o: warp_tracker.h cflogger.h l2cache.h ../cuda-sim/ptx-stats.h +gpu-sim.o: ../intersim/statwraper.h ../debug.h ../abstract_hardware_model.h +gpu-sim.o: /usr/include/string.h mem_latency_stat.h +icnt_wrapper.o: icnt_wrapper.h /usr/include/assert.h /usr/include/features.h +icnt_wrapper.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +icnt_wrapper.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +icnt_wrapper.o: ../intersim/interconnect_interface.h ../intersim/flit.hpp +icnt_wrapper.o: ../intersim/booksim.hpp ../intersim/trafficmanager.hpp +icnt_wrapper.o: ../intersim/module.hpp ../intersim/config_utils.hpp +icnt_wrapper.o: /usr/include/stdio.h /usr/include/bits/types.h +icnt_wrapper.o: /usr/include/bits/typesizes.h /usr/include/libio.h +icnt_wrapper.o: /usr/include/_G_config.h /usr/include/wchar.h +icnt_wrapper.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +icnt_wrapper.o: ../intersim/network.hpp ../intersim/credit.hpp +icnt_wrapper.o: ../intersim/router.hpp ../intersim/buffer_state.hpp +icnt_wrapper.o: ../intersim/stats.hpp ../intersim/traffic.hpp +icnt_wrapper.o: ../intersim/routefunc.hpp ../intersim/outputset.hpp +icnt_wrapper.o: ../intersim/injection.hpp +l2cache.o: /usr/include/stdlib.h /usr/include/features.h +l2cache.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +l2cache.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +l2cache.o: /usr/include/sys/types.h /usr/include/bits/types.h +l2cache.o: /usr/include/bits/typesizes.h /usr/include/time.h +l2cache.o: /usr/include/endian.h /usr/include/bits/endian.h +l2cache.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +l2cache.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +l2cache.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +l2cache.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +l2cache.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h +l2cache.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +l2cache.o: /usr/include/bits/sys_errlist.h /usr/include/string.h +l2cache.o: ../tr1_hash_map.h ../option_parser.h mem_fetch.h shader.h +l2cache.o: /usr/include/math.h /usr/include/bits/huge_val.h +l2cache.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h +l2cache.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +l2cache.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +l2cache.o: /usr/include/bits/posix2_lim.h /usr/include/assert.h +l2cache.o: ../cuda-sim/ptx.tab.h ../cuda-sim/dram_callback.h gpu-cache.h +l2cache.o: ../abstract_hardware_model.h delayqueue.h stack.h dram.h addrdec.h +l2cache.o: histogram.h l2cache.h ../intersim/statwraper.h +shader.o: shader.h /usr/include/stdio.h /usr/include/features.h +shader.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +shader.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +shader.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +shader.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +shader.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +shader.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +shader.o: /usr/include/endian.h /usr/include/bits/endian.h +shader.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +shader.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +shader.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +shader.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +shader.o: /usr/include/math.h /usr/include/bits/huge_val.h +shader.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h +shader.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +shader.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +shader.o: /usr/include/bits/posix2_lim.h /usr/include/assert.h +shader.o: ../cuda-sim/ptx.tab.h ../cuda-sim/dram_callback.h gpu-cache.h +shader.o: ../abstract_hardware_model.h delayqueue.h stack.h dram.h gpu-sim.h +shader.o: /usr/include/zlib.h /usr/include/zconf.h /usr/include/unistd.h +shader.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h +shader.o: /usr/include/getopt.h ../option_parser.h mem_fetch.h addrdec.h +shader.o: dwf.h warp_tracker.h cflogger.h gpu-misc.h ../cuda-sim/ptx_sim.h +shader.o: ../cuda-sim/dram_callback.h ../cuda-sim/opcodes.h +shader.o: ../cuda-sim/opcodes.def ../cuda-sim/ptx-stats.h +shader.o: /usr/include/string.h +stack.o: stack.h ../abstract_hardware_model.h /usr/include/stdlib.h +stack.o: /usr/include/features.h /usr/include/sys/cdefs.h +stack.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +stack.o: /usr/include/gnu/stubs-64.h /usr/include/sys/types.h +stack.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +stack.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h +stack.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +stack.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +stack.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +stack.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +stack.o: /usr/include/assert.h +stat-tool.o: /usr/include/stdio.h /usr/include/features.h +stat-tool.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +stat-tool.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +stat-tool.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +stat-tool.o: /usr/include/libio.h /usr/include/_G_config.h +stat-tool.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +stat-tool.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h +stat-tool.o: /usr/include/sys/types.h /usr/include/time.h +stat-tool.o: /usr/include/endian.h /usr/include/bits/endian.h +stat-tool.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +stat-tool.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +stat-tool.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +stat-tool.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +stat-tool.o: /usr/include/assert.h /usr/include/zlib.h /usr/include/zconf.h +stat-tool.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h +stat-tool.o: /usr/include/bits/confname.h /usr/include/getopt.h histogram.h +stat-tool.o: ../abstract_hardware_model.h cflogger.h +visualizer.o: gpu-sim.h /usr/include/stdio.h /usr/include/features.h +visualizer.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +visualizer.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +visualizer.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +visualizer.o: /usr/include/libio.h /usr/include/_G_config.h +visualizer.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +visualizer.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h +visualizer.o: /usr/include/sys/types.h /usr/include/time.h +visualizer.o: /usr/include/endian.h /usr/include/bits/endian.h +visualizer.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +visualizer.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +visualizer.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +visualizer.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +visualizer.o: /usr/include/math.h /usr/include/bits/huge_val.h +visualizer.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h +visualizer.o: /usr/include/zlib.h /usr/include/zconf.h /usr/include/unistd.h +visualizer.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h +visualizer.o: /usr/include/getopt.h ../option_parser.h shader.h +visualizer.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +visualizer.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +visualizer.o: /usr/include/bits/posix2_lim.h /usr/include/assert.h +visualizer.o: ../cuda-sim/ptx.tab.h ../cuda-sim/dram_callback.h gpu-cache.h +visualizer.o: ../abstract_hardware_model.h delayqueue.h stack.h dram.h +visualizer.o: mem_fetch.h addrdec.h /usr/include/string.h +visualizer.o: ../gpgpu-sim/shader.h ../gpgpu-sim/mem_fetch.h +warp_tracker.o: warp_tracker.h ../abstract_hardware_model.h shader.h +warp_tracker.o: /usr/include/stdio.h /usr/include/features.h +warp_tracker.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +warp_tracker.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +warp_tracker.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +warp_tracker.o: /usr/include/libio.h /usr/include/_G_config.h +warp_tracker.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +warp_tracker.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h +warp_tracker.o: /usr/include/sys/types.h /usr/include/time.h +warp_tracker.o: /usr/include/endian.h /usr/include/bits/endian.h +warp_tracker.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +warp_tracker.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +warp_tracker.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +warp_tracker.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +warp_tracker.o: /usr/include/math.h /usr/include/bits/huge_val.h +warp_tracker.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h +warp_tracker.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +warp_tracker.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +warp_tracker.o: /usr/include/bits/posix2_lim.h /usr/include/assert.h +warp_tracker.o: ../cuda-sim/ptx.tab.h ../cuda-sim/dram_callback.h gpu-cache.h +warp_tracker.o: delayqueue.h stack.h dram.h diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc index 2b4ebe3..1bec72f 100644 --- a/src/gpgpu-sim/gpu-sim.cc +++ b/src/gpgpu-sim/gpu-sim.cc @@ -82,6 +82,7 @@ #include "../cuda-sim/ptx-stats.h" #include "../intersim/statwraper.h" #include "../abstract_hardware_model.h" +#include "../debug.h" #include #include @@ -206,7 +207,6 @@ void check_time_vector_update(unsigned int uid,int slot ,long int latency,int ty void node_req_hist_clear(void *p); void node_req_hist_dump(void *p); void node_req_hist_update(void * p,int node, long long cycle); -static void gpgpu_debug(); /* functionally simulated memory */ extern struct mem_t *mem; @@ -1765,111 +1765,3 @@ void dump_pipeline() dump_pipeline_impl(0,-1,-1); } -/// interactive debugger - -static void gpgpu_debug() -{ - bool done=true; - - static bool single_step=true; - static unsigned next_brkpt=1; - static std::map breakpoints; - - /// if single stepping, go to interactive debugger - - if( single_step ) - done=false; - - /// check if we've reached a breakpoint - - for( std::map::iterator i=breakpoints.begin(); i!=breakpoints.end(); i++) { - unsigned num=i->first; - brk_pt &b=i->second; - if( b.is_watchpoint() ) { - unsigned addr = b.get_addr(); - unsigned new_value = read_location(addr); - if( new_value != b.get_value() ) { - printf( "GPGPU-Sim DBG: watch point %u triggered (old value=%x, new value=%x)\n", - num,b.get_value(),new_value ); - b.set_value(new_value); - done = false; - } - } else { - for( unsigned sid=0; sid < gpu_n_shader; sid++ ) { - inst_t *fvi = first_valid_thread(sc[sid]->pipeline_reg[IF_ID]); - if( !fvi ) continue; - if( thread_at_brkpt(fvi->ptx_thd_info, b) ) { - done = false; - printf("GPGPU-Sim DBG: reached breakpoint %u at %s (sm=%u, hwtid=%u)\n", - num, b.location().c_str(), sid, fvi->hw_thread_id ); - } - } - } - } - - /// enter interactive debugger loop - - while (!done) { - printf("(gpgpu-sim dbg) "); - fflush(stdout); - - char line[1024]; - fgets(line,1024,stdin); - - char *tok = strtok(line," \t\n"); - if( !strcmp(tok,"dp") ) { - int shader_num = 0; - tok = strtok(NULL," \t\n"); - sscanf(tok,"%d",&shader_num); - dump_pipeline_impl((0x40|0x4|0x1),shader_num,0); - printf("\n"); - fflush(stdout); - } else if( !strcmp(tok,"q") || !strcmp(tok,"quit") ) { - printf("\nreally quit GPGPU-Sim (y/n)?\n"); - fgets(line,1024,stdin); - tok = strtok(NULL," \t\n"); - if( !strcmp(tok,"y") ) { - exit(0); - } else { - printf("not quiting.\n"); - } - } else if( !strcmp(tok,"b") ) { - tok = strtok(NULL," \t\n"); - char brkpt[1024]; - sscanf(tok,"%s",brkpt); - tok = strtok(NULL," \t\n"); - unsigned uid; - sscanf(tok,"%u",&uid); - breakpoints[next_brkpt++] = brk_pt(brkpt,uid); - } else if( !strcmp(tok,"d") ) { - tok = strtok(NULL," \t\n"); - unsigned uid; - sscanf(tok,"%u",&uid); - breakpoints.erase(uid); - } else if( !strcmp(tok,"s") ) { - done = true; - } else if( !strcmp(tok,"c") ) { - single_step=false; - done = true; - } else if( !strcmp(tok,"w") ) { - tok = strtok(NULL," \t\n"); - unsigned addr; - sscanf(tok,"%x",&addr); - unsigned value = read_location(addr); - breakpoints[next_brkpt++] = brk_pt(addr,value); - } else if( !strcmp(tok,"h") ) { - printf("commands:\n"); - printf(" q - quit GPGPU-Sim\n"); - printf(" b : - set breakpoint\n"); - printf(" w - set watchpoint\n"); - printf(" del - delete breakpoint\n"); - printf(" s - single step one shader cycle (all cores)\n"); - printf(" c - continue simulation without single stepping\n"); - printf(" dp - display pipeline contents on SM \n"); - printf(" h - print this message\n"); - } else { - printf("\ncommand not understood.\n"); - } - fflush(stdout); - } -} diff --git a/src/gpgpu-sim/gpu-sim.h b/src/gpgpu-sim/gpu-sim.h index e30797e..27d83ad 100644 --- a/src/gpgpu-sim/gpu-sim.h +++ b/src/gpgpu-sim/gpu-sim.h @@ -112,5 +112,6 @@ void gpu_print_stat(); int mem_ctrl_full( int mc_id ); void dramqueue_latency_log_dump(); +void dump_pipeline_impl( int mask, int s, int m ); #endif diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h index 9f64da5..9dd7dc8 100644 --- a/src/gpgpu-sim/shader.h +++ b/src/gpgpu-sim/shader.h @@ -896,5 +896,7 @@ unsigned int max_cta_per_shader( shader_core_ctx_t *shader); #define WB_RT 6 #define ID_OC 7 +extern unsigned int gpu_n_shader; +extern shader_core_ctx_t **sc; #endif /* SHADER_H */ -- cgit v1.3