Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
998f71a8
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
411
Star
4707
Fork
583
代码
文件
提交
分支
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看板
提交
998f71a8
编写于
1月 08, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
perf(mge/imperative): do not busy wait in imperative's queue
GitOrigin-RevId: de8db5109679ed70e38fcecfbb99478aa9303b2b
上级
62637fc4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
15 addition
and
2 deletion
+15
-2
imperative/python/src/helper.h
imperative/python/src/helper.h
+6
-0
imperative/src/impl/interpreter_impl.h
imperative/src/impl/interpreter_impl.h
+5
-1
imperative/src/impl/physical_tensor.cpp
imperative/src/impl/physical_tensor.cpp
+4
-1
未找到文件。
imperative/python/src/helper.h
浏览文件 @
998f71a8
...
...
@@ -67,6 +67,12 @@ auto to_tuple(T begin, T end, pybind11::return_value_policy policy = pybind11::r
class
PyTaskDipatcher
{
struct
Queue
:
mgb
::
AsyncQueueSC
<
std
::
function
<
void
(
void
)
>
,
Queue
>
{
using
Task
=
std
::
function
<
void
(
void
)
>
;
// set max_spin=0 to prevent Queue fetch task in busy wait manner.
// this won't affect throughput when python interpreter is sending enough task,
// but will significantly save CPU time when waiting for task, e.g. wait for data input
Queue
()
:
mgb
::
AsyncQueueSC
<
std
::
function
<
void
(
void
)
>
,
Queue
>
(
0
)
{}
void
process_one_task
(
Task
&
f
)
{
if
(
!
Py_IsInitialized
())
return
;
pybind11
::
gil_scoped_acquire
_
;
...
...
imperative/src/impl/interpreter_impl.h
浏览文件 @
998f71a8
...
...
@@ -207,7 +207,11 @@ private:
size_t
m_enable_evict
=
0
;
struct
WorkQueue
:
AsyncQueueSC
<
Command
,
WorkQueue
>
{
WorkQueue
(
ChannelImpl
*
owner
)
:
m_owner
(
owner
)
{
// set max_spin=0 to prevent Queue fetch task in busy wait manner.
// this won't affect throughput when python interpreter is sending enough task,
// but will significantly save CPU time when waiting for task, e.g. wait for data input
WorkQueue
(
ChannelImpl
*
owner
)
:
AsyncQueueSC
<
Command
,
WorkQueue
>
(
0
),
m_owner
(
owner
)
{
sys
::
set_thread_name
(
"interpreter"
);
}
void
process_one_task
(
Command
&
cmd
)
{
...
...
imperative/src/impl/physical_tensor.cpp
浏览文件 @
998f71a8
...
...
@@ -30,7 +30,10 @@ class AsyncReleaser : public CompNodeDepedentObject {
AsyncReleaser
*
m_par_releaser
;
public:
Waiter
(
AsyncReleaser
*
releaser
)
:
m_par_releaser
(
releaser
)
{}
// disable busy wait by set max_spin=0 to save CPU cycle
Waiter
(
AsyncReleaser
*
releaser
)
:
AsyncQueueSC
<
WaiterParam
,
Waiter
>
(
0
),
m_par_releaser
(
releaser
)
{}
void
process_one_task
(
WaiterParam
&
param
)
{
if
(
param
.
event
->
finished
())
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录