当前位置:首页 » 编程软件 » 编译流水线

编译流水线

发布时间: 2023-01-13 05:20:22

‘壹’ DSP中什么是流水线技术

  1. 原理

    流水线是一种在时间上串行,在空间上并行的技术,其基本原理如图1所示。将整个电路划分为若干个流水线级,流水线每级之间设置寄存器锁存上一级输出的数据;每一级只完成数据处理的一部分;一个时钟周期完成一级数据处理,然后在下一个时钟到来时将处理后的数据传递给下一级;第一组数据进入流水线后,经过一个时钟周期传到第二级,同时第二组数据进入第一级,数据队列依次前进。每组数据都要经过所有的流水级后才能得到最后的计算结果,但是对整个流水线而言,每个时钟都能计算出一组结果,所以平均计算一组数据只需要一个时钟周期的时间,这样就大大提高了数据处理速度,电路在单位时间内处理的数据量就愈大,即电路的吞吐量就越大,保证整个系统以较高的频率工作。

  2. DSP中采用流水线技术的优势

    (1)采用流水线技术普遍比不用流水线工作速度显着提高,体现流水线技术在高速DSP运算上的优势。
    (2)采用流水线技术在资源耗用(逻辑单元与寄存器个数、存储器位数)上有所增加。
    (3)采用不同的流水线级数在速度指标和资源耗用率上有所不同,流水线级数增加,速度指标不一定增加,但资源耗用大大增加,所以应注意速度和资源耗用指标的权衡。如对16位加法器,如不用M4K(专用存储器资源),以采用2级流水线最佳;如选用M4K,则取6级流水最佳。8位乘法器则以2级或6级流水最佳。对于其他DSP运算,在设计时必须通过反复比较、设计,选择符合系统性能要求的流水线级数。

‘贰’ 加拿大pc算法教程

1.三级流水线:其实对于PC = PC +8这个问题很简单,这两个PC其实代表着不同的意义,第一个PC是对于CPU而言,而第二个PC而言是我们通过编译器看到的PC(PC指向程序正在运行的那一条指令),但是对于CPU的PC是永远指向取指那个步,故PC = PC +8。

2.五级流水线; ARM9流水线包括取指(fetch)、译码(decode)、执行(excute)、缓冲/数据(buffer/data)、回写(write-back)寄存器堆。ARM9流水线在译码阶段已经开始读取操作数寄存器,因此译码阶段的PC值和取指阶段的PC值关系为:PC(decode)=PC(fetch)+4。因此执行阶段的PC值和译码阶段的PC值关系为:PC(excute)=PC(decode)+4。

3.对于软中断函数的返回时的PC:如下

ARM Thumb

SWI PC-8 PC-4

xxx 》 PC -4 PC-2 (异常返回将执行这条指令)

yyy PC PC

因此返回指令为: MOV PC , LR

原因:异常是由指令本身引起的,因此内核在计算LR时的PC值并没有被更新。对于ARM状态,因为SWI指令表示将跳到异常处理函数,此时SWI这条指令的PC = PC -8,当进入异常处理函数之前,硬件会自动把PC-4保存到LR寄存器中,所以异常处理函数结束后直接MOV PC, LR就行,就会跳到xxx这一条指令去执行。对于Thumb状态同理。

4.对于IRQ和FIQ中断函数返回时的PC:

ARM Thumb

xxx PC-12 PC-6 (程序在运行这条代码时就产生了中断信号)

yyy 》 PC-8 PC-4 (异常返回将执行这条指令)

zzz PC-4 PC-2

www PC PC

返回指令为: SUBS PC, LR, #4

原因:异常在当前指令执行完成后才会被响应,因此内核在计算LR时的PC值已被更新。对于ARM状态,程序在执行xxx这条指令时,中断信号产生,但是由于中断必须在这一条指令执行完之后才会被响应,执行完后,则此时对于CPU的PC已经指向了www这条指令的取指,在中断函数函数时应该执行yyy这条指令,虽然硬件会把PC-4的值赋值给LR寄存器,但是这是指向zzz这条指令的,所以返回时应该SUBS PC, LR, #4。对于Thumb状态同理。

