计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器优化和硬件预取(六)

2023-10-28

优化七:编译器优化,降低miss率

处理器和主内存之间不断扩大的性能差距促使编译器编写者仔细检查内存层次结构,看看编译时优化是否可以提高性能。再次,研究分为指令缺失的改进和数据缺失的改进。接下来介绍的优化可以在许多现代编译器中找到。

有些程序具有嵌套循环,以非连续的顺序访问内存中的数据。 只需交换循环的嵌套即可使代码按照数据存储的顺序访问数据。 假设数组不适合缓存,该技术通过提高空间局部性来减少丢失; 重新排序可以在缓存块中的数据被丢弃之前最大限度地利用它们。 例如,如果 x 是大小为 [5000,100] 的二维数组,且分配的 x[i,j] 和 x[i,j +1] 相邻(称为行主序,因为数组是按行),那么以下两段代码显示了如何优化访问:

 原始代码将以 100 个字的步幅跳过内存,而修订版本会在进入下一个块之前访问一个缓存块中的所有字。 这种优化在不影响执行指令数量的情况下提高了缓存性能。

优化八:指令和数据的硬件预取,减少丢失惩罚或丢失率

预取技术是一种通过提前将可能需要的数据或指令从主存中取出,放入缓存或外部缓冲区中,从而减少缓存不命中的代价,提高处理器性能的方法。预取技术可以分为指令预取和数据预取,可以分为硬件预取和软件预取。具体来说:

  • 指令预取通常是在硬件上实现的,不依赖于缓存。典型的做法是,在发生缓存不命中时,处理器会同时取出所需的块和下一个连续的块。所需的块在返回后放入指令缓存中,而预取的块则放入指令流缓冲区中。如果所需的块已经在指令流缓冲区中,那么原来的缓存请求就会被取消,直接从指令流缓冲区中读取该块,并发出下一个预取请求。
  • 数据预取也可以采用类似的方法(Jouppi, 1990)。Palacharla and Kessler (1994) 研究了一组科学计算程序,并考虑了多个可以处理指令或数据的流缓冲区。他们发现,使用八个流缓冲区可以捕获50%~70%的所有缓存不命中,对于一个拥有两个64 KiB四路组相联缓存(一个用于指令,一个用于数据)的处理器来说,这是一个很好的结果。

预取技术依赖于利用原本未被使用的内存带宽,但是如果它干扰了需求不命中,它实际上会降低性能。编译器的帮助可以减少无用的预取。当预取技术工作得很好时,它对功耗的影响可以忽略不计。当预取的数据没有被使用或者有用的数据被替换时,预取技术会对功耗有非常负面的影响。

下图为由于 Intel Pentium 4 上的硬件预取而加速,并且针对 12 个 SPECint2000 基准测试中的 2 个和 14 个 SPECfp2000 基准测试中的 9 个打开了硬件预取。 仅显示从预取中获益最多的程序; 预取使缺失的 15 个 SPECCPU 基准测试速度加快了15%。

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

计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器优化和硬件预取(六) 的相关文章

  • spss 异常值

    spss 异常值剔除 用什么方法 1 可以通过 分析 下 描述统计 下 频率 的 绘制 直方图 看图发现频数出现最少的值 就可能是异常值 但还要看距离其它情况的程度 2 可通过 分析 下的 描述统计 下的 探索 下的 绘制 选项的 叶茎图
  • 嵌入式AI-K210篇-硬件-模型训练、部署

    K210的其他参数如下 双核 64 bit RISC V RV64IMAFDC RV64GC CPU 400MHz 可超频到600MHz 双精度 FPU 8MiB 64bit 片上 SRAM 6MiB通用SRAM 2MiB的AI专用SRAM

