可以直接使用程序集访问缓存吗?

2024-04-01

就效率而言,缓存是一个核心问题。

我知道缓存通常会自动发生。

但是,我想自己控制缓存的使用,因为我认为我可以比一些不知道确切程序的启发式方法做得更好。

因此,我需要汇编指令来直接移入或移出高速缓存单元。

like:

movL1 address content

我知道有一些指令给出了“缓存系统”提示,但我不确定这是否足够,因为这些提示可能会被忽略,或者它们可能不足以表达通过这种移入/移出缓存可以表达的任何内容命令。

是否有允许完全缓存控制的汇编器?

旁注:为什么我想改进缓存:

假设一个 CPU 有 1 个寄存器和一个包含 2 个单元的高速缓存。

考虑以下两个程序:

(其中 x,y,z,a 是存储单元)

"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move z to x"
"move y to x"
"END"

"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move a to x"
"move y to x"
"END"

在第一种情况下,您将使用 x、y、z 的寄存器和缓存(a 仅写入一次) 在第二种情况下,您将使用 a、x、y 的寄存器和缓存(z 只写入一次)

如果CPU进行缓存,它根本无法提前决定它面临的是上述两种情况中的哪一种。

在知道程序是否执行之前,它必须决定每个存储单元 x、y、z 是否应该缓存其内容。 1 或没有。 2,因为两个程序的开始是相同的。

另一方面,程序员提前知道哪些存储单元被重用以及何时被重用。


彼得·科德斯写道:

在大多数 ISA 的大多数微架构上,不,您无法将一行固定在高速缓存中以阻止其被逐出。使用缓存的唯一方法是作为加载/存储的透明缓存。

这是正确的,但例外情况很有趣......

DSP(“数字信号处理”)芯片通常提供在“高速缓存”和“暂存存储器”功能之间划分 SRAM 的有限能力。关于这个主题有很多白皮书和参考指南——一个例子是http://www.ti.com/lit/ug/sprug82a/sprug82a.pdf http://www.ti.com/lit/ug/sprug82a/sprug82a.pdf。在该芯片中,有三个 SRAM 块:一个小的“Level-1 指令”SRAM、一个小的“Level-1 数据”SRAM 和一个较大的“Level-2”SRAM。这三者中的每一个都可以在高速缓存和直接寻址存储器之间进行分区,具体细节取决于具体的芯片。例如,芯片可能不允许缓存、1/4 SRAM 作为缓存、1/2 SRAM 作为缓存、或者全部 SRAM 作为缓存。 (比率受到限制,因此可以有效地对允许的缓存大小进行索引。)

IBM“Cell”处理器(用于2006年发布的索尼PlayStation 3)是一种多核芯片,具有一个普通通用核心和八个协处理器核心。协处理器核心的指令集有限,加载和存储指令只能访问其私有 128KiB“暂存器”内存。为了访问主存储器,协处理器必须对 DMA 引擎进行编程,以执行主存储器到本地暂存存储器的块复制(反之亦然)。这种方法提供(并且需要)对数据移动的完美控制,从而产生(极少量)非常高性能的软件。

一些 GPU 还具有小型片上 SRAM,可以配置为 L1 缓存或显式控制的本地内存。

所有这些都被认为“非常难”(或更糟)使用,但如果产品需要非常低的成本、完全可预测的性能或非常低的功耗,这可能是正确的方法。

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

