不同级别的缓存是否运行在同一频域?

2023-12-11

较大的高速缓存通常具有较长的位线或字线,因此很可能具有较高的访问延迟和周期时间。

那么,L2 缓存是否与 L1 缓存在同一域中工作? L3 缓存(切片)怎么样,因为它们现在是非包容性的并且在所有核心之间共享?

相关问题有: 一个内核中的所有功能单元是否处于同一时钟域? 非核心部分都在同一个时钟域吗? 多核系统中的核心是否同步?

我相信时钟域交叉会引入额外的延迟。 CPU 芯片中的大部分部件都工作在同一时钟域吗?


The private L1i/d caches are always part of each core, not on a separate clock, in modern CPUs1. L1d is very tightly coupled with load execution units, and the L1dTLB. This is pretty universally true across architectures. ().

在具有每核专用 L2 缓存的 CPU 上,它还part of核心,在同一频域。通过保持时序(在核心时钟周期内)固定,并且不需要任何异步逻辑来跨时钟域传输数据,这可以使 L2 延迟保持在非常低的水平。这在 Intel 和 AMD x86 CPU 上是正确的,我假设大多数其他设计也是如此。

脚注 1:几十年前,即使在片上拥有 L1 缓存对于晶体管预算来说也是一种延伸,有时只有比较器和标签在片上,因此该部分可以在开始设置对数据的访问时快速运行在外部 SRAM 上。 (或者,如果不是外部的,有时在同一塑料/陶瓷封装中使用单独的芯片(硅片),因此电线可能非常短,并且不会作为可能需要 ESD 保护等的外部引脚暴露出来)。

或者例如早期的奔腾II以半核时钟速度运行其片外/封装内 L2 缓存(低于 PPro 中的全速)。 (但都是相同的“频域”;这是在用于电源管理的 DVFS 动态频率/电压之前的情况。)L1i/d 像今天一样紧密集成到核心中;你必须追溯到更远的地方才能找到具有片外 L1 的 CPU,就像早期经典的 RISC CPU 一样。


这个答案的其余部分主要是关于 Intel x86 CPU 的,因为从你提到的 L3 切片来看,我认为这就是你所想象的。

L3 缓存(切片)怎么样,因为它们现在是非包容性的并且在所有核心之间共享?

在主流 Intel CPU(P6/SnB 系列)中,只有 Skylake-X 具有非包容性 L3 缓存。自 Nehalem 以来,英特尔一直使用包容性末级缓存,因此其标签可以成为窥探过滤器。看intel core i7处理器使用哪种缓存映射技术?。但SKX从环变成了网,并且使L3非包容/非排他。


在 Intel 台式机/笔记本电脑 CPU(双/四)上,所有内核(包括其 L1+L2 缓存)都处于相同的频域。非核心(L3 缓存 + 环形总线)位于单独的频域中,但我认为通常以核心的速度运行。如果 GPU 繁忙但核心都空闲,它的时钟可能会高于核心。

即使 CPU 降频,内存时钟仍保持高电平。 (不过,如果 CPU 决定将时钟频率从 4.0 GHz 降低到 2.7 GHz,单核带宽可能会受到影响,因为它在唯一的活动核心上运行受内存限制的代码。单核带宽受 max_concurrency / 延迟的限制,而不是受 DRAM 带宽本身的限制如果您有双通道 DDR4 或 DDR3。为什么 Skylake 在单线程内存吞吐量方面比 Broadwell-E 好很多?我认为这是因为非核心延迟增加。)

The 维基百科非核心文章提到将其与核心分开超频以减少 L3/内存延迟。


