diff --git a/paddle/infrt/kernel/phi/CMakeLists.txt b/paddle/infrt/kernel/phi/CMakeLists.txt index 15882d23743b020c289269ef09ae5e05999201a8..50f61c7ba6ad070e5de536867b8a19860ffeeb1f 100644 --- a/paddle/infrt/kernel/phi/CMakeLists.txt +++ b/paddle/infrt/kernel/phi/CMakeLists.txt @@ -17,18 +17,19 @@ set(wrapped_infermeta_source_file ${CMAKE_SOURCE_DIR}/paddle/phi/infermeta/gener add_custom_command( OUTPUT ${infrt_register_phi_kernels_gen_source_file} - COMMAND sh ${infrt_register_phi_kernels_gen_file} - DEPENDS ${wrapped_infermeta_header_file} ${wrapped_infermeta_source_file} + COMMAND bash ${infrt_register_phi_kernels_gen_file} + DEPENDS wrapped_infermeta VERBATIM) add_custom_target(infrt_register_phi_kernel - COMMAND sh ${infrt_register_phi_kernels_gen_file} - DEPENDS ${wrapped_infermeta_header_file} ${wrapped_infermeta_source_file} + COMMAND bash ${infrt_register_phi_kernels_gen_file} + DEPENDS wrapped_infermeta COMMENT "infrt generate ${infrt_register_phi_kernels_gen_source_file}" VERBATIM) cc_library(infrt_naive SRCS infershaped/infershaped_kernel_launcher.cc infershaped/infershaped_kernel_launchers.cc DEPS phi wrapped_infermeta) +add_dependencies(infrt_naive infrt_register_phi_kernel) cc_test_tiny(test_infrt_infershape_launchers SRCS infershaped/infershape_launchers_test.cc DEPS infrt) diff --git a/tools/infrt/get_phi_kernel_function.sh b/tools/infrt/get_phi_kernel_function.sh index 612620979674934ff8aa70abdf4967200f20b492..a8e597c993f26918d6db984f20f98275d329f1cb 100644 --- a/tools/infrt/get_phi_kernel_function.sh +++ b/tools/infrt/get_phi_kernel_function.sh @@ -21,9 +21,10 @@ set -e #step 1:get kernel registered info +# The shell script has some problem when register with macro, such as in `activation_kernel.c*` kernel_register_info_file=`mktemp` PADDLE_ROOT="$( cd "$( dirname "$0" )/../../" && pwd )" -unset GREP_OPTIONS && find ${PADDLE_ROOT}/paddle/phi/kernels -name "*.c*" \ +unset GREP_OPTIONS && find ${PADDLE_ROOT}/paddle/phi/kernels -name "*.c*" | grep -v "activation_kernel.c*" \ | xargs sed -e '/PD_REGISTER_\(GENERAL_\)\?KERNEL(/,/)/!d' \ | awk 'BEGIN { RS="{" }{ gsub(/\n /,""); print $0 }' \ | grep PD_REGISTER \ @@ -31,6 +32,49 @@ unset GREP_OPTIONS && find ${PADDLE_ROOT}/paddle/phi/kernels -name "*.c*" \ | sort -u | awk '{gsub(/phi::/,"");gsub(/paddle::platform::/,"");gsub(/dtype::/,"");gsub(/paddle::/,"");print $0}' \ | grep -v "_grad" > $kernel_register_info_file +# handle `activation_kernel.cc` case by case. +find ${PADDLE_ROOT}/paddle/phi/kernels -name "activation_kernel.cc" | xargs sed -e '/PD_REGISTER_KERNEL(relu/,/)/!d' \ + | awk 'BEGIN { RS="{" }{ gsub(/\n /,""); print $0 }' | grep PD_REGISTER_KERNEL \ + | awk -F ",|\(|\)" '{gsub(/ /,"");$1="";print}' \ + | sort -u | awk '{gsub(/phi::/,"");gsub(/paddle::platform::/,"");gsub(/dtype::/,"");gsub(/paddle::/,"");print $0}' \ + | grep -v "_grad" >> $kernel_register_info_file +act_temp=$(find ${PADDLE_ROOT}/paddle/phi/kernels -name "activation_kernel.cc" | xargs sed -e '/PD_REGISTER_KERNEL(name/,/)/!d' \ + | awk 'BEGIN { RS="{" }{ gsub(/\n /,""); print $0 }' | grep -E "PD_REGISTER_(GENERAL_)?KERNEL" \ + | awk -F ",|\(|\)" '{gsub(/ /,"");gsub(/\\/,"");$1="";print}' | sort -u \ + | awk '{gsub(/phi::/,"");gsub(/paddle::platform::/,"");gsub(/dtype::/,"");gsub(/paddle::/,"");print $0}' \ + | grep -v "_grad") +all_act_arg=$(find ${PADDLE_ROOT}/paddle/phi/kernels -name "activation_kernel.cc" | xargs sed -e '/PD_REGISTER_ACTIVATION_KERNEL(/,/)/!d' | grep -v '#define' | grep PD_REGISTER_ACTIVATION_KERNEL | awk -F "\(|\)" '{gsub(/ /,"");$1="";print}' | sed -e 's/[ \t]*$//g') +for act in $all_act_arg +do + name=${act%,*} + kernel=$(echo ${act#*,} | sed -e 's/\r//g') + tmp=${act_temp/name/${name}} + echo "${tmp/func/${kernel}}" >> $kernel_register_info_file +done + +# TODO(wilber): We just support cuda, not support rocm. +# handle `activation_kernel.cu` which register with macro. +# - process relu kernel. +find ${PADDLE_ROOT}/paddle/phi/kernels -name "activation_kernel.cu" | xargs sed -e '/PD_REGISTER_KERNEL(relu/,/)/!d' \ + | awk 'BEGIN { RS="{" }{ gsub(/\n /,""); print $0 }' | awk 'NR>2' | grep PD_REGISTER \ + | awk -F ",|\(|\)" '{gsub(/ /,"");$1="";print}' \ + | sort -u | awk '{gsub(/phi::/,"");gsub(/paddle::platform::/,"");gsub(/dtype::/,"");gsub(/paddle::/,"");print $0}' \ + | grep -v "_grad" >> $kernel_register_info_file +# - process PD_REGISTER_ACTIVATION_KERNEL kernels. +act_temp=$(find ${PADDLE_ROOT}/paddle/phi/kernels -name "activation_kernel.cu" | xargs sed -e '/PD_REGISTER_KERNEL(name/,/)/!d' \ + | awk 'BEGIN { RS="{" }{ gsub(/\n /,""); print $0 }' | grep PD_REGISTER \ + | awk -F ",|\(|\)" '{gsub(/ /,"");gsub(/\\/,"");$1="";print}' | sort -u \ + | awk '{gsub(/phi::/,"");gsub(/paddle::platform::/,"");gsub(/dtype::/,"");gsub(/paddle::/,"");print $0}' \ + | grep -v "_grad") +all_act_arg=$(find ${PADDLE_ROOT}/paddle/phi/kernels -name "activation_kernel.cu" | xargs sed -e '/PD_REGISTER_ACTIVATION_KERNEL(/,/)/!d' | grep -v '#define' | grep PD_REGISTER_ACTIVATION_KERNEL | awk -F "\(|\)" '{gsub(/ /,"");$1="";print}' | sed -e 's/[ \t]*$//g') +for act in $all_act_arg +do + name=${act%,*} + kernel=$(echo ${act#*,} | sed -e 's/\r//g') + tmp=${act_temp/name/${name}} + echo "${tmp/func/${kernel}}" >> $kernel_register_info_file +done + #step 2:get simple general inferMeta function wrap info temp_path=`mktemp -d` python3 ${PADDLE_ROOT}/python/paddle/utils/code_gen/wrapped_infermeta_gen.py \ diff --git a/tools/infrt/get_phi_kernel_info.py b/tools/infrt/get_phi_kernel_info.py index db2e56ca328171e1076f14611a637cfb1cc9644d..7d2c4757f6ac872edefb1bfe8dee11a7d414dd3f 100644 --- a/tools/infrt/get_phi_kernel_info.py +++ b/tools/infrt/get_phi_kernel_info.py @@ -56,6 +56,28 @@ def get_api_yaml_info(file_path): def get_kernel_info(file_path): + f = open(file_path, "r") + cont = f.readlines() + ret = [] + prev = [] + for line in cont: + info = line.strip().split() + if not info: + continue + + if len(prev) == 0: + ret.append(line.strip()) + prev = info + continue + + if prev[0] == info[0] and prev[1] == info[1]: + ret.pop() + ret.append(line.strip()) + prev = info + return ret + + +def get_infermeta_info(file_path): f = open(file_path, "r") cont = f.readlines() return [l.strip() for l in cont if l.strip() != ""] @@ -319,7 +341,7 @@ if __name__ == "__main__": args = parse_args() infer_meta_data = get_api_yaml_info(args.paddle_root_path) kernel_data = get_kernel_info(args.kernel_info_file) - info_meta_wrap_data = get_kernel_info(args.infermeta_wrap_file) + info_meta_wrap_data = get_infermeta_info(args.infermeta_wrap_file) attr_data = get_attr_info(args.attr_info_file) out = merge(infer_meta_data, kernel_data, info_meta_wrap_data) gen_phi_kernel_register_code(out, attr_data, args.generate_file)