可以直接使用程序集访问缓存吗? 的相关文章

  • 为什么n++执行速度比n=n+1快?

    在C语言中 为什么n 执行速度快于n n 1 int n n int n n n 1 我们的老师在今天的课堂上问了这个问题 这不是家庭作业 如果您正在开发一个 石器时代 编译器 的情况下 石器时代 n比n 比n n 1 机器通常有incre
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • NASM 中的 equ 和 db 有什么区别?

    len equ 2 len db 2 它们是否相同 产生可以用来代替的标签2 如果不是 那么每种申报表的优点或缺点是什么 它们可以互换使用吗 第一个是equate 与 C 类似 define len 2 因为它实际上并没有在最终代码中分配任
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 如何确定lru_cache所需的maxsize?

    如果我们创建一个类似返回斐波那契数列的递归函数 并使用lru cache 真正的总督是什么max size范围 很明显 我们在计算每一项时只需要最后两项 但是设置maxsize to 2并运行第一个1000计算需要很长时间才能完成 我尝试使
  • Javascript 定时通知 - setTimeout、setInterval

    我正在创建一个网络应用程序 允许用户管理日历 CRUD 事件 任务 提醒等 我正在尝试实现一个功能 他们将在事件 任务前 x 分钟收到弹出提醒 根据我的理解 使用 javascript 确实只有一种方法可以做到这一点 登录时 检查数据库中是
  • 模块化算术和 NTT(有限域 DFT)优化

    我想使用 NTT 进行快速平方 参见快速大数平方计算 https stackoverflow com q 18465326 2521214 但即使对于非常大的数字 结果也很慢 超过 12000 位 所以我的问题是 有没有办法优化我的 NTT
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 为什么改变对象的 [[prototype]] 会降低性能?

    来自 MDN 文档standard setPrototypeOf功能 https developer mozilla org en US docs Web JavaScript Reference Global Objects Object
  • 使用 React.forwardRef 与自定义 ref prop 的价值

    我看到React forwardRef从反应文档来看 似乎是将引用传递给子功能组件的认可方式 const FancyButton React forwardRef props ref gt
  • Javascript 播放声音性能重吗?

    我正在用 Javascript 制作一个简单的游戏 当一个物体与墙壁碰撞时 它会发出 砰 的声音 声音的响度取决于物体的速度 速度越高 gt 声音越大 播放功能 playSound function id vol ID of the sou
  • 为什么同样的算法在 Scala 中运行比在 C# 中慢得多?以及如何让它更快?

    该算法根据序列中每个成员的变体创建序列的所有可能变体 C 代码 static void Main string args var arg new List
  • 无法识别的仿真模式:MinGW32 上的 elf_i386

    我正在尝试制作内核 但无法链接C与程序集一起输出 这ld 我收到错误 无法识别的仿真模式 elf i386 我正在使用 Windows 10 专业版以及 MinGW32 和 MSYS 我正在使用的代码 link ld link ld OUT
  • 将字段中的位扩展到掩码中所有(重叠+相邻)集位的最快方法?

    假设我有 2 个名为 IN 和 MASK 的二进制输入 实际字段大小可能是 32 到 256 位 具体取决于用于完成任务的指令集 每次调用时两个输入都会改变 Inputs IN 1100010010010100 MASK 000111101
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • 如何缓存 twitter api 结果?

    我想缓存 twitter api 结果的结果并将其显示给用户 缓存结果的最佳方法是什么 我正在考虑根据时间限制将结果写入文件 可以吗 还是应该使用任何其他方法 最重要的是 理想的缓存时间是多少 我想显示来自 twitter 的最新内容 但
  • IronPython 中批量求值表达式的性能

    在 C 4 0 应用程序中 我有一个具有相同长度的强类型 IList 的字典 一个基于动态强类型列的表 我希望用户根据将在所有行上聚合的可用列提供一个或多个 python 表达式 在静态上下文中它将是 IDictionary

