-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
move get expected kernel args into pten (#38825)
- Loading branch information
Showing
14 changed files
with
235 additions
and
68 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/* 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 "paddle/pten/core/arg_map_context.h" | ||
|
||
#include "paddle/fluid/platform/enforce.h" | ||
#include "paddle/fluid/string/string_helper.h" | ||
|
||
namespace pten { | ||
|
||
OpArgumentMappingFnMap& OpArgumentMappingFnMap::Instance() { | ||
static OpArgumentMappingFnMap g_op_arg_mapping_fn_map; | ||
return g_op_arg_mapping_fn_map; | ||
} | ||
|
||
bool OpArgumentMappingFnMap::Has(const std::string& op_type) const { | ||
return fn_map_.find(op_type) != fn_map_.end(); | ||
} | ||
|
||
const ArgumentMappingFn& OpArgumentMappingFnMap::Get( | ||
const std::string& op_type) const { | ||
auto it = fn_map_.find(op_type); | ||
PADDLE_ENFORCE_NE( | ||
it, | ||
fn_map_.end(), | ||
paddle::platform::errors::NotFound( | ||
"Operator `%s`'s argument mapping funciton is not registered.", | ||
op_type)); | ||
return it->second; | ||
} | ||
|
||
void OpArgumentMappingFnMap::Emplace(const std::string& op_type, | ||
const std::string api_name, | ||
ArgumentMappingFn fn) { | ||
name_map_.emplace(op_type, api_name); | ||
fn_map_.emplace(op_type, fn); | ||
} | ||
|
||
std::ostream& operator<<(std::ostream& os, KernelSignature signature) { | ||
os << "Kernel Signature - name: " << signature.name << "; inputs: " | ||
<< paddle::string::join_strings(std::get<0>(signature.args), ", ") | ||
<< "; attributes: " | ||
<< paddle::string::join_strings(std::get<1>(signature.args), ", ") | ||
<< "; outputs: " | ||
<< paddle::string::join_strings(std::get<2>(signature.args), ", "); | ||
return os; | ||
} | ||
|
||
} // namespace pten |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* 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. */ | ||
|
||
#pragma once | ||
|
||
#include <ostream> | ||
#include <string> | ||
#include <tuple> | ||
|
||
#include "paddle/utils/flat_hash_map.h" | ||
#include "paddle/utils/small_vector.h" | ||
|
||
namespace pten { | ||
|
||
// tuple(input_names, attr_names, output_names) | ||
using KernelArgsTuple = std::tuple<paddle::SmallVector<std::string>, | ||
paddle::SmallVector<std::string>, | ||
paddle::SmallVector<std::string>>; | ||
|
||
// TODO(chenweihang): Add more methods if needed in future | ||
class ArgumentMappingContext { | ||
public: | ||
virtual ~ArgumentMappingContext() = default; | ||
|
||
virtual bool HasInput(const std::string& name) const = 0; | ||
virtual bool HasOutput(const std::string& name) const = 0; | ||
virtual bool HasAttr(const std::string& name) const = 0; | ||
|
||
virtual size_t InputSize(const std::string& name) const = 0; | ||
virtual size_t OutputSize(const std::string& name) const = 0; | ||
|
||
virtual bool IsDenseTensorInput(const std::string& name) const = 0; | ||
virtual bool IsSelectedRowsInput(const std::string& name) const = 0; | ||
}; | ||
|
||
struct KernelSignature { | ||
std::string name; | ||
KernelArgsTuple args; | ||
|
||
KernelSignature() = default; | ||
KernelSignature(std::string&& kernel_name, | ||
paddle::SmallVector<std::string>&& inputs, | ||
paddle::SmallVector<std::string>&& attrs, | ||
paddle::SmallVector<std::string>&& outputs) | ||
: name(std::move(kernel_name)), | ||
args(std::make_tuple(inputs, attrs, outputs)) {} | ||
KernelSignature(const std::string& kernel_name, | ||
const paddle::SmallVector<std::string>& inputs, | ||
const paddle::SmallVector<std::string>& attrs, | ||
const paddle::SmallVector<std::string>& outputs) | ||
: name(kernel_name), args(std::make_tuple(inputs, attrs, outputs)) {} | ||
}; | ||
|
||
std::ostream& operator<<(std::ostream& os, KernelSignature signature); | ||
|
||
using ArgumentMappingFn = KernelSignature (*)(const ArgumentMappingContext&); | ||
|
||
class OpArgumentMappingFnMap { | ||
public: | ||
static OpArgumentMappingFnMap& Instance(); | ||
|
||
bool Has(const std::string& op_type) const; | ||
|
||
const ArgumentMappingFn& Get(const std::string& op_type) const; | ||
|
||
void Emplace(const std::string& op_type, | ||
const std::string api_name, | ||
ArgumentMappingFn fn); | ||
|
||
private: | ||
paddle::flat_hash_map<std::string, std::string> name_map_; | ||
paddle::flat_hash_map<std::string, ArgumentMappingFn> fn_map_; | ||
}; | ||
|
||
} // namespace pten |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.