kernel_signature_generator.cc 2.9 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 49
  for (const auto &op_kernel_pair : kernel_factory.kernels()) {
    if (kernel_signature_map.Has(op_kernel_pair.first)) {
50 51
      kernel_signature_map_str =
          kernel_signature_map_str + "\"" + op_kernel_pair.first + "\":{";
52
      auto &args = kernel_signature_map.Get(op_kernel_pair.first).args;
53

54
      kernel_signature_map_str += "\"inputs\":[";
55
      auto inputs_ = std::get<0>(args);
56 57 58
      for (size_t i = 0; i < inputs_.size(); i++) {
        kernel_signature_map_str =
            kernel_signature_map_str + "\"" + inputs_[i] + "\",";
59
      }
60
      if (inputs_.size()) kernel_signature_map_str.pop_back();
61

62
      kernel_signature_map_str += "],\"attrs\":[";
63
      auto attrs_ = std::get<1>(args);
64 65 66
      for (size_t i = 0; i < attrs_.size(); i++) {
        kernel_signature_map_str =
            kernel_signature_map_str + "\"" + attrs_[i] + "\",";
67
      }
68 69
      if (attrs_.size()) kernel_signature_map_str.pop_back();
      kernel_signature_map_str += "],\"outputs\":[";
70
      auto outputs_ = std::get<2>(args);
71 72 73
      for (size_t i = 0; i < outputs_.size(); i++) {
        kernel_signature_map_str =
            kernel_signature_map_str + "\"" + outputs_[i] + "\",";
74
      }
75

76 77
      if (outputs_.size()) kernel_signature_map_str.pop_back();
      kernel_signature_map_str += "]},";
78 79
    }
  }
80 81 82
  kernel_signature_map_str.pop_back();
  kernel_signature_map_str += "}\n";
  std::cout << kernel_signature_map_str;
83 84
  return 0;
}