Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
56381f80
MegEngine
项目概览
MegEngine 天元
/
MegEngine
9 个月 前同步成功
通知
392
Star
4702
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
56381f80
编写于
8月 20, 2020
作者:
M
Megvii Engine Team
提交者:
Xinran Xu
8月 25, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(dnn/arm): use vcvtq_f32_s32 for all arm code
GitOrigin-RevId: 27effe7d2402b08559ac59bfab202251d1082efc
上级
11732057
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
1 addition
and
56 deletion
+1
-56
dnn/src/arm_common/elemwise_helper/kimpl/typecvt.h
dnn/src/arm_common/elemwise_helper/kimpl/typecvt.h
+0
-54
dnn/src/common/nchw_nchwxx_valid.h
dnn/src/common/nchw_nchwxx_valid.h
+1
-1
src/gopt/test/inference.cpp
src/gopt/test/inference.cpp
+0
-1
未找到文件。
dnn/src/arm_common/elemwise_helper/kimpl/typecvt.h
浏览文件 @
56381f80
...
...
@@ -19,7 +19,6 @@ namespace arm_common {
template
<
typename
src_ctype
,
typename
dst_ctype
=
src_ctype
>
struct
TypeCvtOp
;
#if __ARM_ARCH >= 8
template
<
>
struct
TypeCvtOp
<
dt_qint32
,
dt_qint8
>
:
UnaryOpBase
<
dt_qint32
,
dt_qint8
>
{
using
UnaryOpBase
::
UnaryOpBase
;
...
...
@@ -55,59 +54,6 @@ struct TypeCvtOp<dt_qint32, dt_qint8> : UnaryOpBase<dt_qint32, dt_qint8> {
return
QConverter
::
convert
<
int8x8_t
,
float32x4_t
>
(
vitem0
);
}
};
#else
template
<
>
struct
TypeCvtOp
<
dt_qint32
,
dt_qint8
>
:
UnaryOpBase
<
dt_qint32
,
dt_qint8
>
,
FixupBase
{
constexpr
static
size_t
SIMD_WIDTH
=
4
;
TypeCvtOp
(
DType
src_dtype
,
DType
dst_dtype
)
:
UnaryOpBase
(
src_dtype
,
dst_dtype
),
FixupBase
(
scale
)
{}
TypeCvtOp
(
float
src_scale
,
float
dst_scale
)
:
UnaryOpBase
(
src_scale
,
dst_scale
),
FixupBase
(
scale
)
{}
void
operator
()(
const
int32x4x2_t
&
vsrc
,
dt_qint8
*
dst
)
const
{
vst1_s8
(
reinterpret_cast
<
int8_t
*>
(
dst
),
operator
()(
vsrc
));
}
void
operator
()(
const
int32x4_t
&
vsrc
,
dt_qint8
*
dst
)
const
{
vst1_lane_s32
(
reinterpret_cast
<
int32_t
*>
(
dst
),
(
int32x2_t
)(
operator
()(
vsrc
)),
0
);
}
dt_qint8
operator
()(
const
dt_qint32
&
src
)
const
{
float
fsrc
=
src
.
as_int32
()
*
this
->
scale
;
return
QConverter
::
convert
<
dt_qint8
,
float
>
(
fsrc
);
}
void
operator
()(
const
src_ctype
&
src
,
dst_ctype
*
dst
)
const
{
*
dst
=
operator
()(
src
);
}
int8x8_t
operator
()(
const
int32x4x2_t
&
vsrc
)
const
{
int32x4_t
vitem0
=
vqrdmulhq_s32
(
vsrc
.
val
[
0
],
vmultiplier
);
int32x4_t
vitem1
=
vqrdmulhq_s32
(
vsrc
.
val
[
1
],
vmultiplier
);
auto
fixup0
=
vshrq_n_s32
(
vitem0
,
31
);
auto
fixup1
=
vshrq_n_s32
(
vitem1
,
31
);
// FIXME Theoretically, we should check shift != 0 here.
vitem0
=
vqaddq_s32
(
vitem0
,
fixup0
);
vitem1
=
vqaddq_s32
(
vitem1
,
fixup1
);
return
vqmovn_s16
(
vcombine_s16
(
vqmovn_s32
(
vrshlq_s32
(
vitem0
,
vshift
)),
vqmovn_s32
(
vrshlq_s32
(
vitem1
,
vshift
))));
}
int8x8_t
operator
()(
const
int32x4_t
&
src
)
const
{
int32x4_t
vitem0
=
vqrdmulhq_s32
(
src
,
vmultiplier
);
auto
fixup0
=
vshrq_n_s32
(
vitem0
,
31
);
vitem0
=
vqaddq_s32
(
vitem0
,
fixup0
);
int16x4_t
vres0_int16
=
vqmovn_s32
(
vrshlq_s32
(
vitem0
,
vshift
));
return
vqmovn_s16
(
vcombine_s16
(
vres0_int16
,
vres0_int16
));
}
int8x8_t
operator
()(
const
float32x4_t
&
src
)
const
{
int32x4_t
vitem0
=
vqrdmulhq_s32
(
vcvtq_s32_f32
(
src
),
vmultiplier
);
auto
fixup0
=
vshrq_n_s32
(
vitem0
,
31
);
vitem0
=
vqaddq_s32
(
vitem0
,
fixup0
);
int16x4_t
vres0_int16
=
vqmovn_s32
(
vrshlq_s32
(
vitem0
,
vshift
));
return
vqmovn_s16
(
vcombine_s16
(
vres0_int16
,
vres0_int16
));
}
};
#endif
template
<
>
struct
TypeCvtOp
<
dt_qint32
,
dt_quint8
>
:
UnaryOpBase
<
dt_qint32
,
dt_quint8
>
{
...
...
dnn/src/common/nchw_nchwxx_valid.h
浏览文件 @
56381f80
...
...
@@ -144,7 +144,7 @@ inline bool nchw_nchwxx_valid<NCHW88>(
const
DTypeEnum
dst_dtype
,
const
ConvolutionBase
<
param
::
Convolution
>::
CanonizedFilterMeta
&
fm
,
const
BiasMode
bias_mode
,
const
param
::
ConvBias
::
NonlineMode
nonline_mode
)
{
const
param
::
ConvBias
::
NonlineMode
)
{
bool
ok_type
=
((
src_dtype
==
DTypeEnum
::
Float32
&&
filter_dtype
==
DTypeEnum
::
Float32
&&
(
dst_dtype
==
DTypeEnum
::
Float32
)))
&&
...
...
src/gopt/test/inference.cpp
浏览文件 @
56381f80
...
...
@@ -32,7 +32,6 @@
#include "./helper.h"
#include "megbrain/comp_node_env.h"
#include "cpuinfo.h"
#include "megdnn/tensor_format.h"
#include <random>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录