未验证 提交 03b875a8 编写于 作者: S Shang Zhizhou 提交者: GitHub

add tool: print kernel signaturs (#39670)

* add tool: print kernel signaturs

* fix windows compile
上级 c8c24460
......@@ -137,6 +137,11 @@ if(WITH_PYTHON)
target_link_libraries(op_function_generator ${OP_FUNCTION_GENERETOR_DEPS})
add_executable(eager_op_function_generator eager_op_function_generator.cc)
target_link_libraries(eager_op_function_generator ${OP_FUNCTION_GENERETOR_DEPS})
add_executable(kernel_signature_generator kernel_signature_generator.cc)
target_link_libraries(kernel_signature_generator ${OP_FUNCTION_GENERETOR_DEPS})
if(WIN32)
target_link_libraries(kernel_signature_generator shlwapi.lib)
endif()
get_property (os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
target_link_libraries(op_function_generator ${os_dependency_modules})
......@@ -144,6 +149,7 @@ if(WITH_PYTHON)
if(WITH_ROCM)
target_link_libraries(op_function_generator ${ROCM_HIPRTC_LIB})
target_link_libraries(eager_op_function_generator ${ROCM_HIPRTC_LIB})
target_link_libraries(kernel_signature_generator ${ROCM_HIPRTC_LIB})
endif()
set(impl_file ${CMAKE_SOURCE_DIR}/paddle/fluid/pybind/op_function_impl.h)
......
// 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.
#include <iostream>
#include <string>
#include "paddle/fluid/framework/op_registry.h"
#include "paddle/fluid/framework/pten_utils.h"
#include "paddle/fluid/pybind/pybind.h" // NOLINT
#include "paddle/pten/core/compat/op_utils.h"
#include "paddle/pten/core/kernel_factory.h"
#include "paddle/pten/core/kernel_registry.h"
#include "paddle/pten/kernels/declarations.h"
// print names of kernel function params with json format:
// {
// "norm":{
// "inputs":[
// "X"
// ],
// "attrs":[
// "axis",
// "epsilon",
// "is_test"
// ],
// "outputs":[
// "Norm",
// "Out"
// ]
// },
// ...
// }
int main(int argc, char **argv) {
paddle::framework::InitDefaultKernelSignatureMap();
auto &kernel_signature_map = pten::DefaultKernelSignatureMap::Instance();
auto &kernel_factory = pten::KernelFactory::Instance();
std::cout << "{";
for (const auto &op_kernel_pair : kernel_factory.kernels()) {
if (kernel_signature_map.Has(op_kernel_pair.first)) {
std::cout << "\"" << op_kernel_pair.first << "\":{";
auto &args = kernel_signature_map.Get(op_kernel_pair.first).args;
std::cout << "\"inputs\":[";
for (auto name : std::get<0>(args)) {
std::cout << "\"" << name << "\",";
}
if (std::get<0>(args).size() > 0) std::cout << "\b";
std::cout << "],\"attrs\":[";
for (auto name : std::get<1>(args)) {
std::cout << "\"" << name << "\",";
}
if (std::get<1>(args).size() > 0) std::cout << "\b";
std::cout << "],\"outputs\":[";
for (auto name : std::get<2>(args)) {
std::cout << "\"" << name << "\",";
}
if (std::get<2>(args).size() > 0) std::cout << "\b";
std::cout << "]},";
}
}
std::cout << "\b}" << std::endl;
return 0;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册