Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
b798fb07
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
b798fb07
编写于
3月 07, 2022
作者:
王
王明冬
提交者:
GitHub
3月 07, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[infrt] fold the infrt.cvtTensorOp. test=develop (#40214)
上级
79a32715
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
114 addition
and
6 deletion
+114
-6
cmake/external/llvm.cmake
cmake/external/llvm.cmake
+2
-2
paddle/infrt/CMakeLists.txt
paddle/infrt/CMakeLists.txt
+0
-2
paddle/infrt/dialect/infrt/CMakeLists.txt
paddle/infrt/dialect/infrt/CMakeLists.txt
+2
-0
paddle/infrt/dialect/infrt/pass/CMakeLists.txt
paddle/infrt/dialect/infrt/pass/CMakeLists.txt
+7
-0
paddle/infrt/dialect/infrt/pass/infrt_op_fuse.td
paddle/infrt/dialect/infrt/pass/infrt_op_fuse.td
+23
-0
paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.cc
paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.cc
+52
-0
paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.h
paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.h
+24
-0
paddle/infrt/dialect/pd_op_base.td
paddle/infrt/dialect/pd_op_base.td
+1
-1
paddle/infrt/dialect/phi/phi_ir_exec.cc
paddle/infrt/dialect/phi/phi_ir_exec.cc
+2
-0
paddle/infrt/tests/dialect/phi/dense_tensor.mlir
paddle/infrt/tests/dialect/phi/dense_tensor.mlir
+0
-0
paddle/infrt/tests/dialect/phi/phi_pass.mlir
paddle/infrt/tests/dialect/phi/phi_pass.mlir
+0
-0
tools/infrt/custom_pdop.td
tools/infrt/custom_pdop.td
+1
-1
未找到文件。
cmake/external/llvm.cmake
浏览文件 @
b798fb07
...
...
@@ -100,8 +100,8 @@ endfunction()
function
(
mlir_add_rewriter td_base
)
set
(
LLVM_TARGET_DEFINITIONS
${
td_base
}
.td
)
mlir_tablegen
(
${
td_base
}
.cpp.inc -gen-rewriters
"-I
${
CMAKE_SOURCE_DIR
}
/infrt/dialect/pass"
)
add_public_tablegen_target
(
${
td_base
}
_
IncGen
)
add_
custom_target
(
${
td_base
}
_inc DEPENDS
${
td_base
}
_
IncGen
)
add_public_tablegen_target
(
MLIR
${
td_base
}
IncGen
)
add_
dependencies
(
mlir-headers MLIR
${
td_base
}
IncGen
)
endfunction
()
# Execute the mlir script with infrt-exec program.
...
...
paddle/infrt/CMakeLists.txt
浏览文件 @
b798fb07
...
...
@@ -95,9 +95,7 @@ set(infrt_mlir_incs
dense_tensor_inc
pd_ops_inc
pd_extra_ops_inc
rewrite_inc
trt_ops_inc
pd_lower_to_trt_inc
)
if
(
INFRT_WITH_PHI
)
...
...
paddle/infrt/dialect/infrt/CMakeLists.txt
浏览文件 @
b798fb07
...
...
@@ -13,3 +13,5 @@ mlir_tablegen(infrt_opsAttributes.h.inc -gen-attrdef-decls -dialect=infrt)
mlir_tablegen
(
infrt_opsAttributes.cpp.inc -gen-attrdef-defs -dialect=infrt
)
add_public_tablegen_target
(
MLIRinfrt_opsAttributesIncGen
)
add_dependencies
(
mlir-headers MLIRinfrt_opsAttributesIncGen
)
add_subdirectory
(
pass
)
paddle/infrt/dialect/infrt/pass/CMakeLists.txt
0 → 100644
浏览文件 @
b798fb07
core_gather_headers
()
gather_srcs
(
infrt_src SRCS
infrt_op_fuse_pass.cc
)
mlir_add_rewriter
(
infrt_op_fuse
)
paddle/infrt/dialect/infrt/pass/infrt_op_fuse.td
0 → 100644
浏览文件 @
b798fb07
#ifndef INFRT_OP_FUSE
#define INFRT_OP_FUSE
include "mlir/Interfaces/SideEffectInterfaces.td"
include "paddle/infrt/dialect/infrt/infrt_ops.td"
include "paddle/infrt/dialect/pd_ops.td"
def FuseCvtTensorPattern : Pat<
(Infrt_CvtTensorOp (Infrt_CvtTensorOp $arg)),
(Infrt_CvtTensorOp $arg)>;
def FuseFeedCvtTensorPattern : Pat<
(Infrt_CvtTensorOp (PD_FeedOp $name)),
(PD_FeedOp $name)>;
def TypesAreIdentical : Constraint<CPred<"$0.getType() == $1.getType()">>;
def RedundantCvtTensorOptPattern : Pat<
(Infrt_CvtTensorOp:$res $arg), (replaceWithValue $arg),
[(TypesAreIdentical $res, $arg)]>;
#endif // INFRT_OP_FUSE
paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.cc
0 → 100644
浏览文件 @
b798fb07
// 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/infrt/dialect/infrt/pass/infrt_op_fuse_pass.h"
#include <mlir/Transforms/GreedyPatternRewriteDriver.h>
#include "paddle/infrt/dialect/infrt/infrt_dialect.h"
#include "paddle/infrt/dialect/pd_ops.h"
namespace
{
#include "paddle/infrt/dialect/infrt/pass/infrt_op_fuse.cpp.inc" // NOLINT
/*
* infrtOpFusePass.
*/
struct
InfrtOpFusePass
:
public
mlir
::
PassWrapper
<
InfrtOpFusePass
,
mlir
::
FunctionPass
>
{
public:
::
llvm
::
StringRef
getName
()
const
override
{
return
"infrtOpFusePass"
;
}
void
runOnFunction
()
override
;
};
// Implementation of the InfrtOpFusePass.
void
InfrtOpFusePass
::
runOnFunction
()
{
::
mlir
::
RewritePatternSet
patterns
(
&
getContext
());
populateWithGenerated
(
patterns
);
(
void
)
applyPatternsAndFoldGreedily
(
getOperation
(),
std
::
move
(
patterns
));
// Fuse pd.return Operation
auto
terminator_op
=
getFunction
().
front
().
getTerminator
();
if
(
nullptr
==
terminator_op
)
return
;
for
(
auto
operand
:
terminator_op
->
getOperands
())
{
auto
*
op1
=
operand
.
getDefiningOp
();
auto
cvt_op
=
::
llvm
::
dyn_cast
<::
infrt
::
CvtTensorOp
>
(
op1
);
if
(
!
cvt_op
)
continue
;
mlir
::
Value
value
=
cvt_op
.
input
();
operand
.
replaceAllUsesWith
(
value
);
cvt_op
.
erase
();
}
}
}
// namespace
std
::
unique_ptr
<
mlir
::
Pass
>
infrt
::
createInfrtOpFusePass
()
{
return
std
::
make_unique
<
InfrtOpFusePass
>
();
}
paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.h
0 → 100644
浏览文件 @
b798fb07
// 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.
#pragma once
#include <mlir/Pass/Pass.h>
namespace
infrt
{
/*
* infrtOpFusePass.
*/
std
::
unique_ptr
<
mlir
::
Pass
>
createInfrtOpFusePass
();
}
// namespace infrt
paddle/infrt/dialect/pd_op_base.td
浏览文件 @
b798fb07
...
...
@@ -75,7 +75,7 @@ def PD_ElementType : Type<Or<[PD_Float.predicate,
// def PD_Tensor : TensorOf<[PD_ElementType]>;
def PD_Tensor1 : TensorOf<[PD_ElementType]>;
def PD_Tensor : AnyTypeOf<[PD_Tensor1, LoDTensor],"pd.ttype">;
def PD_Tensor : AnyTypeOf<[PD_Tensor1, LoDTensor
, DenseTensor
],"pd.ttype">;
def PD_Tensor_Array : VectorOf<[PD_Tensor]>;
...
...
paddle/infrt/dialect/phi/phi_ir_exec.cc
浏览文件 @
b798fb07
...
...
@@ -16,6 +16,7 @@
#include <iostream>
#include <string>
#include "paddle/infrt/common/global.h"
#include "paddle/infrt/dialect/infrt/pass/infrt_op_fuse_pass.h"
#include "paddle/infrt/dialect/mlir_loader.h"
#include "paddle/infrt/dialect/phi/pass/phi_op_cvt_pass.h"
...
...
@@ -38,6 +39,7 @@ int main(int argc, char** argv) {
infrt
::
PrecisionType
::
FLOAT32
,
infrt
::
LayoutType
::
NCHW
}};
phi_pass_manager
.
addPass
(
std
::
make_unique
<
infrt
::
phiOpCvtPass
>
(
valid_places
));
phi_pass_manager
.
addPass
(
infrt
::
createInfrtOpFusePass
());
if
(
mlir
::
failed
(
pm
.
run
(
*
module
)))
{
std
::
cout
<<
"
\n
pass failed!
\n
"
<<
std
::
endl
;
return
4
;
...
...
paddle/infrt/tests/dialect/p
ten
/dense_tensor.mlir
→
paddle/infrt/tests/dialect/p
hi
/dense_tensor.mlir
浏览文件 @
b798fb07
文件已移动
paddle/infrt/tests/dialect/p
ten/pten
_pass.mlir
→
paddle/infrt/tests/dialect/p
hi/phi
_pass.mlir
浏览文件 @
b798fb07
文件已移动
tools/infrt/custom_pdop.td
浏览文件 @
b798fb07
def PD_FeedOp : PD_Op<"feed"> {
def PD_FeedOp : PD_Op<"feed"
, [NoSideEffect]
> {
let summary = "Feed Op";
let description = [{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录