Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
c4e3010b
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c4e3010b
编写于
4月 25, 2018
作者:
L
Luo Tao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use template to do registry
上级
d599de5c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
26 addition
and
47 deletion
+26
-47
paddle/fluid/inference/tensorrt/convert/CMakeLists.txt
paddle/fluid/inference/tensorrt/convert/CMakeLists.txt
+1
-1
paddle/fluid/inference/tensorrt/convert/conv2d_op.cc
paddle/fluid/inference/tensorrt/convert/conv2d_op.cc
+1
-8
paddle/fluid/inference/tensorrt/convert/convert.cc
paddle/fluid/inference/tensorrt/convert/convert.cc
+2
-6
paddle/fluid/inference/tensorrt/convert/convert.h
paddle/fluid/inference/tensorrt/convert/convert.h
+21
-25
paddle/fluid/inference/tensorrt/convert/mul_op.cc
paddle/fluid/inference/tensorrt/convert/mul_op.cc
+1
-7
未找到文件。
paddle/fluid/inference/tensorrt/convert/CMakeLists.txt
浏览文件 @
c4e3010b
nv_library
(
tensorrt_convert SRCS convert.cc DEPS dynload_cuda
)
nv_library
(
tensorrt_convert SRCS convert.cc
mul_op.cc conv2d_op.cc
DEPS dynload_cuda
)
nv_test
(
test_tensorrt_convert SRCS test_convert.cc DEPS tensorrt paddle_fluid
)
paddle/fluid/inference/tensorrt/convert/conv
ert_conv2d.h
→
paddle/fluid/inference/tensorrt/convert/conv
2d_op.cc
浏览文件 @
c4e3010b
...
...
@@ -12,25 +12,18 @@ 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 "paddle/fluid/inference/tensorrt/convert/convert.h"
namespace
paddle
{
namespace
inference
{
namespace
tensorrt
{
class
Conv2dOpConverter
:
public
OpConverter
{
public:
Conv2dOpConverter
()
{}
void
Convert
(
const
framework
::
OpDesc
&
op
);
};
REGISTER_TRT_OP_CONVETER
(
conv2d
,
Conv2dOpConverter
);
void
Conv2dOpConverter
::
Convert
(
const
framework
::
OpDesc
&
op
)
{
LOG
(
INFO
)
<<
"convert a fluid conv2d op to tensorrt conv layer without bias"
;
}
REGISTER_TRT_OP_CONVETER
(
conv2d
,
Conv2dOpConverter
);
}
// namespace tensorrt
}
// namespace inference
}
// namespace paddle
paddle/fluid/inference/tensorrt/convert/convert.cc
浏览文件 @
c4e3010b
...
...
@@ -13,8 +13,6 @@ See the License for the specific language governing permissions and
limitations under the License. */
#include "paddle/fluid/inference/tensorrt/convert/convert.h"
#include "paddle/fluid/inference/tensorrt/convert/convert_conv2d.h"
#include "paddle/fluid/inference/tensorrt/convert/convert_mul.h"
namespace
paddle
{
namespace
inference
{
...
...
@@ -23,10 +21,8 @@ namespace tensorrt {
void
TensorRTConverter
::
ConvertBlock
(
const
framework
::
BlockDesc
&
block
)
{
for
(
auto
op
:
block
.
AllOps
())
{
std
::
string
type
=
op
->
Type
();
PADDLE_ENFORCE
(
GetOpConverter
().
count
(
type
),
"No converter registered for op: %s"
,
type
);
auto
op_converter
=
GetOpConverter
()[
type
];
op_converter
->
Convert
(
*
op
);
OpConverter
op_converter
;
op_converter
.
Convert
(
*
op
);
}
}
...
...
paddle/fluid/inference/tensorrt/convert/convert.h
浏览文件 @
c4e3010b
...
...
@@ -26,9 +26,21 @@ namespace paddle {
namespace
inference
{
namespace
tensorrt
{
class
ConverterBase
{
class
OpConverter
{
public:
ConverterBase
()
{}
OpConverter
()
{}
void
Convert
(
const
framework
::
OpDesc
&
op
)
{
std
::
string
type
=
op
.
Type
();
OpConverter
&
op_converter
=
this
->
register_op_converter_
[
type
];
op_converter
.
Convert
(
op
);
}
template
<
typename
T
>
static
void
Register
(
const
std
::
string
key
)
{
register_op_converter_
[
key
]
=
T
();
}
static
std
::
unordered_map
<
std
::
string
,
OpConverter
>
register_op_converter_
;
// fluid inference scope
framework
::
Scope
*
scope_
;
...
...
@@ -37,30 +49,14 @@ class ConverterBase {
std
::
unordered_map
<
std
::
string
,
nvinfer1
::
ITensor
*>
tr_tensors_
;
};
class
OpConverter
:
public
ConverterBase
{
public:
OpConverter
()
{}
virtual
~
OpConverter
()
{}
// convert fluid op to tensorrt layer
virtual
void
Convert
(
const
framework
::
OpDesc
&
op
)
=
0
;
};
static
std
::
unordered_map
<
std
::
string
,
OpConverter
*>&
GetOpConverter
()
{
static
std
::
unordered_map
<
std
::
string
,
OpConverter
*>
register_op_converter
;
return
register_op_converter
;
}
#define REGISTER_TRT_OP_CONVETER(op_type, convert_class) \
class convert_class##Register { \
public: \
convert_class##Register() { \
GetOpConverter()[#op_type] = new convert_class; \
} \
}; \
convert_class##Register convert_class##reg;
#define REGISTER_TRT_OP_CONVETER(op_type, convert_class) \
class convert_class : public OpConverter { \
public: \
convert_class() { OpConverter::Register<convert_class>(#op_type); } \
void Convert(const framework::OpDesc& op); \
}
class
TensorRTConverter
:
public
ConverterBase
{
class
TensorRTConverter
{
public:
TensorRTConverter
()
{}
...
...
paddle/fluid/inference/tensorrt/convert/
convert_mul.h
→
paddle/fluid/inference/tensorrt/convert/
mul_op.cc
浏览文件 @
c4e3010b
...
...
@@ -12,20 +12,14 @@ 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 "paddle/fluid/inference/tensorrt/convert/convert.h"
namespace
paddle
{
namespace
inference
{
namespace
tensorrt
{
class
MulOpConverter
:
public
OpConverter
{
public:
MulOpConverter
()
{}
void
Convert
(
const
framework
::
OpDesc
&
op
);
};
REGISTER_TRT_OP_CONVETER
(
mul
,
MulOpConverter
);
void
MulOpConverter
::
Convert
(
const
framework
::
OpDesc
&
op
)
{
LOG
(
INFO
)
<<
"convert a fluid mul op to tensorrt fc layer without bias"
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录