随机推荐

  • 谷歌机器学习:问题构建 (Framing):机器学习主要术语

    谷歌机器学习 问题构建 Framing 机器学习主要术语 地址 https developers google cn machine learning crash course framing ml terminology 什么是 监督式
  • Linux只允许特定IP访问特定端口

    目录 1 查看 开启 关闭防火墙 2 查看 开放 关闭端口 3 给指定的IP开放 关闭指定的端口 4 规则的持久化位置 5 其它命令 1 查看 开启 关闭防火墙 查看服务器的防火墙状态可使用如下命令 查看防火墙状态 systemctl st
  • sqlserver单独备份某个表_T+应急备份和恢复数据方法汇总

    对于企业系统管理员来讲 定时地将企业数据备份出来存储到不同的介质上 如常见的光盘 网络磁盘等等 对数据的安全性是非常重要的 如果企业由于不可预知的原因 如地震 火灾 计算机病毒 人为的误操作等等 造成数据损失或丢失 需要对数据进行恢复 此时
  • 快速搭建你的MQTT服务器

    MQTT服务器在Linux和Windows上的搭建稍微有些区别 不过使用第三方开源的项目一般会有比较详细的说明文档 不做过多赘述 笔者搭建环境是windows10 ActiveMQ 1 windows MQTT服务器下载 https act
  • neo4j修改节点(包括属性,关系)

    将 傅式级数 这个节点删除 并把 单位冲激序列的傅里叶变换 这个节点 指向 傅氏级数 这个节点 match r where id r 76247 detach delete r match p KnowledgeBlock name 单位冲
  • Sass 条件-循环语句

    学习Sass中 if else for while each 一 条件判断 if else 示例 1 mixin blockOrHidden boolean true 2 if boolean 3 debug boolean is bool
  • OpenCV机器视觉-边缘与轮廓

    边缘与轮廓 基于图像边缘提取或二值化的基础寻找对象轮廓 边缘提取的阈值会最终影响轮廓发现的结果 主要API要有以下俩个 findContours发现轮廓 drawContours绘制轮廓 查找轮廓 处理的图像 轮廓列表 继承关系 cv fi
  • druid的解密

    项目中往往配置的数据库密码不是明文 当我们的数据库配置的密码是一系列的你看不懂的文字时 你就应该考虑是不是是druid的加解密了 使用druiid的加解密 首先应该配置依赖
  • 简易虚拟培训系统-UI控件的应用3

    目录 Button组件的组成 Button组件方法1 在Button组件中设置OnClick 回调 Button组件方法2 在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中 本篇增加使用按钮来控制显示哪
  • 牛客网SQL题目解析(答案+解析+理解)

    本文记录了牛客网sql全部题目的答案与难题解析 部分题目包含多种解法 并且涵盖了开窗函数等各种语法点的理解 标题中高亮的题目 是易错题 牛客网刷题链接 牛客网sql在线练习 本文所有语句使用mysql8 0 参考教程资源 mysql教程1
  • 贪心法求解背包问题

    编写程序 输入一组物体重量以及它们的价值大小 对每一个物体求出它对的价值重量比 按由大到小的顺序排列 每一次取出这个比值最大且物体可以被包装下的物体 直到包装满为止 输出装入背包的物体 并给出装入物体的编号以及它们各自的价值和装入背包的物体
  • java commons-chain_Apache commons chain 初探

    Apache commons chain 是什么 Apache common chain 是对责任链设计模式的改造封装 让使用者更加方便的使用 简单回顾一下责任链设计模式 在阎宏博士的 JAVA与模式 一书中开头是这样描述责任链 Chain
  • 收藏

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 仅作学术分享 不代表本公众号立场 侵权联系删除 转载于 来自 知乎 https www zhihu com question 56024942 编辑 AI有道 卷积神经网
  • tnsnames.ora配置小结

    oracle网络配置 三个配置文件 listener ora sqlnet ora tnsnames ora 都是放在 ORACLE HOME network admin目录下 1 sqlnet ora 作用类似于linux或者其他unix
  • 利用一根网线实现新电脑一键迁移文件和软件

    文章目录 问题 方法 Win10下用网线在两台电脑之间高效传输文件数据 第一步设置电脑ip 第二步 利用PING命令测试两台电脑是否连通 360手机助手实现文件迁移 参考文献 问题 最近来到了一个新的实验室 实验室新分配了一台电脑 于是想要
  • OutputStreamWriter在完成write()后 一定要立即关闭,不然写入内容不完整!

    在开发中 同一个程序中需要两次写文件 通过OutputStreamWriter来实现 刚开始为了管理方便 我把这两个操作的关闭过程统一都放到了程序的最后 但是发现写入的内容变得不完整 无论文本长短 最后总是有大约几百个字符没有写进去 后来在
  • el-table 记住选中状态

  • Gitlab部署报错There was an error running gitlab-ctl reconfigure: ruby_block[authorize Grafana with Gitla

    安装gitlab 报错 There was an error running gitlab ctl reconfigure ruby block authorize Grafana with Gitlab monitoring grafan
  • 亲身实践,这份SpringCloud Alibaba全彩笔记助你高效学习

    SpringCloud Aliababa简介 大家好 我最近在学习SpringCloud Alibaba 在此过程中积累了很多学习笔记 为了方便更多人学习 我决定将这套SpringCloud Alibaba全解笔记开源 这套笔记包含Spri
  • 计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器优化和硬件预取(六)

    优化七 编译器优化 降低miss率 处理器和主内存之间不断扩大的性能差距促使编译器编写者仔细检查内存层次结构 看看编译时优化是否可以提高性能 再次 研究分为指令缺失的改进和数据缺失的改进 接下来介绍的优化可以在许多现代编译器中找到 有些程序