gpt4 book ai didi

x86 - 当线程可能会切换内核时,如何正确使用 TSX-NI(HLE 和 RTM)?

转载 作者:行者123 更新时间:2023-12-04 19:39:25 25 4
gpt4 key购买 nike

英特尔的事务同步扩展 (TSX-NI) 似乎在每个 CPU 的基础上工作。

这适用于 _InterlockedXxx_HLE{Acquire,Release}硬件锁消除功能 (HLE),以及 _xbegin/_xend/等等。受限事务内存 (RTM) 功能。

在多核系统上使用这些功能的“正确”方式是什么?

鉴于它们的正确性保证,我认为我只需要担心这里的性能。

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

例如,我应该尝试明确设置线程 CPU 关联性,还是这种做法不好?
还有什么我应该担心的吗?

最佳答案

如果 CPU 在中间发生中断,事务将中止。 中止是在保存 RIP 之前处理的,因此中断-> CPU 迁移无法在此内核或另一个内核上恢复并运行 xend无需在交易中。

因此不存在正确性问题。

将线程固定到内核可以出于缓存局部性的原因帮助提高性能,如果操作系统的进程调度程序否则会试图以对您的工作负载不理想的方式来回弹线程。

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

只有当中断使用户空间任务进入休眠状态并且另一个内核上的内核决定获取该任务时,CPU 迁移才会发生。

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

我实际上并没有玩过这个,但是 我认为没有任何理由期望 TSX 的线程相关性性能考虑与非 TSX 有显着不同。

关于x86 - 当线程可能会切换内核时,如何正确使用 TSX-NI(HLE 和 RTM)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51857850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com