Computer Architectrure: Quantitative Approch 第三章第一、二节

Computer Architectrure: Quantitative Approch 第二章Memory Hierarchy Design第三节 Ten Advanced Optimizations of Cache Performance 前面的平均内存访问时间公式为我们提供了缓存优化的三个指标:命中时间、未命中率和未命中惩罚。 鉴于最近的趋势,我们将缓存带宽和功耗添加到此列表中。 我们可以根据这些指标将我们检查的 10 项高级缓存优化分为五类: 减少命中时间——小而简单的一级缓存和路预测。 这两种技术通常还可以降低功耗。 增加缓存带宽——流水线缓存、多组缓存和非阻塞缓存。 这些技术对功耗有不同的影响 减少未命中惩罚——关键字优先并合并写入缓冲区 阅读详情

Instruction-Level Parallelsim: Concepts and Challenge

本章主要介绍一些概念:

数据依赖性
1. 指令i的结果用在了指令j的计算里
2. 指令j依赖于指令i的结果,指令j依赖于指令k的结果(传递性)

命名依赖性
1. j在i后执行,j会对i中使用的寄存器进行改写
2.j和i顺次执行会写入相同的地址

数据冒险:囊括了数据依赖性和命名依赖性两种情况,主要有WAW WAR RAW

控制依赖性:执行的结果依赖于跳转指令,因此需要将跳转指令做完才能知道正确结果。

Basic Compiler Techniques for Exposing ILP

这章主要探索用编译技术来增强处理器运行ILP的能力,其对处理器的静态issue和规划非常重要。本节可以配合Appendix H一起读,Appendix H里面会提到更复杂的编译和硬件设计。

Basic Pipeline Scheduling and Loop Unrolling

为了保持流水线的工作效率,我们必须让流水线同时处理一些互不想关的指令。为了避免流水线的阻塞,对于两条有依赖性的指令,下一条指令必须与上一条分开一定时间(等于上一条指令执行时间)。对编译器处理能力的评定标准包括在一个程序中可以处理ILP的数量和流水线中功能单元间的延迟。

在这里插入图片描述

Figure3.2展示了我们在本章假设的浮点数单元各个执行过程的延迟。假设使用的是稳定的五步流水线,这样跳转有一个时钟的延迟。我们假定这个过程完全流水线化并且流水线各个步骤可以复制。这样在任意时钟都可以处理任意运算,没有结构阻塞。

在这一部分,我们将展示编译器如何利用转换循环来提高有效ILP数量。我们主要使用下面这条例子,将标量加到向量上。
在这里插入图片描述
因为每个相加的过程是独立的,所以这是一个平行循环。我们在Appendix H中对这个过程系统研究,并且提供了在编译过程中可以测试各个循环是否独立的方法首先我们来看一下这个循环的性能,并且展示我们如何使用循环平行来提高循环性能。(各个过程的性能分析如Figure3.2所示)

首先将示例转化成MIPS语言,如下所示R1初始化为向量的最大地址;F2是标量数值s;R2的数值是最先算出的,是一个地址8(R2)相应于向量最起始的数值。

没有进行流水线规划的直接MIPS代码如下:
在这里插入图片描述
我们首先来看看用规划好的流水线优化这个代码能将效率提升多少。

在这里插入图片描述

在上面的示例中,我们用7个时钟完成了循环和写回一个向量单元。但实际上真正运算的时间仅为7个时钟中的3个时钟(ld,add,st),余下的四个时钟是用来做上面的循环(daddui, bne和两个时钟的延迟)。为了降低这四个时钟,我们需要编写比上面指令数更多的运算。

一个用来提高与跳转指令和上层指令相关指令数量的方法是loop unrolling.解循环简单的多次复制了循环主体并调整循环终止代码。

解循环也可以来做流水线进程规划。因为它减少了指令跳转,所以可以把不同迭代放到同一进程里。基于以上,我们可以通过在循环体中做一些额外的无依赖性指令来减少数据延迟。如果我们在解循环过程中简单的复制指令,结果使用相同的寄存器可能会阻止我们有效地调度循环。因此我们希望对于不同的指令使用不同的寄存器,这样也提高了寄存器的需求。