在 Haswell 和后来的 Xeon (E5 v3) 上,非核心(环形总线和 L3 切片)和每个单独的核心都有单独的频域。(来源:弗兰克·丹尼曼的NUMA 深入探讨第 2 部分:系统架构。它有一个拼写错误,说 Haswell (v4),而 Haswell 实际上是 Xeon E[357]-xxxx v3。但其他来源如这篇论文量子化学应用中核心和非核心频率缩放模式的比较 GAMESS确认 Haswell 确实具有这些功能。非核心频率缩放 (UFS) 和每核心功耗状态 (PCPS) 都是 Haswell 中的新增功能。


在至强上beforeHaswell,非核心以该软件包上当前最快核心的速度运行。在双插槽 NUMA 设置上,这可能会严重成为瓶颈other套接字,通过使其缓慢跟上窥探请求。请参阅 John“带宽博士”McCalpin 的帖子这个英特尔论坛主题:

在 Xeon E5-26xx 处理器上,“uncore”(包含 L3 缓存、环形互连、内存控制器等)的运行速度不高于最快的核心,因此“package C1E state”会导致 uncore也降至 1.2 GHz。在此状态下,芯片需要更长的时间来响应 QPI 探听请求,从而增加了有效local另一个芯片上的处理器和 DMA 引擎看到的内存延迟!

...在我的 Xeon E5-2680 芯片上,“package C1E”状态增加local另一个芯片上的延迟几乎增加了 20%

“封装 C1E 状态”还会将位于“空闲”芯片上的内存的持续带宽减少高达约 25%,因此任何 NUMA 放置错误都会产生更大的性能损失。

Dr. Bandwidth 运行了一个简单的无限循环,固定在另一个插槽的核心上以保持时钟正常,并且能够测量差异。

支持四插槽的 Xeon (E7-xxxx) 在每个插槽中都有一个小型探听过滤器缓存。双插槽系统只是通过每个探听请求向另一个插槽发送垃圾邮件,即使它们在 L3 未命中后访问自己的本地 DRAM,也使用 QPI 带宽的很大一部分。


我认为即使所有核心都空闲时,Broadwell 和 Haswell Xeon 也可以保持其非核心时钟较高,这正是为了避免这个瓶颈。

Bandwidth 博士表示,他在 Haswell Xeon 上禁用了包 C1E 状态,但这可能没有必要。他还发布了一些东西关于使用非核心性能计数器来测量非核心频率以了解您的 CPU 真正在做什么,以及关于可能影响非核心频率决策的 BIOS 设置。


更多背景:我发现https://www.anandtech.com/show/8423/intel-xeon-e5-version-3-up-to-18-haswell-ep-cores-/4关于一些更改,例如新的监听模式选项(在环形总线上跳跃将监听发送到另一个核心),但它没有提到时钟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同级别的缓存是否运行在同一频域? 的相关文章

  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp
  • 找出 CPU 时钟频率(每个内核、每个处理器)

    像 CPUz 这样的程序非常擅长提供有关系统的深入信息 总线速度 内存时序等 但是 是否有一种编程方法可以计算每个核心 以及每个处理器 在每个 CPU 具有多个核心的多处理器系统中 频率 而无需处理 CPU 特定信息 我正在尝试开发一个反作
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • 如何强制网络浏览器不缓存图像

    背景 我正在为两个公益网站编写并使用一个非常简单的基于 CGI Perl 的内容管理工具 它为网站管理员提供了事件的 HTML 表单 他们可以在其中填写字段 日期 地点 标题 描述 链接等 并保存 在该表格上 我允许管理员上传与该活动相关的
  • __builtin___clear_cache 如何工作?

    浏览 gcc 文档 我偶然发现了内置函数 builtin clear cache 内置函数 void builtin clear cache char begin char end 此函数用于刷新处理器的指令缓存 以获取开始包含和结束排除之
  • 最好的 NHibernate 二级缓存提供程序是什么?

    我见过有很多这样的 NCache Velocity 等等 但我还没有找到比较它们的表格 考虑以下标准什么是最好的 容易明白 最近正在维护中 是免费的或者有足够好的免费版本 Works 我无法说出什么是最好的或最差的 但我会分享我使用 NCa
  • 开发中的 Laravel 和视图缓存——无法立即看到变化

    我和一些朋友决定开始一个项目 我们偶然发现了 Laravel 并认为它可能是一个很好的工具 我们开始在本地使用它来开发一些页面 并注意到一些奇怪的事情 当我们用不同的信息更新视图时 大约需要 5 到 10 分钟视图信息才会发生变化 这就像
  • Azure 函数和缓存

    我们计划开发一个 Azure 函数 其输入触发器是服务总线消息 输出是 blob 存储 服务总线消息将包含图像 url 该函数会将图像大小调整为预定义的分辨率 并将上传到 azure blob 存储 图像大小应调整到的分辨率存储在数据库中
  • 使用Python获取CPU温度?

    如何使用 Python 检索 CPU 的温度 假设我在Linux上 有一个较新的 sysfs 热区 API http shallowsky com blog linux kernel sysfs thermal zone html 也可以看
  • Rails:控制文件存储缓存大小

    Rails 中基于文件的缓存的文档说 请注意 缓存将不断增长 直到磁盘已满 除非您 定期清除旧条目 不幸的是 它没有提供任何有关如何定期清除旧条目的信息 是否设置合适的值 expires in完成这项工作还是清除缓存背后还有其他某种黑魔法
  • 写入 Django 缓存非常慢

    我曾经将数据库查询缓存在全局变量中以加快我的应用程序的速度 由于这是强烈不建议的 并且它确实产生了问题 所以我想使用任何类型的 Django 缓存 我尝试了 LocMemCache 和 DatabaseCache 但两者都需要 关于15秒设
  • 有没有办法清除所有会话中的一些会话数据?

    一般来说 我有以下场景 从数据库中获取产品及其相关数据 将获取的数据转换为 php product 对象 在会话中缓存产品对象 缓存是只读的 即客户在网站上查看产品 但也有类似的电话getProductIdsByCategory categ
  • 缓存静态 HTML 站点

    我通常使用 WordPress 但刚刚为客户完成了一个项目 该项目是一个静态 HTML 页面 由 8 个页面和每页约 2 个图像组成 使用 WordPress 我会使用 w3 总缓存 cloudflare photon 或通过 wp 引擎的
  • Nestjs如何控制缓存?

    最近读了nestjs的文档 从中学到了一些东西 但我发现了一些让我困惑的事情 In 技术 缓存 https docs nestjs com techniques caching 文档告诉我使用像这样的装饰器 UseInterceptors
  • 返回地址预测堆栈缓冲区与堆栈存储的返回地址?

    一直在阅读 Agner Fog 的 Intel AMD 和 VIA CPU 的微架构 他在第 34 页描述了 返回地址预测 http www agner org optimize microarchitecture pdf http www
  • 你可以推荐什么 JavaScript 缓存 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个好的javascript内存缓存库来缓存客户端计算结果 我的要求 适用于 Internet Explorer FireFox
  • 2022年Android CPU架构分布(armeabi-v7a vs arm64-v8a)

    有没有关于 2022 年 Android 设备上的架构使用情况的官方信息 我有一个支持armeabi v7a 和arm64 v8a 的应用程序 我想要放弃对armeabi v7a的支持并且仅支持 64 位设备 arm64 v8a 但我找不到
  • 使用键模式从 Laravel 4 缓存中删除?

    对于我的包 我们使用 Laravel 缓存 我们创建的每个缓存键都有前缀 所以我们得到mypackage config mypackage md5ofafilename有时我需要刷新我的包创建的所有缓存文件 问题是什么 我只知道缓存键的模式
  • 执行 SET {Key} 超时,inst: 0,mgr: Inactive,queue: 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

    我正在尝试使用 StackExchange Redis 客户端将 90 KB pdf 文件保存到 Azure Redis 缓存中 我已将该文件转换为字节数组并尝试使用 stringSet 方法保存它并收到错误 Code byte bytes

随机推荐

  • 选择大于某个值的列

    我的问题看起来很简单 但我查了很多答案 但没有找到合适的答案 所以我有一个小数据 如下所示 我希望 count 36 只查找包含大于 36 的列 我的代码如下 count 36 lt df which df 1 19 gt 36 数据如下所
  • Tkinter 树视图选择

    from Tkinter import from ttk import import tkMessageBox class Application Frame def selected self curItem self tree focu
  • 修改 bash 脚本中的 $READLINE_LINE 和 $READLINE_POINT 值

    接听时这个问题我用了一个非常凌乱的bind函数根据 my 的结果修改当前行automplete sh script 当我最终将此脚本用于个人用途时 我尝试简化bind并尝试直接在脚本内进行所有读取和修改 到目前为止 我可以访问 READLI
  • WP7 - 列表框绑定

    我有一个 ObservableCollection 我想将其绑定到我的列表框 lbRosterList ItemsSource App ViewModel rosterItemsCollection 但是 在该集合中我还有另一个集合 Dat
  • [[: 找不到命令

    我正在没有 sudo 权限的系统上安装 RVM 理论上它应该工作得很好 但是当我添加时 s HOME rvm scripts rvm source HOME rvm scripts rvm 到 bash profile 它没有做它应该做的事
  • 检查项目后会触发哪个 CheckedListBox 事件?

    我有一个 CheckedListBox 我想要一个事件after检查一个项目 以便我可以将 CheckedItems 与新状态一起使用 由于 ItemChecked 在 CheckedItems 更新之前被触发 因此它无法开箱即用 当 Ch
  • 替换功能不替换[重复]

    这个问题在这里已经有答案了 我按照一些文档使用 JavaScript 替换函数 但它没有改变任何内容 不会抛出任何错误 知道我做错了什么吗 该变量是从 XML 中检索的 也许需要将其转换为字符串或其他内容 for var i 0 iln p
  • 通过 jQuery 在 YouTube 嵌入电影中启用自动播放

    我使用以下代码嵌入 YouTube 电影 正如您在 src 属性中看到的 有一个变量 autoplay 0 我在 jQuery 中编写了两行脚本 应将 autoplay 变量设置为 1 var title iframe ytplayer a
  • 在VBA中处理大数

    如何在VBA中处理10E22这样的非常大的数字 dim a b c as double a 1234567890123456789012 c a bit b a c 1 bit 我得到 b 0 按照建议 我改变dim a as double
  • 这是 JSON.NET 或实体框架中的错误,还是我在尝试使用 JSON.NET 序列化异常列表时做错了什么?

    尝试序列化一组错误时出现此错误 ISerialized 类型 System Data Entity Infrastruct DbUpdateConcurrencyException 没有有效的构造函数 要正确实现 ISerialized 应
  • 调用 getBluetoothService() 时没有使用 BluetoothManagerCallback

    我是安卓开发新手 我正在编写一个应用程序 它从笔记本电脑的蓝牙终端接收字符串 打开连接时 执行以下行时 我收到错误 连接被拒绝 socket connect 我尝试检查 connect 方法中发生了什么 在这里我发现 Android Stu
  • 替换为 preg_replace 中的动态变量

    我陷入了这个问题 即 我有一个像这样的数组 array name gt John email gt email protected 和这样的字符串样本 string Hi name your email is email 问题很明显 将名称
  • 无法使用接口默认方法

    我已经安装了新版本的 Visual Studio 并将项目设置为 C 8 当我尝试使用如下所示的新界面功能时 它说我无法在界面中实现 这似乎不知何故我无法使用新功能 谁能解释一下为什么 它仍然没有包含在 2019 年预览中吗 interfa
  • 使用 htaccess 将所有内容重定向到 index.php

    我正在编写一个简单的基于 PHP 的 MVC 框架 我希望这个框架能够安装在任何目录中 我的 PHP 脚本获取请求 uri 并将其分成多个段 它使段 1 成为控制器 使段 2 成为动作 当我这样做时一切都很好 http www exampl
  • 使用dom java解析xml

    我有以下 xml
  • 如何从 wpf 中的方法调用返回格式化文本

    我正在开发一个插件界面 我希望有一种方法可以返回格式化文本 以便 WPF 控件可以只显示插件结果 返回该文本的最佳方式是什么 这样我只需要将插件结果分配给 WPF 文本控件 可能是 RichTextBox 或类似的东西 我想支持粗体 下划线
  • UIEdgeInsets 在 UIGraphicsBeginImageContextWithOptions 内的 CGContextDrawImage 上被忽略

    当绘制到屏幕外缓冲区时 我很难让图像插图正常工作 在 UIImage 上使用 ressizedImageWithCapInsets 直接 setImage 到按钮中对我来说效果很好 UIImage base UIImage imageNam
  • 如何启用模式验证以便 JAXB 拒绝空元素?

    我遇到了一个棘手的 JAXB 解析问题 我正在使用 JAXB RI 2 x 我已经使用 unmarshaller setSchema schema 启用了架构验证 但是 如果 XML 包含空元素 JAXB 不会抛出任何验证错误 所以客户很乐
  • 使用 pandas 的 if 语句会抛出“ValueError:系列的真值不明确”

    我想查看我的数据框中是否存在某一列的特定字符串 如果存在则触发 API 到目前为止的代码 if new df col1 str contains string True POST REQUEST elif new df col2 str c
  • 不同级别的缓存是否运行在同一频域?

    较大的高速缓存通常具有较长的位线或字线 因此很可能具有较高的访问延迟和周期时间 那么 L2 缓存是否与 L1 缓存在同一域中工作 L3 缓存 切片 怎么样 因为它们现在是非包容性的并且在所有核心之间共享 相关问题有 一个内核中的所有功能单元