Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用超线程,一个物理核心的线程通过哪一级缓存L1/L2/L3进行交换?_Multithreading_X86_X86 64_Smt_Hyperthreading - Fatal编程技术网

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

Multithreading 使用超线程,一个物理核心的线程通过哪一级缓存L1/L2/L3进行交换?,multithreading,x86,x86-64,smt,hyperthreading,Multithreading,X86,X86 64,Smt,Hyperthreading,超线程是否允许使用一级缓存在两个线程之间交换数据,这两个线程在单个物理内核上同时执行,但在两个虚拟内核中执行 附带条件是两者都属于同一进程,即在同一地址空间中 第85页(2-55)-英特尔64和IA-32体系结构优化参考手册: 2.5.9英特尔微体系结构中的超线程技术支持代码:Nehalem 更深入的缓冲和增强的资源共享/分区策略: HT操作的复制资源:寄存器状态、重命名的返回堆栈缓冲区、大页面ITLB HT操作的分区资源:加载缓冲区、存储缓冲区、重新排序缓冲区、小页面ITLB在两个逻辑处理

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

附带条件是两者都属于同一进程,即在同一地址空间中

第85页(2-55)-英特尔64和IA-32体系结构优化参考手册

2.5.9英特尔微体系结构中的超线程技术支持代码:Nehalem

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

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

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

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

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

  • HT资源:执行单元


《英特尔体系结构软件优化手册》在第2.3.9章中简要介绍了如何在内核上的HT线程之间共享处理器资源。为Nehalem体系结构编写的文档已经过时,但很可能仍然与当前体系结构相关,因为分区在逻辑上是一致的:

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

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

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


你的问题与第三个子弹相符。在每个HT线程执行来自同一进程的代码的非常特殊的情况下(有点意外),通常可以期望L1和L2包含一个HT线程检索到的数据,这些数据对另一个HT线程有用。请记住,缓存中的存储单元是缓存线,即64字节。以防万一:如果你的操作系统支持的话,这不是采用线程调度方法的一个很好的理由,这种方法倾向于让两个HT线程在同一个内核上执行。HT线程的运行速度通常比将核心转移到自身的线程慢一些。30%是通常的数字,YMMV。

非常感谢!是的,它能吗?尽管它只提供了30%,但同步速度降低了30倍:不需要缓存L3(10倍的速度提升)、QPI和缓存一致性协议MESIF.duplicate of,其答案类似。