Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
8163ed15
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
403
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看板
提交
8163ed15
编写于
3月 31, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(dnn/cuda): fix cutlass matmul splitk limit
GitOrigin-RevId: fc9a7c638ca8087fd42d5386163e6d820214484c
上级
933188aa
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
15 addition
and
7 deletion
+15
-7
dnn/src/cuda/matrix_mul/cutlass_float32_simt_split_k.cpp
dnn/src/cuda/matrix_mul/cutlass_float32_simt_split_k.cpp
+15
-7
未找到文件。
dnn/src/cuda/matrix_mul/cutlass_float32_simt_split_k.cpp
浏览文件 @
8163ed15
...
...
@@ -23,12 +23,20 @@ using namespace cutlass_wrapper;
bool
MatrixMulForwardImpl
::
AlgoFloat32SIMTSplitK
::
is_available
(
const
SizeArgs
&
args
)
const
{
auto
&&
param
=
args
.
opr
->
param
();
int
n
=
args
.
layout_c
.
shape
[
1
],
int
m
=
args
.
layout_c
.
shape
[
0
],
n
=
args
.
layout_c
.
shape
[
1
],
k
=
args
.
layout_a
.
shape
[
param
.
transposeA
?
0
:
1
];
return
args
.
opr
->
param
().
format
==
param
::
MatrixMul
::
Format
::
DEFAULT
&&
args
.
layout_a
.
dtype
==
dtype
::
Float32
()
&&
args
.
layout_b
.
dtype
==
dtype
::
Float32
()
&&
args
.
layout_c
.
dtype
==
dtype
::
Float32
()
&&
k
>
n
;
bool
available
=
args
.
opr
->
param
().
format
==
param
::
MatrixMul
::
Format
::
DEFAULT
&&
args
.
layout_a
.
dtype
==
dtype
::
Float32
()
&&
args
.
layout_b
.
dtype
==
dtype
::
Float32
()
&&
args
.
layout_c
.
dtype
==
dtype
::
Float32
()
&&
k
>
n
;
auto
&&
device_prop
=
cuda
::
current_device_prop
();
int
y_grid_limit
=
device_prop
.
maxGridSize
[
1
];
// limit y grid
available
&=
((
m
+
m_algo_param
.
threadblock_m
-
1
)
/
m_algo_param
.
threadblock_m
<=
y_grid_limit
);
return
available
;
}
size_t
MatrixMulForwardImpl
::
AlgoFloat32SIMTSplitK
::
get_workspace_in_bytes
(
...
...
@@ -36,7 +44,7 @@ size_t MatrixMulForwardImpl::AlgoFloat32SIMTSplitK::get_workspace_in_bytes(
auto
&&
param
=
args
.
opr
->
param
();
int
m
=
args
.
layout_c
.
shape
[
0
],
n
=
args
.
layout_c
.
shape
[
1
],
k
=
args
.
layout_a
.
shape
[
param
.
transposeA
?
0
:
1
];
int
split_k_slices
=
k
/
n
;
int
split_k_slices
=
std
::
max
(
1
,
k
/
n
)
;
return
args
.
layout_c
.
dtype
.
size
(
m
*
n
*
split_k_slices
);
}
...
...
@@ -49,7 +57,7 @@ void MatrixMulForwardImpl::AlgoFloat32SIMTSplitK::exec(
int
m
=
args
.
tensor_c
.
layout
.
shape
[
0
],
n
=
args
.
tensor_c
.
layout
.
shape
[
1
],
k
=
args
.
tensor_a
.
layout
.
shape
[
param
.
transposeA
?
0
:
1
];
GemmCoord
problem_size
{
m
,
n
,
k
};
int
split_k_slices
=
k
/
n
;
int
split_k_slices
=
std
::
max
(
1
,
k
/
n
)
;
auto
&&
stream
=
cuda_stream
(
args
.
opr
->
handle
());
int
*
workspace
=
reinterpret_cast
<
int
*>
(
args
.
workspace
.
raw_ptr
);
return
cutlass_matrix_mul_float32_simt
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录