75 lines
3.5 KiB
C++
75 lines
3.5 KiB
C++
// Copyright (c) 2021 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.
|
|
|
|
int run_generator(int argc, char* argv[]);
|
|
|
|
#pragma once
|
|
|
|
#include <map>
|
|
#include <set>
|
|
#include <string>
|
|
|
|
// NOTE(zhiqiu): Commonly, the inputs in auto-generated OP function are
|
|
// determined by the OP`s proto automatically, i.e., all the inputs registered
|
|
// in OpMaker.
|
|
// However, some OPs have dispensable inputs, which means the input can
|
|
// be none for some conditions. It is discovered that most dispensable inputs
|
|
// is not used in imperative mode, so we drop those inputs when generating OP
|
|
// functions. While, for very few OPs, the dispensable inputs are used, we
|
|
// need to manually specify them in this map.
|
|
extern std::map<std::string, std::set<std::string>> op_ins_map;
|
|
|
|
// NOTE(zhiqiu): Like op_ins_map.
|
|
// Commonly, the outputs in auto-generated OP function are determined by the
|
|
// OP`s proto automatically, i.e., all the outputs registered in OpMaker.
|
|
// However, some OPs have dispensable outputs, which means the output can
|
|
// be none for some conditions. It is discovered that most dispensable outputs
|
|
// is not used in imperative mode, so we drop those outputs when generating OP
|
|
// functions. While, for very few OPs, the dispensable outputs are used, we
|
|
// need to manually specify them in this map.
|
|
extern std::map<std::string, std::set<std::string>> op_outs_map;
|
|
|
|
// NOTE(zhiqiu): Commonly, the outputs in auto-generated OP function are
|
|
// generated in C++ automatically.
|
|
// However, some OPs need to pass the outputs from Python instead of generating
|
|
// them in C++. There are mainly 2 reasons for that,
|
|
// (1) Optimizer OPs need to update the input param in-place, like sgd.
|
|
// So they need to pass the output which is same as input param.
|
|
// (2) Very few python APIs has out in their arguments, like fill_constant.
|
|
// So they need to pass the python output to C++.
|
|
// Actually, this is not a good design, since it may break the SSA graph,
|
|
// especially in declarative mode.
|
|
// For those OPs, we need to manually specify the outs need to pass in this map.
|
|
extern std::map<std::string, std::set<std::string>> op_passing_outs_map;
|
|
|
|
// NOTE(pangyoki): Tensor View Strategy.
|
|
// In this case, a new output varbase will be created, and this varbase will
|
|
// reuse the input varbase's allocation.
|
|
// It's a map. The key of outer map is the view op name, the value is
|
|
// a pair which implies the mapping relationship between the input and
|
|
// output varbase.
|
|
extern std::map<std::string, std::pair<std::string, std::string>> view_op_map;
|
|
|
|
// NOTE(pangyoki): Special inplace ops that are not supported in temporary.
|
|
// The input and output of some inplace ops are special, such as
|
|
// duplicate input. These inplace ops have no usage scenarios and
|
|
// are not supported in temporary.
|
|
extern std::set<std::string> special_inplace_op_set;
|
|
|
|
// NOTE(pangyoki): Special no_need_buffer ops that are not supported in
|
|
// temporary.
|
|
// sequence_conv op will raise error to get no_need_buffer info during
|
|
// compiling.
|
|
extern std::set<std::string> special_no_need_buffer_op_set;
|