在这里插入图片描述
Loop Unrolling 示例

在实际的编译过程中,我们并不知道循环的上限。假设上限是n,我们希望循环复制k次。我们会做一对连续的循环。先将循环执行(n mod k)次,然后解循环,让循环进行n/k次。(第四章也有相似的技术叫做strip mining,是用来编译向量计算的)当n值很大的时候大多数执行时间是用来解循环。

在上面的示例中,解循环来提高指令效率是通过减少指令循环数,当然同时也会提高代码大小。解循环可以将下面示例中流水线的代码效率提高多少呢?

在这里插入图片描述

在展开循环上获得的收益大于原始循环上的收益。这个提升来自于解循环带来了更多可以用来最小化延迟的计算,比如上面这个示例就没有延迟。用这种方法处理循环必须实现ld和st相互独立并且可以相互交换。

Summary of the Loop Unrolling and Scheduling

通过这章和Appendix H的内容,我们可以学习到利用各种带有ILP的软硬件技术来充分发挥处理器函数单元的作用。这里面大多技术的关键是何时以及如何对指令进行重排序。在我们的示例中,做了很多指令顺序的调整。(进行手动调整)在实际应用中,处理器必须通过软件或硬件利用合理的方式进行调整。为了实现最终的解循环代码,我们需要最以下转换:
1. 通过看循环内的操作除了判断循环继续下去的代码间没有依赖性来确保解循环可操作。
2.在使用相同寄存器来做不同计算的情况下,使用不同的寄存器来避免延迟。
3.在ld和st相互独立的情况下,确保ld和st的位置可以相互交换。这种情况需要避免两者使用的内存地址相同。
4.对代码进行规划后要保证在任何情况下都可以和原代码处理得到相同的结果。
所有这些转换的关键需求是理解两条指令为什么相关同时要知道如何重排序。

有三个不同的影响限制了解循环带来的效果:(1)每一次展开循环都会减少摊销在循环上的损耗,(2)代码尺寸限制,(3)编译器的限制。我们首先考虑循环摊销。假设解循环了四次,这样会有足够多的平行可以使得指令处理时无延迟。实际上14个时钟里只有两个时钟是循环开销,也就是用来维持index的DADDUI和用来定义循环的BNE.如果解循环了八次,那开销将会从1/2个时钟每条指令变成1/4个时钟每条指令。

第二个限制是解循环带来的代码尺寸上升。对于很大的循环来说,代码尺寸是关键问题特别是在会引起指令cache miss率提升的情况。

另一个比代码尺寸还重要的问题是指令展开和调度会引起寄存器数量不足,这个问题一般称作register pressure. 这个问题产生的原因是指令调度使得需要使用的数值增加了。在大幅度调度之后,将所有的值都放到寄存器里不太可能。转换后的代码虽然理论上更快,但是因为存在寄存器短缺,所以会失去原有的优势。如果不展开代码,大幅度调度会被跳转指令严重限制,因此register pressure不是个问题;而将代码解循环和大幅度调度一起使用会引起这个问题。这个问题在多issue处理器中会很严峻,因为会有更多独立的可同步执行的指令序列。通常情况下,使用复杂的高级转换已经导致了现代编译器的复杂度显著增加。(我们在进行生成详细代码之前很难评估其是否存在潜在的优化)

解循环是一种简单但有用的方法,它可以用于增加可以有效调度的直线代码片段的大小。 这种转换在各种处理器中(无论是目前为止已经研究过的简单流水线还是本章稍后探讨的多issue超标量和VLIW)都非常有用。

航空大数据——项目资源汇总及开源(四) ADS-B项目开源大礼包 阅读详情

相关推荐

MATLABGUI读取文件并将路径显示在文本框中

MATLABGUI读取文件并将路径显示在文本框中