‘叁’ c语言文件的编译与执行的四个阶段并分别描述

开发C程序有四个步骤:编辑、编译、连接和运行。

任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。

1、预处理:导入源程序并保存(C文件)。

2、编译:将源程序转换为目标文件(Obj文件)。

3、链接:将目标文件生成为可执行文件(EXE文件)。

4、运行:执行,获取运行结果的EXE文件。

(3)编译流水线扩展阅读:

将C语言代码分为程序的几个阶段:

1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。

2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。

3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。

4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。

‘肆’ 超标量流水线是指运算操作并行为什么不对

超标量流水线是指运算操作并行不对,是因为超标量流水线是指令编译并执行。在超标量流水线中,不仅运算操作并行,取指、译码、执行、回写也在并行,超标量流水线指的是以并行操作方式将两条或多条指令编译并执行,不是说将运算操作并行。

‘伍’ cpu的流水线技术是什么说的详细点好吗我很菜的

CPU的流水线
1.主频

主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差。至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展。像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它的运行效率相当于2G的Intel处理器。
所以,CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号震荡的速度。在Intel的处理器产品中,我们也可以看到这样的例子:1 GHz Itanium芯片能够表现得差不多跟2.66 GHz Xeon/Opteron一样快,或是1.5 GHz Itanium 2大约跟4 GHz Xeon/Opteron一样快。CPU的运算速度还要看CPU的流水线的各方面的性能指标。

当然,主频和实际的运算速度是有关的,只能说主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。

3.前端总线(FSB)频率

前端总线(FSB)频率(即总线频率)是直接影响CPU与内存直接数据交换速度。有一条公式可以计算,即数据带宽=(总线频率×数据带宽)/8,数据传输最大带宽取决于所有同时传输的数据的宽度和传输频率。比方,现在的支持64位的至强Nocona,前端总线是800MHz,按照公式,它的数据传输最大带宽是6.4GB/秒。

6.缓存

缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是由于CPU芯片面积和成本的因素来考虑,缓存都很小。

11.超流水线与超标量

在解释超流水线与超标量前,先了解流水线(pipeline)。流水线是Intel首次在486芯片中开始使用的。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。经典奔腾每条整数流水线都分为四级流水,即指令预取、译码、执行、写回结果,浮点流水又分为八级流水。

超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。例如Pentium 4的流水线就长达20级。将流水线设计的步(级)越长,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。但是流水线过长也带来了一定副作用,很可能会出现主频较高的CPU实际运算速度较低的现象,Intel的奔腾4就出现了这种情况,虽然它的主频可以高达1.4G以上,但其运算性能却远远比不上AMD 1.2G的速龙甚至奔腾III。

12.封装形式

CPU封装是采用特定的材料将CPU芯片或CPU模块固化在其中以防损坏的保护措施,一般必须在封装后CPU才能交付用户使用。CPU的封装方式取决于CPU安装形式和器件集成设计,从大的分类来看通常采用Socket插座进行安装的CPU使用PGA(栅格阵列)方式封装,而采用Slot x槽安装的CPU则全部采用SEC(单边接插盒)的形式封装。现在还有PLGA(Plastic Land Grid Array)、OLGA(Organic Land Grid Array)等封装技术。由于市场竞争日益激烈,目前CPU封装技术的发展方向以节约成本为主。

好了,上面贴的一些都是和CPU的运行效率直接相关的参数,剩下的参数,有的太简单,有的我们不常接触到.没有贴,
好,看一下流水线的来由,大家都知道,两个CPU会比一个CPU快,但是为什么呢,也不会出现,一个CPU,运行WORD,一个CPU,运行CS呀, 那是因为,把指令细分成线程后,他们可以分别运行,cyrix的MII,当时不是有个技术么,乱序运行!!就是提高运行效率的一个手段,流水线,也是这种目的,P4,的时候,就20级流水线了,就是说,CPU运行一次的时候,等于,20个CPU(没有流水线),同时运行一样,这本来是什么呢,运行速度一下子,提高了20倍

