kernel_signature_generator.cc 3.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// 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"
18
#include "paddle/fluid/framework/phi_utils.h"
19
#include "paddle/fluid/pybind/pybind.h"  // NOLINT
20 21 22 23
#include "paddle/phi/core/compat/op_utils.h"
#include "paddle/phi/core/kernel_factory.h"
#include "paddle/phi/core/kernel_registry.h"
#include "paddle/phi/kernels/declarations.h"
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

// 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();
45 46
  auto &kernel_signature_map = phi::DefaultKernelSignatureMap::Instance();
  auto &kernel_factory = phi::KernelFactory::Instance();
47
  std::string kernel_signature_map_str{"{"};
48
  for (const auto &op_kernel_pair : kernel_factory.kernels()) {
49 50 51 52 53 54 55 56 57 58
    std::string op_name = op_kernel_pair.first;
    const paddle::flat_hash_map<std::string, std::string> &kernel_name_map =
        phi::OpUtilsMap::Instance().base_kernel_name_map();
    for (auto &it : kernel_name_map) {
      if (it.second == op_name) {
        op_name = it.first;
        break;
      }
    }
    if (kernel_signature_map.Has(op_name)) {
59 60
      kernel_signature_map_str =
          kernel_signature_map_str + "\"" + op_kernel_pair.first + "\":{";
61
      const auto &args = kernel_signature_map.Get(op_name);
62

63
      kernel_signature_map_str += "\"inputs\":[";
64
      auto inputs_ = args.input_names;
65 66 67
      for (size_t i = 0; i < inputs_.size(); i++) {
        kernel_signature_map_str =
            kernel_signature_map_str + "\"" + inputs_[i] + "\",";
68
      }
69
      if (inputs_.size()) kernel_signature_map_str.pop_back();
70

71
      kernel_signature_map_str += "],\"attrs\":[";
72
      auto attrs_ = args.attr_names;
73 74 75
      for (size_t i = 0; i < attrs_.size(); i++) {
        kernel_signature_map_str =
            kernel_signature_map_str + "\"" + attrs_[i] + "\",";
76
      }
77 78
      if (attrs_.size()) kernel_signature_map_str.pop_back();
      kernel_signature_map_str += "],\"outputs\":[";
79
      auto outputs_ = args.output_names;
80 81 82
      for (size_t i = 0; i < outputs_.size(); i++) {
        kernel_signature_map_str =
            kernel_signature_map_str + "\"" + outputs_[i] + "\",";
83
      }
84

85 86
      if (outputs_.size()) kernel_signature_map_str.pop_back();
      kernel_signature_map_str += "]},";
87 88
    }
  }
89 90 91
  kernel_signature_map_str.pop_back();
  kernel_signature_map_str += "}\n";
  std::cout << kernel_signature_map_str;
92 93
  return 0;
}