使用超线程,一个物理核心的线程通过什么级别的缓存 L1/L2/L3 进行交换?

Ale*_*lex 5 x86 multithreading x86-64 hyperthreading smt

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

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

第 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 未知资源:执行单元。

Han*_*ant 7

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

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

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

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

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

  • 非常感谢!即可以吗?尽管它只提供 30%,但同步速度降低了 30 倍:不需要缓存 L3(10 x Speed UP)、QPI 和缓存一致性协议 MESIF。 (2认同)