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

亚历克斯

超线程是否允许使用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不知道资源:执行单元。

汉斯·帕桑特

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

编译器优化对使用PAPI的FLOP和L2 / L3缓存未命中率的影响

监视elipselink缓存L2,L1

一个核心对L3缓存的广泛使用是否可以使另一核心的L1 / L2缓存无效?

如何在OSX中测量L1,L2,L3缓存命中和未命中

在ARMv8-A Linux上禁用CPU缓存(L1 / L2)

R中的L1和L2规范

如何在现代x86 / amd64芯片上关闭L1,L2,L3 CPU缓存?

为什么在同一内核中的两个线程(超线程)比两个内核中的L1写访问访问性能最差?

L1,L2和L3缓存如何与多个同时运行的进程一起工作?

使用Spring Cacheable的L1 + L2缓存策略

当L2完成NP后,L1可以还原为L2

定义一个first_last(L1,L2)关系,该关系采用列表L1并返回包含L1的前三个和后三个元素的列表L2

给定一个数组l1,l2,l3。。。ln创建一个新数组,如下所示:(l1 + ln),(l2 + l [n-1]),。。。(l [n / 2] + l [n / 2 + 1])

如何禁用处理器的L1和L2缓存?

处理器缓存L1,L2和L3都是由SRAM制成的吗?

有什么方法可以知道Linux中L1,L2,L3缓存和RAM的大小吗?

L2和L3缓存有何不同?

/ proc / cpuinfo“缓存”类别:L1,L2或总计?

如何清除L1,L2和L3缓存?

Scala:为什么l1 ::: l2与l1.:::(l2)不相等?

如何修改CPU缓存L1,缓存L2和缓存L3?

L1 / L2 / L3 cpu缓存与ram分配的寻址方式如何?

令L1 = {a ^ nb ^ mc ^(n + m)/ n,m> 0}和L2 = {a ^ nb ^ nc ^ m / n,m> 0} .L3 = L1∩L2上下文无关或不?

如何计算一年中每个月的三个级别(L1,L2,L3)列和状态P的行

Cortex A53 L1 L2 缓存信息

如何控制分配的内存是否存储在 L1、L2、L3 缓存或 JavaScript 中的其他缓存中?

Coq:(a :: L1) = (b :: L2) ⇒ a = b ∧ L1 = L2?

是否可以检查变量是否位于 L1/L2/L3 缓存

如何仅通过查看内核代码来检测 L0、L1、L2 缓存可能的溢出?