m0_50305149的博客 2646

指令级并行--计算机体系结构

参考书:《计算机体系结构量化研究方法》 作者:John L. Hennessy 一、基本概念 几乎所有处理器都使用流水线来重叠指令的执行过程,以提高性能。由于指令可以并行执行,所以指令之间可能实现的这种重叠称为指令级并行(ILP)。 ILP大体有两种不同开发方法 1) 依靠硬件来帮助动态发现和开发并行 2) 依靠软件技术在编译时静态发现并行 基本块:一段顺序执行代码,除入口外没有其他转入分支,除出口外没有其他转出分支 对于一段指令可能相互依赖,所以在基本块中可以开发的重叠数量可能要少于基本块的平均大小,为了

qq_42824983的博客 5359

【联邦学习】联邦平均(FedAvg)_附pytorch代码实现

其他代码包括1)数据集划分;2)训练;3)保存结果;4)绘图都可在 https://github.com/kt4ngw/fedavg-pytorch 找到。如果您对文章有建议及指定,也欢迎您留言评论,作者定当虚心修正。

kt4ngw的博客 5090

计算机体系结构量化研究方法学习(三)

计算机体系结构量化研究方法——指令集并行及其开发指令级并行指令级并行定义数据相关与冒险数据相关 指令级并行 大约在1985年之后的所有处理器都使用流水线来重叠指令的执行过程。指令之间可能实的并行执行称为指令级并行(ILP)。 ILP大体有两种不同开发方法: 依靠硬件来帮助动态发现和开发并行 依靠软件技术在编译时静态发现并行 一个流水化处理器的CPI值等于基本CPI与因为各种停顿而耗费的全部周期之和: 流水线CPI=理想流水CPI+结构化停顿+数据冒险停顿+控制停顿 指令级并行定义 开发指令间的并行。基

tristan_tian的博客 3875

【ACP】2025-最新-疑难题解析- 练习二汇总

全球加速是优化公网访问的,负载均衡是分发流量的,公网 NAT 网关是处理公网 IP 的,高速通道是建私网连接但不直接提供固定私网地址功能。C 是客户端加密方式,D 是 ECS 云盘加密,都不属于 OSS 服务器端加密。某企业想使用云服务器 ECS + 负载均衡 SLB + 弹性伸缩 (Auto Scaling) 的架构搭建一个企业级门户网站,技术负责人对于负载均衡和弹性伸缩配合使用没有经验,于是将他理解的两种产品配合使用的一些技术细节列成了一个表单,并请作为架构师的您帮他做一下鉴别,以下哪些项是正确的?

jundao1997的专栏 291

SAP ERP 系统订单行项目中的计划行(Scheduled Line)详解

*计划行(Scheduled Line)**是SAP系统中订单行项目(如采购订单、生产订单、销售订单等)的细分单元,用于记录和管理物料的供应或需求计划。每个订单行项目可以包含一个或多个计划行,每个计划行对应具体的交货日期、数量、需求类型(如采购申请、生产订单、库存调拨等)以及相关的物流控制参数。简单来说,计划行是系统对某一物料在特定时间点的供需状态的详细规划,它将订单分解为更细粒度的执行步骤,确保供应链各环节(如采购、生产、仓储)能够按计划协同工作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3377

MIPS指令集:寄存器

   不同的计算机架构中寄存器的种类和数量也不相同。MIPSmips中用到的寄存器按照功能分为有通用寄存器、协处理器0、浮点寄存器、乘法部件寄存器。通用寄存器共32个,是没有特殊限制,一般程序员可以使用的寄存器。协处理器0寄存器也叫控制寄存器,共32个,用来控制并管理CPU。浮点寄存器和乘法部件寄存器都是专用寄存器。浮点寄存器也叫协处理器1寄存器,共32个,用来存储和浮点计算相关的数据。乘法部件...

海棠花的博客 1万+

STM32智能小车控制舵机转向

