GEA 3.4 流水线、缓存及优化

2024-04-17 06:08
文章标签 3.4 优化 缓存 流水线 gea

本文主要是介绍GEA 3.4 流水线、缓存及优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软实时系统:即不会因为帧率而死亡,优化通常是指提升帧率

3.4.1 并行范式转移

之前CPU慢而降低CPU处理强度而提高内存处理强度
现在由于CPU具有并行能力普遍做法要使得CPU做更多的工作而避免访问内存!

3.4.2 内存缓存

处理器内含有内存缓存相较于主内存材料更贵并且更靠近核心速度更快 但也受限于大小和材料容量小很多
内存缓存中通常保存最常使用的数据块 若CPU请求的数据已经存在于内存中称为缓存命中否则称为命中失败 命中失败会带来更高的消耗

3.4.2.1 缓存线

为了降低命中失败所带来的后果通常读入更大连续内存块来保证接下来有更高的几率进行缓存命中
缓存的地址与主内存的地址存在一对多的关系
用主地址模除以缓存地址的模来得到缓存索引。缓存只能以缓存线为单位寻址。
以下内容我没有理解 摘抄下来以后有缘再见 关于主内存 缓存 内存线的问题
缓存只能处理与缓存栈大小倍数对齐的内存地址。因此,缓存实际上只能以缓存线为地址寻址,而非以字节为单位。我们考虑缓存的总大小为 2^{M} 字节,而内存线大小为 2^{n} 。我们可以用以下方法转换主内存地方至缓存线指引。首先我们去掉主内存地址的n个最低有效位,从而把字节单位转换成缓存线索引(即把地址除以2^ {n})。然后把地址分割为两部分:M-n个最低有效位为缓存索引,而余下的位告诉我们这缓存线来自哪一块内存。块索引是以一个称为旁路转换缓存(TLB)的特殊数据结构存储在缓存控制器中的。没有TLB的话。我们便无法追踪缓存索引与其他主内存地址之间的一对多关系。
现在理解了,要凭借着图像来抽象理解。

3.4.2.2 指令缓存和数据缓存

指令缓存预载即将执行的机器码,数据缓存加速从主内存上读写数据。
大多数CPU会分开这两种缓存

3.4.2.3 组关联和替换策略

缓存线与主内存地址的简单映射称为直接映射缓存。
但是如果命中失败对于已经填充了的缓存内存需要进行逐出数据的操作。
直接映射可能因为来回逐出数据而导致异常,因此现在采用两路组关联或者n路组关联也就是一块主RAM对应多块缓存内存。当发生应该逐出的时候由CPU决定逐出哪路保留哪路,常见的操作是逐出老的一路而保存新的一路。

3.4.2.4 写入策列

透写式:直接写入主内存。
回写式:先写到缓存中再合适的时候写回内存。例如程序明确清除缓存的时候。

3.4.2.5 多级缓存

在其他条件不变的情况下命中率越高程序运行的越好。缓存越大命中率越好,但因为大了之后就离得cpu远了会导致速度变慢。
多数游戏机至少采用两级缓存。先在L1找数据找不到了再尝试更大但是更慢的二级缓存。
有的PC甚至支持三级缓存。

3.4.2.6 缓存一致性:MESI和MOESI

当多个CPU核心共享单个主内存时事情变得复杂,系统必须维持缓存一致性。保证运行时程序不能展现出缓存中的内容是不同步的。

3.4.2.7 避免缓存命中失败(干货)

使用以下的经验法则可以尽量避免缓存命中失败。

  • 高效能代码的体积越小越好,体积以机器码指令数目位单位。(编译器和连接器回复测吧函数至于连续内存中)
  • 在性能关键的代码段落中,避免调用函数。
  • 若要调用函数要把函数放在最接近调用函数的地方,最好是紧接调用函数的前后,而不要把函数至于另一个翻译单元(因为这样会完全无法控制函数的距离)
  • 谨慎地使用内联函数。内敛小型函数能增进效能。然而,过多的内联会增大代码体积,使性能关键代码再不能完全装进缓存。假设有一个处理大量数据的紧凑循环,若循环时的代码不能完全装进缓存,每个循环迭代便会产生两次指令缓存命中失败。遇到这种情况,最好重新思考算法及其代码实现。

原理是?

  • 单个函数的机器码几乎总是至于连续的内存中。绝大多数的情况下链接器不会把一个函数切开,并在中间防止另一个函数(内联函数除外)
  • 编译器和链接器按函数在翻译单元源代码中的出现次序排序内存布局

3.4.3 指令流水线及超纯量CPU

指令流水线:流水线的第一个阶段结束后就尽快传送新的指令到流水线。保证CPU各部分都在忙碌的工作着。最慢的一个部分决定流水线的带宽也就是吞吐量。流水线的延迟指的是完成一个指令所需要的时间。超纯量处理器包含多组冗杂的电路使得CPU并行处理多个指令

3.4.3.1 数据依赖及流水线停顿

如果一个流水线的后一部分需要等待前一部分完成指令 这个停顿就叫流水线停顿。丰富功能的CPU会把后续不依赖之前过程功能的质量填充进停顿期来同时执行。

3.4.3.2 分支预测

调用if的时候在完成if的函数时候CPU会自动预测一个分支前进。最简单的预测方法是总是选择反向的分支,而不是选择向前的分支。高品质的CPU自带分支预测组件 类似大数据统计? 提高精确性

3.4.3.3 load-hit-store

在powerPC上常见类似XBOX360和PS3 这里先挖坑跳过以后回来再看暂时不做主机

这篇关于GEA 3.4 流水线、缓存及优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910983

相关文章

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.