adding hip_prof_gen verbose log (#977)

* adding hip_prof_gen verbose log

* adding stderr fatal error

* adding no error exit by default

* adding hip_prof_str regeneration dependencies

* adding more informative messages

* fixing error mesage
This commit is contained in:
eshcherb
2019-03-21 00:28:18 -05:00
کامیت شده توسط Maneesh Gupta
والد ce72890dcf
کامیت 045c6afa2c
2فایلهای تغییر یافته به همراه42 افزوده شده و 19 حذف شده
+5 -6
مشاهده پرونده
@@ -168,12 +168,11 @@ set(PROF_API_STR "${CMAKE_CURRENT_SOURCE_DIR}/include/hip/hcc_detail/hip_prof_st
set(PROF_API_HDR "${CMAKE_CURRENT_SOURCE_DIR}/include/hip/hcc_detail/hip_runtime_api.h")
set(PROF_API_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(PROF_API_GEN "${CMAKE_CURRENT_SOURCE_DIR}/hip_prof_gen.py")
add_custom_command(
OUTPUT ${PROF_API_STR}
COMMAND ${PROF_API_GEN} ${OPT_PROF_API} ${PROF_API_HDR} ${PROF_API_SRC} ${PROF_API_STR}
DEPENDS ${PROF_API_GEN} ${PROF_API_HDR}
)
add_custom_target(prof ALL DEPENDS ${PROF_API_STR})
set(PROF_API_LOG "${PROJECT_BINARY_DIR}/hip_prof_gen.log.txt")
set(PROF_API_CMD "${PROF_API_GEN} -v ${OPT_PROF_API} ${PROF_API_HDR} ${PROF_API_SRC} ${PROF_API_STR} >${PROF_API_LOG}")
MESSAGE(STATUS "Generating profiling promitives: ${PROF_API_STR}")
execute_process(COMMAND sh -c "rm -f ${PROF_API_STR}; ${PROF_API_CMD}")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PROF_API_GEN} ${PROF_API_HDR} ${PROF_API_STR})
# Enable profiling API
if(USE_PROF_API EQUAL 1)
+37 -13
مشاهده پرونده
@@ -1,25 +1,36 @@
#!/usr/bin/python
import os, sys, re
verbose = 0
PROF_HEADER = "hip_prof_str.h"
OUTPUT = PROF_HEADER
REC_MAX_LEN = 1024
# Fatal error termination
# Messages and errors controll
verbose = 0
errexit = 0
inp_file = 'none'
line_num = -1
def fatal(msg):
if line_num != -1:
print >>sys.stderr, "Error: " + msg + ", file '" + inp_file + "', line (" + str(line_num) + ")"
else:
print >>sys.stderr, "Error: " + msg
sys.exit(1)
# Verbose message
def message(msg):
if verbose: print >>sys.stdout, msg
# Fatal error termination
def error(msg):
if line_num != -1:
msg += ", file '" + inp_file + "', line (" + str(line_num) + ")"
if errexit:
msg = " Error: " + msg
else:
msg = " Warning: " + msg
print >>sys.stdout, msg
print >>sys.stderr, sys.argv[0] + msg
def fatal(msg):
error(msg)
if errexit: sys.exit(1)
#############################################################
# Normalizing API arguments
def filtr_api_args(args_str):
@@ -77,7 +88,7 @@ def parse_api(inp_file_p, out):
global line_num
inp_file = inp_file_p
beg_pattern = re.compile("^(hipError_t|const char\s*\*)\s+[^\(]+\(");
beg_pattern = re.compile("^(hipError_t|const char\s*\*)\s+([^\(]+)\(");
api_pattern = re.compile("^(hipError_t|const char\s*\*)\s+([^\(]+)\(([^\)]*)\)");
end_pattern = re.compile("Texture");
hidden_pattern = re.compile(r'__attribute__\(\(visibility\("hidden"\)\)\)')
@@ -99,7 +110,16 @@ def parse_api(inp_file_p, out):
if len(record) > REC_MAX_LEN:
fatal("bad record \"" + record + "\"")
if beg_pattern.match(record) and (hidden == 0) and (nms_level == 0): found = 1
m = beg_pattern.match(line)
if m:
name = m.group(2)
if hidden != 0:
message("api: " + name + " - hidden")
elif nms_level != 0:
message("api: " + name + " - hip_impl")
else:
message("api: " + name)
found = 1
if found != 0:
record = re.sub("\s__dparm\([^\)]*\)", '', record);
@@ -206,7 +226,7 @@ def parse_content(inp_file_p, api_map, out):
else:
# Warning about mismatched API, possible non public overloaded version
api_diff = '\t\t' + inp_file + " line(" + str(line_num) + ")\n\t\tapi: " + api_types + "\n\t\teta: " + eta_types
message("\t" + api_name + ':\n' + api_diff + '\n')
message("\t" + api_name + ' args mismatch:\n' + api_diff + '\n')
# API found action
if found == 2:
@@ -394,6 +414,10 @@ if (len(sys.argv) > 1) and (sys.argv[1] == '-v'):
verbose = 1
sys.argv.pop(1)
if (len(sys.argv) > 1) and (sys.argv[1] == '-e'):
errexit = 1
sys.argv.pop(1)
if (len(sys.argv) < 3):
fatal ("Usage: " + sys.argv[0] + " [-v] <input HIP API .h file> <patched srcs path>\n" +
" -v - verbose messages\n" +
@@ -441,10 +465,10 @@ if len(opts_map) != 0:
args_str = api_map[name];
api_map[name] = list_api_args(args_str)
if not name in opts_map:
fatal("not found: " + name)
error("implementation not found: " + name)
not_found += 1
if not_found != 0:
fatal(not_found + " API calls not found")
fatal(str(not_found) + " API calls missing in interception layer")
# Generating output header file
with open(OUTPUT, 'w') as f: