Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
d9a46ea4
MegEngine
项目概览
MegEngine 天元
/
MegEngine
大约 1 年 前同步成功
通知
399
Star
4705
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看板
提交
d9a46ea4
编写于
11月 18, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(dnn): correct behaviour of floor div for int tensor
GitOrigin-RevId: 1444f69cce7fea7c3bf34206bce239caad6cc1d0
上级
8918abb1
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
35 addition
and
3 deletion
+35
-3
dnn/src/common/elemwise/kern_defs.cuh
dnn/src/common/elemwise/kern_defs.cuh
+10
-1
imperative/python/test/unit/functional/test_elemwise.py
imperative/python/test/unit/functional/test_elemwise.py
+11
-1
src/opr/test/basic_arith/elemwise.cpp
src/opr/test/basic_arith/elemwise.cpp
+13
-0
src/opr/test/basic_arith/elemwise_binary_trait_def.inl
src/opr/test/basic_arith/elemwise_binary_trait_def.inl
+1
-1
未找到文件。
dnn/src/common/elemwise/kern_defs.cuh
浏览文件 @
d9a46ea4
...
...
@@ -119,6 +119,15 @@ __device__ __host__ inline float dispatch_powf(float x, float y) {
return
powf
(
x
,
y
);
}
__device__
__host__
inline
int
dispatch_floordiv_int
(
int
x
,
int
y
)
{
if
((
x
^
y
)
<
0
)
{
const
auto
quot
=
x
/
y
;
const
auto
rem
=
x
%
y
;
return
rem
?
quot
-
1
:
quot
;
}
return
x
/
y
;
}
#include "src/common/elemwise/each_mode.inl"
template
<
megcorePlatform_t
plat
,
uint32_t
mode
,
typename
dtype
>
...
...
@@ -227,7 +236,7 @@ DEF_KERN(dt_bool, LT, x < y);
DEF_KERN
(
dt_bool
,
LEQ
,
x
<=
y
);
DEF_KERN
(
dt_bool
,
EQ
,
x
==
y
);
DEF_KERN_INT
(
FLOOR_DIV
,
x
/
y
);
DEF_KERN_INT
(
FLOOR_DIV
,
dispatch_floordiv_int
(
x
,
y
)
);
DEF_KERN_FLOAT
(
FLOOR_DIV
,
floorf
(
x
/
y
));
DEF_KERN_INT
(
MOD
,
x
%
y
);
...
...
imperative/python/test/unit/functional/test_elemwise.py
浏览文件 @
d9a46ea4
...
...
@@ -59,7 +59,7 @@ def test_multiply():
def
test_div
():
np
.
testing
.
assert_allclose
(
F
.
div
(
tensor
([
3
,
4
]),
2
).
numpy
(),
F
.
div
(
tensor
([
3
.0
,
4.0
]),
2
).
numpy
(),
np
.
divide
(
np
.
array
([
3
,
4
],
dtype
=
np
.
float32
),
2
),
)
...
...
@@ -67,6 +67,16 @@ def test_div():
(
tensor
([
3
,
4
])
/
2
).
numpy
(),
np
.
divide
(
np
.
array
([
3
,
4
],
dtype
=
np
.
float32
),
2
),
)
np
.
testing
.
assert_allclose
(
F
.
floor_div
(
tensor
([
-
5.0
,
-
7.0
]),
2
).
numpy
(),
np
.
floor_divide
(
np
.
array
([
-
5.0
,
-
7.0
],
dtype
=
np
.
float32
),
2
),
)
np
.
testing
.
assert_allclose
(
(
tensor
([
-
5
,
-
7
])
//
2
).
numpy
(),
np
.
floor_divide
(
np
.
array
([
-
5
,
-
7
],
dtype
=
np
.
int32
),
2
),
)
def
test_clamp
():
"""Fix an issue when `lower` or `upper` is 0, it will be recognized as `False` and
...
...
src/opr/test/basic_arith/elemwise.cpp
浏览文件 @
d9a46ea4
...
...
@@ -39,6 +39,19 @@ int do_mod(int a, int b) {
return
a
%
b
;
}
float
do_floor_div
(
float
a
,
float
b
)
{
return
std
::
floor
(
a
/
b
);
}
int
do_floor_div
(
int
a
,
int
b
)
{
if
((
a
^
b
)
<
0
)
{
const
auto
quot
=
a
/
b
;
const
auto
rem
=
a
%
b
;
return
rem
?
quot
-
1
:
quot
;
}
return
a
/
b
;
}
float
do_erfinv
(
float
x
)
{
return
erfinvf
(
x
);
}
...
...
src/opr/test/basic_arith/elemwise_binary_trait_def.inl
浏览文件 @
d9a46ea4
...
...
@@ -41,7 +41,7 @@ DEF_TRAIT(LT, x < y)
#define _ALLOW_INT true
DEF_TRAIT
(
ABS_GRAD
,
x
>
0
?
y
:
-
y
)
DEF_TRAIT
(
ADD
,
x
+
y
)
DEF_TRAIT
(
FLOOR_DIV
,
floor
(
x
/
y
))
DEF_TRAIT
(
FLOOR_DIV
,
do_floor_div
(
x
,
y
))
DEF_TRAIT
(
MAX
,
std
::
max
(
x
,
y
))
DEF_TRAIT
(
MIN
,
std
::
min
(
x
,
y
))
DEF_TRAIT
(
MOD
,
do_mod
(
x
,
y
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录