【问题标题】:With Hyper Threading, threads of one physical core are exchanging via what level of cache L1/L2/L3?使用超线程,一个物理内核的线程通过什么级别的缓存 L1/L2/L3 进行交换?
【发布时间】:2015-03-04 01:07:50
【问题描述】:

超线程是否允许使用 L1-cache 在两个线程之间交换数据,这两个线程同时在单个物理核心上执行,但在两个虚拟核心上执行?

前提是两者属于同一个进程,即在同一个地址空间中。

第 85 页 (2-55) - 英特尔® 64 和 IA-32 架构优化参考手册http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf

2.5.9 英特尔® 微架构代号 Nehalem 中的超线程技术支持

...

更深层次的缓冲和增强的资源共享/分区策略:

  • 用于 HT 操作的复制资源:寄存器状态、重命名的返回堆栈缓冲区、大页面 ITLB。

  • 用于 HT 操作的分区资源:加载缓冲区、存储缓冲区、重新排序缓冲区、小页面 ITLB 在两个逻辑处理器之间静态分配。

  • HT 操作期间的竞争共享资源:保留站、缓存层次结构、填充缓冲区、DTLB0 和 STLB。

  • 在 HT 操作期间交替:前端操作通常在两个逻辑处理器之间交替以确保公平。

  • HT 不知道的资源:执行单元。

【问题讨论】:

标签: multithreading x86 x86-64 smt hyperthreading


【解决方案1】:

英特尔架构软件优化手册在第 2.3.9 章中简要描述了处理器资源如何在内核上的 HT 线程之间共享。记录了 Nehalem 架构,变得陈旧但很可能仍然与当前架构相关,因为分区在逻辑上是一致的:

  • 为每个 HT 线程复制:寄存器、返回堆栈缓冲区、大页面 ITLB

  • 为每个 HT 线程静态分配:加载、存储和重新排序缓冲区、小页面 ITLB

  • 在 HT 线程之间竞争共享:保留站、缓存、填充缓冲区、DTLB0 和 STLB。

您的问题与第 3 个项目符号相符。在每个 HT 线程从同一进程执行代码的非常特殊的情况下,有点意外,您通常可以预期 L1 和 L2 包含由一个 HT 线程检索到的数据,这些数据可能对另一个线程有用。请记住,缓存中的存储单元是一个 64 字节的缓存行。以防万一:这不是追求线程调度方法的好理由,该方法有利于让两个 HT 线程在同一个内核上执行,假设你的操作系统支持它。 HT 线程的运行速度通常比将核心获取到自身的线程慢很多。 30% 是通常的数字,YMMV。

【讨论】:

  • 非常感谢! IE。是的,它可以?尽管它只提供了 30%,但同步速度却降低了 30 倍:不需要缓存 L3(10 x Speed UP)、QPI 和缓存一致性协议 MESIF。
猜你喜欢
  • 2016-02-10
  • 2020-05-19
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
  • 2017-03-10
  • 2014-07-04
  • 2018-01-08
  • 2011-04-11
相关资源
最近更新 更多