文章目录前言一、舵机简单介绍及接线方式二、cubeMX配置三、代码解析总结 前言 本文将带大家学习如何驱动舵机转向 一、舵机简单介绍及接线方式 信号线(黄线)红线(电源线)棕色(地线) 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2

m0_49476241的博客 8599

计算机体系结构补充篇----静态超标量流水线及循环展开(一)

本文先简要介绍静态编译器流水线调度(消除数据冒险),再介绍循环展开(Loop Unrolling)技术(消除控制冒险),最后再结合静态超标量流水线技术(增加IPC)和循环展开技术对示例代码进行优化分析。

输出每日所学,供大家学习使用 2023

全覆盖路径规划开源项目Clean-robot-turtlebot3关键函数解析(上)

本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。

慕羽★的博客 2771

【11】科曼医疗——科曼医疗 嵌入式--面试,校招,面试问答记录

科曼医疗嵌入式校招面试记录:3位面试官分别考察应用层技术、底层技术和HR面。技术问题涵盖C++特性(多态、虚函数、指针与引用区别)、内存管理(malloc与new对比)、嵌入式基础(51最小系统、IIC/SPI协议)及项目经验(智能黑板擦专利项目)。同时考察了Linux使用经验、STM32开发及嵌入式操作系统认知。最后环节应聘者询问了开发环境及面试流程。面试内容全面覆盖嵌入式开发核心知识点。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1246

Computer Architectrure: Quantitative Approch 第三章第五、六节

Dynamic Scheduling: Examples and the Algorithm

qq_33146555的博客 746

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 883

Computer Architectrure: Quantitative Approch 第三章第七节

Exploiting ILP Using Multiple Issue and Static Scheduling

qq_33146555的博客 360

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Computer Architectrure: Quantitative Approch 第三章第三节

Reducing Branch Costs With Advanced Branch Prediction 因为分支的延迟会增加控制依赖性,所以分支会降低流水线的性能。解循环是一个减少分支延迟的方法;除此外我们还可以通过预测跳转的操作来减少跳转带来的性能损失。我们测量了依赖于编译时间信息或者依赖于可观测的单个孤立分支动态行为的简单分支预测变量。随着需要处理指令数和每个时钟的issue指令数量随流水线深度增加而增加,精确预测跳转越来越重要。在本节我们测试了用来促进流水线预测精度的技术。本届对Appendix

qq_33146555的博客 479

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Computer Architectrure: Quantitative Approch 第三章第九节

Reture Address Predictors 因为大多数非直接跳转来自于对return语句的访问,所以本段主要讨论如何解决这个问题。如果从多个点调用没有及时汇聚到一个点,会降低预测的精度。(e.g.在多线程处理中,不同线程跳转到不同的位置,这会使预测产生错误。)一种解决方案是设置一个堆栈,在跳转时将返回的PC放入栈中,然后return时返回到这个PC处。(这是一个标准的解决方案)应用:SPEC CPU95, Intel Core, AMD Phenom. ...

qq_33146555的博客 534

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Computer Architectrure: Quantitative Approch 第三章第十三节

Fallacies and Pitfalls 我们的少数谬误集中在预测性能和能源效率以及从时钟频率或 CPI 等单一指标进行推断的难度上。 我们还表明,对于不同的基准测试,不同的架构方法可能具有完全不同的行为。 Fallacy——It is easy to predict the performance and energy efficiency of two different versions of the same instruction set architecture, if we hold th

qq_33146555的博客 243

Computer Architectrure: Quantitative Approch 第二章Memory Hierarchy Design第一节

Introduction 计算机先驱正确地预测了程序员会想要无限量的快速内存。 满足这种需求的一种经济的解决方案是内存层次结构,它利用了内存技术的局部性和成本-性能之间的权衡。 第一章中介绍的局部性原则说,大多数程序不会统一访问所有代码或数据。 局部性发生在时间(时间局部性)和空间(空间局部性)中。 这一原则加上对于给定的实现技术和功率预算,更小的硬件可以更快地制造的指导原则导致基于不同速度的存储器的层次结构和尺寸。 Figure 2.1 显示了几种不同的多级内存层次结构,包括典型的大小和访问速度。随着闪存