但是,事实上并不是这样,为什么呢,这20个东东运行完了,得把他们再拼一起呀,还有一件事,如果拼错了,(下面的工人装不上,就认为是原料有问题)他就认为,这次的运行结果是错的,说,"重来"吧. 那么,有一个CPU,只有10级流水线,但是由于他们的管理很好,每次运行都不返工,所以,他们的生产效率反而更高!!!

AMD,和INTEL,现在正是这种情况,一个抓管理,管理上去了,下面的工人出错的才少,(返工次数少)
一个抓技术,工人熟练了,生产的东西,质量才高!!(每次出来的东西多)
当然,又抓管理,又抓技术,两手都要抓,两手都要硬,这是中国人的想法,都抓的人,显然什么都没抓好,都破产了,现在只有这两家还存活着,......现在我想给流水线一个公正一点的说法, 如果你的CPU组装的水平很差,那当然,流水线越多,你越乱,就像,你的水平不行, 管理了,10000多个程序员高手, 项目乱的一团糟, 但是,如果你是一个管理经验丰富的人, 下面的人一下也不会做活, 那么,项目也是一个失败, 幸好,事实上,并不是这样绝对,管理员也是差不多的水平, 程序员也是差不多的水平, 那么你建一个项目, 你选好的程序员,还是好的管理员!!!

我说,不一定,我得看是什么项目, 如果项目是一般的项目, 一般的管理员就可以了,那么,我当然选好的程序员, 项目完成的又快又好, 一个程序,本身就可以乱序运行, 那么,INTEL的CPU当然就是最好了, 反正,大家都不会返工!!!!! 但是一个项目是很复杂的, 而代码量并不多, 那么,当然是选好的管理员, 如果一个程序,就是针对测试而测试的, 导致,CPU运算不断的返工, 那当然就是AMD的CPU好, 比如,大浮点数的运行,AMD,比INTEL的高50%现在看不到这种比较了, 但是,你可以查一查,以前的资料, 有PIII1G,与AMD速龙1G的比较, 这个差异到现在也没有改变, 这就是为什么AMD的CPU,显卡得分,会比INTEL的高, 3Dmark2001的得分,一般都比INTEL的高, 而,business stone,INTEL 一般都比AMD要高, SYSMARK,也是,INTEL 比AMD要高, 因为这些程序不复杂,(线程复杂,和我们想的程序本身复杂是两回事)

买CPU也是一样, AMD,和INTEL谁好,????? 我也不知道,我喜欢AMD,但我目前确实使用的是INTEL, 家里的两台机子全是INTEL. 没有AMD,INTEL不会这么便宜, 没有AMD,中国的D版软件..... 中国的组装机.............但是,我要为流水线正一正名, 并不是流水线长了,运行效率就低了, 流水线长了,运行效率绝对是高了, 但是,运行出错的代价是大了,流水线,这本身是一个提高效率的技术, 怎么现在的人,都当成是,因为提高频率,所必须采用的手段呢????? 当时没有流水线的时候, 流水线一出来的时候, 大家都认为这是提高效率的秘密武器呀!!!

越是实际的程序,越容易发生流水线返工,因此P4效能越差。
倒是纯粹的理论测试,比如sandra,pcmark还有3dmark之类P4表现不错(老实说P4在3dmark里面的表现相对于在bussiness winstone里面算好的了),而到了实际测试,特别是bussiness winstone(直接调用office源代码)或者sciencemark(直接编译的标准量子化学代码)里面,p4的表现那叫一个菜。。。。连P4c都不是同PR的AthlonXP的对手。
至于sysmark里面Intel的分高,那是一个着名的bug,因为sysmark认为AthlonXP不支持SSE,结果是AthlonXP用x87浮点对抗专门为SSE优化的多媒体代码,自然性能不成(即使这样Intel也没有多少优势)
在bussiness winstone 2002的测试结果,看看就会发现,P4 3.2c的性能刚刚可以匹敌公认为虚标最严重的AthlonXp 3200+。 当然,多媒体性能上P4 3.2c还是毫无疑问的战胜AXP 3200+,毕竟,AXP不支持SSE2。

即使没有流水线返工,长流水线的性能也就和短流水线相同,因为每条流水线每周期就只能执行一条指令(p4有个怪异的设计就是如果跑配对的两个简单微指令,那么两个可以并成一个执行,所以如果你反复执行完全相同的指令比如a=a+1一百亿次,那么P4比AthlonXP要快一倍),所以长流水在任何角度也不可能提升效率。
长流水的唯一好处就是,电路比较简单,设计起来比较容易.解释的详细一点就是,并不是说20级流水线每次执行的动作比10级流水线多一倍,相反,他们能执行的实际功能是一样的,只是每级执行的操作简单了一些。
比如,一个工厂造螺丝,可以分成两级流水,一个人造螺丝,一个人车螺纹。也可以分成100个步骤,第一个人负责拿铁块,第二个人负责递,第三个人负责往上画线。。。。第99个人车单数螺纹,第100个人负责擦掉粉尘。
如果每个步骤耗费的时间都一样,那么两种做法速度完全一样,唯一的区别是,前面的办法工人素质必须很高,因为他每个人干了对方50个人的活
看看吧,多少能了解点
http://rediceberg.bokee.com/viewdiary.11290690.html

‘陆’ 编译程序中使用的关键技术都有哪些应用方向

在RISC处理机中采用流水线工作方式,取指令和执行指令并行工作,那么当遇到条件转移指令时,流水线可能断流。为了尽量保证流水线的执行效率,在转移指令之后插入一条有效的指令

‘柒’ ARM Cortex A9的流水线介绍

● 先进的取指及分支预测处理——避免因访问指令的延时而影响跳转指令的执行。
● 最多支持四条指令Cache Line预取挂起 (prefetch-pending)——进一步减少了内存延时的影响,从而促进
指令的顺利传输。
● 每个周期内可连续将两至四条指令发送到指令解码——确保充分利用超标量流水线性能。
● Fast-loop模式——执行小循环时提供低功耗运行。
●超标量解码器——每个周期可完成两条完全指令的解码。
● 支持指令预测执行——通过将物理寄存器动态地重新命名至虚拟寄存器池来实现。
● 提升了流水线的利用效率——消除了相邻指令之间的数据依赖性,减少了中断延时。
● 支持寄存器的虚拟重命名——以一种有效的、基于硬件的循环展开方法,提高了代码执行效率,而不会增
加代码大小和功耗水平。
● 四个后续流水线(subsequent pipeline)中的任何一个均可从发射队列中选择执行指令—提供了无序分配,进一步提高了流水线利用效率,无需借助于开发者或编译器指令调度。确保专为上一代处理器进行优化的代码
能够发挥最大性能,也维护了现有软件投资。
● 每周期支持两个算术流水线 (fullal arithmetic pipeline) 、加载-存储(load-store) 或计算引擎以及分支跳转的并行执行。
● 可将有相关性load-store指令提前传送至内存系统进行快速处理,进一步减少了流水线暂停,大幅提高了
涉及存取复杂数据结构或C++函数的高级代码的执行效率。
● 支持四个数据Cache Line的填充请求——而且还能通过自动或用户控制预取操作,保证了关键数据的可用
性,从而进一步减少了内存延时导致的暂停现象。
● 支持无序指令完成回写 (write back)——允许释放流水线资源,无需受限于系统提供所需数据的顺序。

‘捌’ 为何我写的混合汇编与c语言的程序编译后出现流水线失败呢

流水线冲突
,如果全C写没有问题,汇编就需要考虑一些问题,TI文档上都有说明

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:649
制作脚本网站 发布:2025-10-20 08:17:34 浏览:940
python中的init方法 发布:2025-10-20 08:17:33 浏览:635
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:824
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:734
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1070
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:302
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:164
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:855
python股票数据获取 发布:2025-10-20 07:39:44 浏览:766