performance - Sandy Bridge CPU 上的二级缓存带宽
问题描述
tl;dr:Sandy Bridge CPU 上为同时顺序读取和写入而建立的 L2 缓存带宽是多少?
我试图在一些测试数据上估计我的算法的绝对基线时间。在这些数据上,它归结为重复读取大约 160 KB 的顺序数据(因此它不适合 L1),同时计算并写回一个 160 KB 的新块。所有这些都发生在单核上,不涉及多线程。部分总和可能是我正在做的一个很好的近似值。
我能够找到一些不同的来源,这些来源暗示带宽的大致范围在 30-100 GB/s 之间。尤其是:
- Agner Fog 的手册(第 132 页)加上一些仔细的计算,假设我每个周期能够进行两次读取(因为我期望 CPU 读取整个 64 字节缓存行,所以地址的第 4-6 位会有所不同)。
- 这个线程。
- 一篇我现在很难找到的博客文章正在分析原始读取带宽并获得大约 100 GB/s,但它是 (a) 对于 Skylake 和 (b) 没有同时写入。
无论如何,在这种情况下,合理的估计是多少?
解决方案
推荐阅读
- php - Laravel,不会将文件上传到 Public_html,而是在 laravel 根项目中创建文件夹
- python - 以 csv 格式导出文件时使用“索引”写入行名
- c# - 我无法绑定到数据源上的属性或列 itemDescription
- node.js - 存储日期在本地工作但在服务器中不工作
- c++ - 从 CMakeLists.txt 生成的 Visual Studio 解决方案文件的路径
- amazon-web-services - 带有 API 网关的 AWS Fargate
- visual-studio-code - 我想在 Visual Studio 代码中创建一个搜索引擎
- javascript - 在异步函数中更新状态
- c++ - 了解静态和动态库链接
- visual-studio-code - 如何仅更改 VS CODE 中注释的字体大小?