get_phi_kernel_function.sh 2.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/env bash

# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#=================================================
#                   Utils
#=================================================

set -e

#step 1:get kernel registered info
kernel_register_info_file=`mktemp`
W
Wilber 已提交
25
PADDLE_ROOT="$( cd "$( dirname "$0" )/../../" && pwd )"
26
unset GREP_OPTIONS && find ${PADDLE_ROOT}/paddle/phi/kernels -name "*.c*" \
27
  | xargs sed -e '/PD_REGISTER_\(GENERAL_\)\?KERNEL(/,/)/!d' \
W
Wilber 已提交
28
  | awk 'BEGIN { RS="{" }{ gsub(/\n /,""); print $0 }' \
29
  | grep PD_REGISTER \
W
Wilber 已提交
30
  | awk -F ",|\(|\)" '{gsub(/ /,"");$1="";print}' \
31
  | sort -u  | awk '{gsub(/phi::/,"");gsub(/paddle::platform::/,"");gsub(/dtype::/,"");gsub(/paddle::/,"");print $0}' \
W
Wilber 已提交
32
  | grep -v "_grad" > $kernel_register_info_file
33 34 35 36 37 38 39 40

#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 \
  --api_yaml_path ${PADDLE_ROOT}/python/paddle/utils/code_gen/api.yaml \
  --wrapped_infermeta_header_path ${temp_path}/generate.h \
  --wrapped_infermeta_source_path ${temp_path}/generate.cc

41
grep PD_REGISTER_INFER_META_FN ${temp_path}/generate.cc  \
42 43 44
  | awk -F "\(|,|::|\)" '{print $2, $4}' > ${temp_path}/wrap_info.txt

#step 3: merge all infos
45
#  @input1 => phi kernel infomation : kernel_name kernel_key(GPU/CPU, precision, layout)
46 47 48
#  @input2 => information from api.yaml : kernel_name kernel_function_name inferMeta_function_name 
#  @input3 => information from wrapped_infermeta_gen : ensure the inferMeta function has
#             same signature with kernel function
49
python3 ${PADDLE_ROOT}/tools/infrt/get_phi_kernel_info.py \
50 51
  --paddle_root_path ${PADDLE_ROOT} \
  --kernel_info_file $kernel_register_info_file \
W
Wilber 已提交
52
  --infermeta_wrap_file ${temp_path}/wrap_info.txt \
53
  --generate_file ${PADDLE_ROOT}/paddle/infrt/kernel/phi/infershaped/infershaped_kernel_launchers.cc