在具有HT的一个Core上执行的线程之间的数据交换将使用什么?

超线程技术是Intel引入的一种同时多线程技术的形式。

这些资源包括执行引擎,缓存和系统总线接口。资源共享使两个逻辑处理器可以更有效地相互协作,并且使停滞的逻辑处理器可以从另一个逻辑处理器借用资源。

在具有超线程功能的英特尔CPU中,一个CPU内核(带有多个ALU)可以在同一时钟执行来自2个线程的指令。两个线程共享:存储缓冲区,缓存L1 / L2和系统总线。

但是,如果两个线程在一个Core上同时执行,线程1存储原子值,线程2加载该值,那么该交换将使用什么:共享存储缓冲区,共享缓存L1 / L2或通常的缓存L3?

如果两个线程来自同一进程(相同的虚拟地址空间),并且来自两个不同进程(不同的虚拟地址空间),将会发生什么?

Sandy Bridge Intel CPU-缓存L1:

  • 32 KB-缓存大小

  • 64 B-缓存行大小

  • 512行(512 = 32 KB / 64 B)

  • 8路

  • 64-路数集(64 = 512行/ 8路)

  • 虚拟地址(索引)的6位[11:6]-定义当前设置的编号(这是标签)

  • 4 K-每个相同(虚拟地址/ 4 K)争夺同一组(32 KB / 8路)

  • 低12位-对确定当前设置的数字有效

  • 4 KB-标准页面大小

  • 低12位-每个地址的虚拟和物理地址相同

http://img1.mukewang.com/5de75eb7000193bb04070392.jpg

隔江千里
浏览 732回答 3
3回答

慕码人2483693

在相同或不同地址空间的两种情况下都是如此,因为页面大小为4096 B(12位),即虚拟地址和物理地址的低12位相同,并且Intel x86_64 L1被“虚拟索引,物理标记”,并且8种方式和标签范围为0-512(8 * 64)的64B高速缓存行大小,即用于物理标记的是低9位(512),正如我们刚刚决定的-虚拟地址和物理地址相同,且标记为高速缓存行对于整个一级缓存是唯一的。

明月笑刀无情

现在,我对CPU架构有了更多的了解,我只是重新编写了很多这个答案(特别是,存储在退役时不会提交给L1 ,而是在存储缓冲区到达时才提交给L1 。) ,我们可以排除超线程之间的存储转发,因为存储缓冲区是静态分区的。另外,我认为我做得更好,解释了为什么可以共享L1d,即VIPT高速缓存的特殊情况,即页面偏移量以下的索引位(设置选择,而不是选路,注释中的另一个错误),因此它像被物理索引一样工作。
打开App,查看更多内容
随时随地看视频慕课网APP