qq_33146555的博客 370

Computer Architectrure: Quantitative Approch 第三章第十二节

Putting It All Together: The Intel Core i7 6700 and ARM Cortex-A53

qq_33146555的博客 557

Computer Architectrure: Quantitative Approch 第三章第四节

Overcoming Data Hazards With Dynamic Scheduling

qq_33146555的博客 493

Computer Architectrure: Quantitative Approch 第三章第八节

Exploiting ILP Using Dynamic Scheduling, Multiple Issue, and Speculation

qq_33146555的博客 343

Computer Architectrure: Quantitative Approch 第三章第十一节

Multithreading: Exploiting Thread-Level Parallelism to Improve Uniprocessor Throughput

qq_33146555的博客 280

Computer Architectrure: Quantitative Approch 第二章Memory Hierarchy Design第二节

Memory Technology and Optimizations 使用 SRAM 可以满足最大限度地减少对高速缓存的访问时间的需求。 但是,当发生缓存未命中时,我们需要尽快将数据从主内存中移出,这需要高带宽内存。 这种高内存带宽可以通过将构成主内存的许多 DRAM 芯片组织到多个内存库中并通过使内存总线更宽,或同时进行两者来实现。 为了让内存系统跟上现代处理器的带宽需求,内存创新开始发生在 DRAM 芯片内部。 本节介绍内存芯片内部的技术以及那些创新的内部组织。 在描述技术和选项之前,我们需要介绍一些

qq_33146555的博客 405

Computer Architectrure: Quantitative Approch 第三章第十节

Hardware Versus Software Speculation 本章中的硬件密集型猜测和附录H的软件方法提供了利用ILP的替代方法。一些权衡和限制在此处列出: 要进行广泛的推测,我们必须能够消除内存引用的歧义。对于包含指针的整数程序,在编译时很难实现此功能。 在基于硬件的方案中,使用我们之前在Tomasulo算法中看到的技术来完成内存地址的动态运行时消歧。 这种歧义消除使我们可以在运行时将ld移至存储区之外。对推测性内存引用的支持可以帮助克服编译器的保守性,但是除非仔细使用此类方法,否则恢复机

qq_33146555的博客 217

Computer Architectrure: Quantitative Approch 第三章重点总结

第三节 gshare预测器 竞赛预测器加入全局预测 标签预测器加入一个较短的标签进行多级预测 第四五六节 托马索龙过程—预留站,ROB 第七节 VLIW打包指令的运行方式(x86体系和Intel在使用) 静态和动态的超标量区别在于一个是顺序执行一个是乱序执行 **第八节 ** 一次多个issue的问题是如何消除指令依赖关系,需要多个预留站、相应的重排序缓冲区、在发射时已经检查好指令的依赖性 第九节 跳转标签预测 值预测 推测与托马索龙相结合 第十二节 Intel Core i7 670

qq_33146555的博客 245

Computer Architectrure: Quantitative Approch 第三章第十四节

Concluding Remarks: What’s Ahead? 随着2000年开始,对利用指令级并行性的关注已达到顶峰。 在新世纪的前五年,很明显 ILP 方法可能已经达到顶峰,需要新的方法。 到2005年,英特尔和所有其他主要处理器制造商都对他们的方法进行了改进,以专注于多核。 更高的性能将通过线程级并行而不是指令级并行实现,高效使用处理器的责任将在很大程度上从硬件转移到软件和程序员。 这是自25年前流水线化和指令级并行性问世以来最重大的处理器体系结构变化。 在同一时期,设计人员开始探索使用更多数据级

qq_33146555的博客 194
上一篇: Computer Architectrure: Quantitative Approch 第三章第九节
下一篇: Computer Architectrure: Quantitative Approch 第三章第三节
CoCo_DY
博客等级 码龄11年 6粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值