From 888dd6c18d927d93856c721a06c7155d5eac2d53 Mon Sep 17 00:00:00 2001 From: Wilson Fung Date: Thu, 16 Aug 2012 20:11:16 -0800 Subject: Integration from TM-311 branch. - Updated PTX parser to support CUDA 4.1 and 4.2. - Revised fatbin workaround to a more robust version (with comments explaining it). - Added print_simulation_time() in gpgpu_sim_thread_concurrent(). [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 13789] --- src/cuda-sim/ptx.l | 8 ++++---- src/cuda-sim/ptx.y | 1 + src/cuda-sim/ptxinfo.y | 3 ++- src/gpgpusim_entrypoint.cc | 7 ++++--- 4 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/cuda-sim/ptx.l b/src/cuda-sim/ptx.l index 4747181..2d0e065 100644 --- a/src/cuda-sim/ptx.l +++ b/src/cuda-sim/ptx.l @@ -66,8 +66,8 @@ bfind TC; ptx_lval.int_value = BFIND_OP; return OPCODE; bra TC; ptx_lval.int_value = BRA_OP; return OPCODE; brev TC; ptx_lval.int_value = BREV_OP; return OPCODE; brkpt TC; ptx_lval.int_value = BRKPT_OP; return OPCODE; -call TC; ptx_lval.int_value = CALL_OP; return OPCODE; -callp TC; ptx_lval.int_value = CALLP_OP; return OPCODE; +call TC; BEGIN(NOT_OPCODE); ptx_lval.int_value = CALL_OP; return OPCODE; // blocking opcode token in case the callee has the same name as an opcode +callp TC; BEGIN(NOT_OPCODE); ptx_lval.int_value = CALLP_OP; return OPCODE; clz TC; ptx_lval.int_value = CLZ_OP; return OPCODE; cnot TC; ptx_lval.int_value = CNOT_OP; return OPCODE; cos TC; ptx_lval.int_value = COS_OP; return OPCODE; @@ -155,7 +155,7 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; \.entry TC; return ENTRY_DIRECTIVE; \.extern TC; return EXTERN_DIRECTIVE; \.file TC; BEGIN(INITIAL); return FILE_DIRECTIVE; -\.func TC; BEGIN(NOT_OPCODE); return FUNC_DIRECTIVE; +\.func TC; BEGIN(NOT_OPCODE); return FUNC_DIRECTIVE; // blocking opcode parsing in case the function has the same name as an opcode (e.g. sin(), cos()) \.global TC; return GLOBAL_DIRECTIVE; \.local TC; return LOCAL_DIRECTIVE; \.loc TC; return LOC_DIRECTIVE; @@ -352,7 +352,7 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; ";" TC; BEGIN(INITIAL); return SEMI_COLON; "!" TC; return EXCLAMATION; "=" TC; return EQUALS; -"{" TC; return LEFT_BRACE; +"{" TC; BEGIN(INITIAL); return LEFT_BRACE; // starting a statement block (allow next token to be parsed as an opcode) "}" TC; return RIGHT_BRACE; \. TC; return PERIOD; "/" TC; return BACKSLASH; diff --git a/src/cuda-sim/ptx.y b/src/cuda-sim/ptx.y index 2c01a70..5b69975 100644 --- a/src/cuda-sim/ptx.y +++ b/src/cuda-sim/ptx.y @@ -259,6 +259,7 @@ directive_statement: variable_declaration SEMI_COLON | FILE_DIRECTIVE INT_OPERAND STRING { add_file($2,$3); } | LOC_DIRECTIVE INT_OPERAND INT_OPERAND INT_OPERAND | PRAGMA_DIRECTIVE STRING SEMI_COLON { add_pragma($2); } + | function_decl SEMI_COLON {/*Do nothing*/} ; variable_declaration: variable_spec identifier_list { add_variables(); } diff --git a/src/cuda-sim/ptxinfo.y b/src/cuda-sim/ptxinfo.y index 8bc1306..e4ba6b2 100644 --- a/src/cuda-sim/ptxinfo.y +++ b/src/cuda-sim/ptxinfo.y @@ -51,7 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. %token SEMICOLON %token QUOTE %token LINE -%token WARNING +%token WARNING %token FOR %{ @@ -78,6 +78,7 @@ input: /* empty */ line: HEADER INFO COLON line_info | HEADER IDENTIFIER COMMA LINE INT_OPERAND SEMICOLON WARNING + | HEADER WARNING { printf("GPGPU-Sim: ptxas %s\n", $2); } ; line_info: function_name diff --git a/src/gpgpusim_entrypoint.cc b/src/gpgpusim_entrypoint.cc index 006cecd..6271f79 100644 --- a/src/gpgpusim_entrypoint.cc +++ b/src/gpgpusim_entrypoint.cc @@ -132,9 +132,10 @@ void *gpgpu_sim_thread_concurrent(void*) printf("GPGPU-Sim: ** STOP simulation thread (no work) **\n"); fflush(stdout); } - if(sim_cycles) { - g_the_gpu->update_stats(); - } + if(sim_cycles) { + g_the_gpu->update_stats(); + print_simulation_time(); + } pthread_mutex_lock(&g_sim_lock); g_sim_active = false; pthread_mutex_unlock(&g_sim_lock); -- cgit v1.3