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

相关文章

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件