超线程是否允许使用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] 删除。
我来说两句