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

时间:2015-01-06 11:12:35

标签: multithreading x86 x86-64 smt hyperthreading

超线程是否允许使用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在两个逻辑处理器之间静态分配。 / p>

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

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

  •   
  • HT无意识资源:执行单位。

  •   

1 个答案:

答案 0 :(得分:4)

英特尔架构软件优化手册简要介绍了如何在2.3.9章节中核心上的HT线程之间共享处理器资源。为Nehalem架构记录,由于分区在逻辑上是一致的,因此过时但很可能仍然与当前的相关:

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

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

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

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