随机推荐

  • Spark Dataframes 已成功创建,但无法写入本地磁盘

    我正在使用 IntelliJ IDE 在 Microsoft Windows 平台上执行 Spark Scala 代码 我有四个 Spark Dataframe 每个 Dataframe 大约有 30000 条记录 我尝试从每个 Dataf
  • 如何使用 jQuery POST 将变量从 JavaScript 传递到 PHP

    我正在传递变量sessionnum来自页面 chat php 中的以下 Javascript 函数 document ready function timestamp 0 updateMsg form chatform submit fun
  • 如何才能更准确地计算 PI?

    我应该使用 1 到 30 之间的数字通过下面的公式来计算 pi Picture https i stack imgur com fYtUE png 这是我到目前为止所做的 int k outside 0 double inside 0 co
  • IDE 可以使用 Maven 解析 Java 中的 Scala 类吗?

    我有一个混合 Java 和 Scala 源的项目 按照以下说明进行操作这一页 http scala tools org mvnsites maven scala plugin usage html 它在从命令行运行 Maven 时有效 然而
  • Firestore:用其内容填充 ids 数组的最佳方法是什么?

    我有包含用户 ID 的对象数组 const userIDs key user 1 key user 2 key user 3 我想用 cloud firestore 中的用户数据填充它 const userIDs key user 1 na
  • 在 SQL Server 2005 中授予对 2 个表的只读访问权限的最佳方法?

    向少数用户授予对 SQL Server 2005 数据库中几个表的访问权限的最佳方法是什么 我知道文献推动了视图的使用 但是授予对实际表的只读访问权限有什么好处 至少对于表来说 开销会更少 因为索引和其他限制已经就位并在表中进行管理 单点维
  • 如何使用 jQuery 附加 HTML

    我正在使用构建一个 HTML 元素 this html my html here 我需要使用不同的 CSS 在这里添加许多元素 所以我想要的是我应该能够在此处附加另一个 HTML this html my html here this ht
  • ObjC: +[NSObject isSubclassOfClass:] 给出不正确的失败

    我有一个 iOS 静态库 它定义了NSOperation客户端应该子类化以添加自己的逻辑的基类 interface BaseClass NSOperation 客户向管理器注册他们的子类 OperationManagerClass regi
  • 按组排列的 NA 计数[重复]

    这个问题在这里已经有答案了 我知道 R 中的以下语法将按变量给出 NA 的计数 如何通过分组变量对此进行分层 na count lt sapply x function y sum length which is na y 我们可以用agg
  • 如何验证 Azure 虚拟机 RDP 证书?

    我的虚拟机的 RDP 证书指纹由于某种原因发生了更改 有没有办法在 Azure 中验证新的证书指纹 类型 虚拟机 经典 计算机 Basic A3 操作系统 Windows Server Azure 中有可用的启动诊断日志 在启动虚拟机时默认
  • Iexpress - 提取路径

    我要创建一个自解压存档 但在连接默认解压路径时遇到问题 我想在与自解压存档程序相同的路径中解压我的文件 不幸的是 这些文件正在另一个路径中提取 C Users computer AppData Temp IXP000 TMP 可以设置路径吗
  • 应用程序无法打开,因为它来自身份不明的开发者

    我昨天安装了 Mac OS X Mavericks 10 9 从那时起我无法启动 Eclipse 我附上我看到的消息的屏幕截图 有解决方法吗 我找到了一个解决方案修复 Mac OS X 中的 应用程序无法打开 因为它来自身份不明的开发者 错
  • 如何使用 GitPython 拉取远程存储库?

    我正在尝试找到使用 gitPython 提取 git 存储库的方法 到目前为止 这是我从官方文档中获取的内容here http gitpython readthedocs org en latest tutorial html handli
  • Android File.exists() 不区分大小写吗?

    我创建了一个新文件夹 sdcard dd by File album new File albumPath if album exists Log d TAG albumPath already exists else boolean bF
  • OS X 上带有 fat 库的架构 x86_64 的未定义符号

    我已经建立了libcrypto a and libssl a我自己从来源处指定darwin64 x86 64 cc 对于 64 位 和darwin i386 cc 对于 32 位 至OpenSSL的配置脚本 创建了脂肪库lipo并将它们添加
  • 难道静态成员不会使类本身成为(全局)对象吗?

    每当我遇到单例模式或任何静态类 即 几乎 仅具有静态成员的类 的实现时 我想知道这是否实际上是一种黑客行为 因此严重滥用了类和实例的原则只是为了设计单个对象而不是设计类并创建单个实例 对我来说 看起来类的静态成员通常会尝试向类添加某种它们实
  • 套接字附加程序 - 基本示例一步一步[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • React router Link 标签的 target="_blank" 上的不同路由渲染

    即使链接将 to 属性设置为正确的路线 但单击时也不会加载 React router 中的另一条路由被加载到它的位置 这是代码 App js const isLoggedIn setIsLoggedIn React useState fal
  • 从距离矩阵开始查找 K 个最近邻

    我正在寻找一个接受良好优化的函数n X n距离矩阵并返回n X k矩阵的索引k第 i 行中第 i 个数据点的最近邻居 我发现了无数的不同R可以让您执行 KNN 的软件包 但它们似乎都在同一函数中包含距离计算和排序算法 特别是 对于大多数例程
  • 可以直接使用程序集访问缓存吗?

    就效率而言 缓存是一个核心问题 我知道缓存通常会自动发生 但是 我想自己控制缓存的使用 因为我认为我可以比一些不知道确切程序的启发式方法做得更好 因此 我需要汇编指令来直接移入或移出高速缓存单元 like movL1 address con