caching - super 队列和行填充缓冲区的语义是什么?

标签 caching memory architecture x86 intel

我问这个关于 Haswell 微架构(英特尔至强 E5-2640-v3 CPU)的问题。从CPU和其他资源的规范我发现有10个LFB, super 队列的大小是16。我有两个关于LFB和SuperQueue的问题:

1) 系统可以提供的最大内存级并行度是多少,10 还是 16(LFB 或 SQ)?

2)根据某些来源,每个 L1D 未命中都记录在 SQ 中,然后 SQ 分配行填充缓冲区,而在其他某些来源中,他们写道 SQ 和 LFB 可以独立工作。你能简单解释一下 SQ 的工作吗?

这是 SQ 和 LFB 的示例图(不适用于 Haswell)。
enter image description here
引用:
https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf

http://www.realworldtech.com/haswell-cpu/

最佳答案

对于 (1) 逻辑上,最大并行度将受限于管道的最不并行部分,即 10 个 LFB,当预取被禁用或无法提供帮助时,这可能严格适用于按需加载并行度。在实践中,一旦你的负载至少部分地通过预取来帮助,一切都会变得更加复杂,因为这样可以使用 L2 和 RAM 之间更宽的队列,这可以使观察到的并行度大于 10。最实用的方法可能是直接测量:给定测量到 RAM 的延迟和观察到的吞吐量,您可以计算任何特定负载的有效并行度。

对于(2),我的理解是相反的:L1 中的所有需求未命中首先分配到 LFB(当然,除非它们命中现有的 LFB)并且稍后可能涉及“ super 队列”(或任何称为这些的天),如果它们在缓存层次结构中也错过了更高的位置。您包含的图表似乎证实了这一点:来自 L1 的唯一路径是通过 LFB 队列。

关于caching - super 队列和行填充缓冲区的语义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45783251/

相关文章:

php - Docker:PHP、Apache 和 MySQL 在同一个容器/同一个 Dockerfile 中

caching - 在 Laravel 4 中为动态查询生成 Redis 缓存键

C#:在另一个进程的内存中搜索一个 byte[] 数组

c++ - 实体组件系统的自定义堆预分配

c# - 如何在企业项目中使用依赖注入(inject)

java - 多线程聊天程序体系结构

php - 允许在页面上缓存,但确保图像不被缓存

asp.net - 在 ASP.NET MVC 3 中为未经身份验证的用户缓存主页

python - 下载文件的上次修改时间与其 HTTP header 不匹配

java - Java中如何确定对象的大小