打印

stm32流水线(pipeline)问题

[复制链接]
12014|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mybao|  楼主 | 2012-1-12 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mybao 于 2012-1-12 16:42 编辑

举个例子,四条指令:
ldr r0,[r3]
ldr r1,[r3,#4]
add r0,r0,#1
add r1,r1,#1
add r1,r1,r0
重排序:
ldr r0,[r3]
add r0,r0,#1
ldr r1,[r3,#4]
add r1,r1,#1
add r1,r1,r0

两种情况,运算结果是一样的,但是,消耗的指令周期数,软仿真,结果一样,stm32流水线不给力啊!

版主,是这样么?
沙发
香水城| | 2012-1-12 17:30 | 只看该作者
不明白LZ的逻辑,为什么“结果一样”,就可以得出"STM32流水线不给力"的结论呢?

使用特权

评论回复
板凳
sinadz| | 2012-1-12 18:52 | 只看该作者
我也不明白楼主的逻辑

使用特权

评论回复
地板
gxgclg| | 2012-1-12 19:01 | 只看该作者
没看出流水线不给力

使用特权

评论回复
5
mybao|  楼主 | 2012-1-12 21:22 | 只看该作者
本帖最后由 mybao 于 2012-1-12 21:26 编辑

ldr 需要两个指令周期,
ldr r0,[r3]
add r0,r0,#1
数据加载到r0后,立即用的话,CPU会插入一个等待周期,两条指令要三个周期(add需要一个)。

再看如下指令:
ldr r0,[r3]
add r0,r0,#1
ldr r1,[r3,#4]
add r1,r1,#1
add r1,r1,r0
总共需要七个周期,如果指令重新排序一下,如下:
ldr r0,[r3]
ldr r1,[r3,#4]
add r0,r0,#1
add r1,r1,#1
add r1,r1,r0
对于流水线的ARM只需要五个周期,在ARM9以上的CPU是这样,ARM7应该也是这样,但是cortex m3,指令重排序后,并没有改善,那这个cortex m3的流水线徒有虚名,假的,失望

使用特权

评论回复
6
香水城| | 2012-1-13 08:20 | 只看该作者
LZ的测试结论有什么理论根据吗?在Cortex-M3的参考手册中有说明吗?

使用特权

评论回复
7
mybao|  楼主 | 2012-1-13 09:17 | 只看该作者
本帖最后由 mybao 于 2012-1-13 09:21 编辑

DUI0552A_cortex_m3_dgug.pdf
文档说“The Cortex-M3 processor is built on a high-performance processor core, with a 3-stage pipeline Harvard architecture”

用MDK软仿真看指令执行时间,两种排序,指令执行时间不变。那这个三级流水线体现在哪里?

还是说软仿真结果不准确?

我的MDK版本:MDK-ARM Standard  Version: 4.22a

使用特权

评论回复
8
香水城| | 2012-1-13 10:19 | 只看该作者
相对于非流水线结构,流水线要解决的问题是把指令的取指、译码、执行和结果存储等步骤并行化,由此产生的结果是在总体效应上减少了指令的执行时间;但是你所说的这种指令重新排序后,能够缩短执行时间的效应,并不是流水线结构一定具有的特点,有些设计可以得到这样的结果,但不是所有设计都会有。

具体到Cortex-M3是否具有这样的特征,请查看Cortex-M3的参考手册。关于流水线结构基本原理,可以找计算机系统结构相关的资料来研究,请不要把某种特例当成基本原理。

使用特权

评论回复
9
mybao|  楼主 | 2012-1-13 10:32 | 只看该作者
本帖最后由 mybao 于 2012-1-13 10:36 编辑

ldr r0,[r3]
add r0,r0,#1
ldr r1,[r3,#4]
add r1,r1,#1
add r1,r1,r0
每条ldr两个周期,每条add一个周期,,对于没有流水线的CPU,加起来需要七个周期。
M3可是支持流水线的,也是七个周期,这个有问题。

版主,你也好好考虑下,不要敷衍我哦

我也没把什么特例当成基本原理,这个代码是经过流水线优化的

使用特权

评论回复
10
香水城| | 2012-1-13 10:38 | 只看该作者
不是我敷衍你,我们可以从基本原理开始讨论,你能说说在这个例子中为什么流水线能够减少2个周期?

使用特权

评论回复
11
just21cortex| | 2012-1-13 10:41 | 只看该作者
这个程序是在bootloader中运行吗?

使用特权

评论回复
12
mybao|  楼主 | 2012-1-13 10:48 | 只看该作者
ldr r0,[r3]
add r0,r0,#1
ldr r1,[r3,#4]
add r1,r1,#1
add r1,r1,r0
每条ldr两个周期,每条add一个周期,,对于没有流水线的CPU,加起来需要七个周期。
M3可是支持流水线的,也是七个周期,这个有问题。

版主,你 ...
mybao 发表于 2012-1-13 10:32


不好意思,是下面的能减少两个周期:
ldr r0,[r3]
ldr r1,[r3,#4]
add r0,r0,#1
add r1,r1,#1
add r1,r1,r0

使用特权

评论回复
13
mybao|  楼主 | 2012-1-13 10:49 | 只看该作者
这个就是流水线的意义所在,不用我解释了吧

使用特权

评论回复
14
just21cortex| | 2012-1-13 10:58 | 只看该作者
流水线的工作也要跟所使用的cpu核有关

使用特权

评论回复
15
香水城| | 2012-1-13 11:00 | 只看该作者
这个就是流水线的意义所在,不用我解释了吧
mybao 发表于 2012-1-13 10:49


我在8楼已经给出了我的解释,但你说我敷衍你。

我想和你讨论基本原理,你却不肯给出你的解释,这时谁在敷衍谁呢?

使用特权

评论回复
16
mybao|  楼主 | 2012-1-13 11:08 | 只看该作者
本帖最后由 mybao 于 2012-1-13 11:14 编辑

“相对于非流水线结构,流水线要解决的问题是把指令的取指、译码、执行和结果存储等步骤并行化,由此产生的结果是在总体效应上减少了指令的执行时间;”

这个是书本上的东西,就像GCD一样,好话谁都会说,但我们需要的是实际的好处。

你说M3有流水线,但是跟没有流水线的CPU一样,周期数一个指令一个指令的累加,那这个流水线不是吹出来的吗?

流水线能带来指令周期的减少,但是软仿真结果看不出指令周期减少。

我还要验证下是不是MDK软仿真的问题。

使用特权

评论回复
17
香水城| | 2012-1-13 11:16 | 只看该作者
“相对于非流水线结构,流水线要解决的问题是把指令的取指、译码、执行和结果存储等步骤并行化,由此产生的结果是在总体效应上减少了指令的执行时间;”

这个是书本上的东西,就像GCD一样,好话谁都会说,但我们需 ...
mybao 发表于 2012-1-13 11:08


你连书本知识都不相信,那么我们就没有共同语言了。

使用特权

评论回复
18
mybao|  楼主 | 2012-1-13 11:25 | 只看该作者
本帖最后由 mybao 于 2012-1-13 11:26 编辑

香版,你跟我抬杠,我没说不相信。
我的意思是,好话说了,做到没,需要检验。

“流水线能带来指令周期的减少,但是软仿真结果看不出指令周期减少。”
直接回答我这个问题就好了,这是我的疑问。感谢

使用特权

评论回复
19
香水城| | 2012-1-13 11:28 | 只看该作者
香版,你跟我抬杠,我没说不相信。
我的意思是,好话说了,做到没。

“流水线能带来指令周期的减少,但是软仿真结果看不出指令周期减少。”
直接回答我这个问题就好了,这是我的疑问。感谢 ...
mybao 发表于 2012-1-13 11:25


你怎么知道指令周期没有减少?

如果没有流水线,一条LDR指令需要4~5个周期,现在只需要1~2个周期,这没有减少吗?

使用特权

评论回复
20
dengm| | 2012-1-13 11:34 | 只看该作者
软仿真软件是不能完美仿真的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

759

帖子

3

粉丝