首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用TSX(包括HLE和RTM)时,线程可能会切换内核?

如何正确使用TSX(包括HLE和RTM)时,线程可能会切换内核?
EN

Stack Overflow用户
提问于 2018-08-15 11:29:58
回答 1查看 720关注 0票数 3

英特尔的事务同步扩展(TSX)似乎是在CPU的基础上工作的.

这既适用于_InterlockedXxx_HLE{Acquire,Release}硬件锁定函数(HLE),也适用于_xbegin/_xend/etc.受限事务内存(RTM)函数。

在多核系统上使用这些功能的“适当”方法是什么?

考虑到它们的正确性,我想我只需要担心这里的性能。

因此,我应该如何构造和编写我的代码,使我的代码具有最佳的性能,考虑到线程总是有可能突然切换内核,因此这些指令可能需要返回到较慢的代码路径?

例如,我应该尝试显式地设置线程CPU亲缘关系,还是这种做法不好?

还有什么我该担心的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 12:13:44

如果CPU在中间接受一个中断,事务将中止。在保存之前,将处理中止,所以中断->CPU迁移不能在此或另一个核心上恢复,并且在事务中不运行xend

因此,不存在正确性问题。

由于缓存局部性的原因,将线程固定在内核上可以提高性能,如果操作系统的进程调度程序不太适合您的工作负载,那么就会倾向于以不太理想的方式弹出线程。

但这对TSX并没有特别的帮助:中断后在同一个核心上恢复也不是更好,因为事务已经中止了。将拥有您可能需要的所有缓存行,在L1d中可能仍然很热,希望仍然处于独占或修改状态。

只有当中断使用户空间任务进入睡眠状态时,CPU迁移才能发生,而另一个核心上的内核决定抓取该任务。

在内核代码中,显然不要在事务中调用schedule();这与正确性无关,因为事务终止(很可能)或执行最终或很快返回到此任务,我们到达xend并成功提交作为单个大事务发生的所有事情(包括调度程序和潜在的另一个任务所做的所有事情)。

我实际上还没有玩过这个游戏,但是,我认为没有理由期望TSX的线程亲和力性能考虑会与非TSX.有很大的不同。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51857850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档