Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
曾经的那一瞬间
Tensorflow
提交
30e983f6
T
Tensorflow
项目概览
曾经的那一瞬间
/
Tensorflow
10 个月 前同步成功
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Tensorflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
30e983f6
编写于
7月 20, 2023
作者:
T
TensorFlower Gardener
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #60735 from Intel-tensorflow:mabuzain/tp-use-caller-thread-fix
PiperOrigin-RevId: 549652138
上级
805e47f4
a9142eea
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
24 deletion
+31
-24
tensorflow/tsl/util/onednn_threadpool.h
tensorflow/tsl/util/onednn_threadpool.h
+31
-24
未找到文件。
tensorflow/tsl/util/onednn_threadpool.h
浏览文件 @
30e983f6
...
...
@@ -114,32 +114,39 @@ class OneDnnThreadPool : public threadpool_iface {
can_use_caller_thread_
&&
nthr
==
port
::
NumSchedulableCPUs
();
const
int
njobs_to_schedule
=
use_caller_thread
?
njobs
-
1
:
njobs
;
tsl
::
BlockingCounter
counter
(
njobs_to_schedule
);
std
::
function
<
void
(
int
,
int
)
>
handle_range
=
[
=
,
&
handle_range
,
&
counter
](
int
first
,
int
last
)
{
while
(
last
-
first
>
1
)
{
const
auto
mid
=
first
+
(
last
-
first
)
/
2
;
// Find something near the midpoint which is a multiple of block size.
eigen_interface_
->
ScheduleWithHint
([
=
]()
{
handle_range
(
mid
,
last
);
},
mid
,
mid
+
1
);
last
=
mid
;
}
counter
.
DecrementCount
();
run_jobs
(
balance
,
first
,
n
,
njobs
,
fn
);
};
// Eigen avoids a thread hop by running the root of the tree on the main
// thread. We have disabled this because it actually slows things down
// relative to base because base cheats and uses n threads while letting
// main continue doing other work
eigen_interface_
->
ScheduleWithHint
(
[
=
]()
{
handle_range
(
0
,
njobs_to_schedule
);
},
0
,
1
);
if
(
use_caller_thread
)
{
run_jobs
(
balance
,
njobs
-
1
,
n
,
njobs
,
fn
);
for
(
int
i
=
0
;
i
<
njobs_to_schedule
;
i
++
)
{
eigen_interface_
->
ScheduleWithHint
(
[
balance
,
i
,
n
,
njobs
,
fn
]()
{
run_jobs
(
balance
,
i
,
n
,
njobs
,
fn
);
},
i
,
i
+
1
);
}
run_jobs
(
balance
,
njobs_to_schedule
,
n
,
njobs
,
fn
);
}
else
{
tsl
::
BlockingCounter
counter
(
njobs
);
std
::
function
<
void
(
int
,
int
)
>
handle_range
=
[
=
,
&
handle_range
,
&
counter
](
int
first
,
int
last
)
{
while
(
last
-
first
>
1
)
{
const
auto
mid
=
first
+
(
last
-
first
)
/
2
;
// Find something near the midpoint which is a multiple of block size.
eigen_interface_
->
ScheduleWithHint
([
=
]()
{
handle_range
(
mid
,
last
);
},
mid
,
mid
+
1
);
last
=
mid
;
}
counter
.
DecrementCount
();
run_jobs
(
balance
,
first
,
n
,
njobs
,
fn
);
};
// Eigen avoids a thread hop by running the root of the tree on the main
// thread. We have disabled this because it actually slows things down
// relative to base because base cheats and uses n threads while letting
// main continue doing other work
eigen_interface_
->
ScheduleWithHint
([
=
]()
{
handle_range
(
0
,
njobs
);
},
0
,
1
);
counter
.
Wait
();
}
counter
.
Wait
();
}
~
OneDnnThreadPool
()
{}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录