发新帖我要提问
12
返回列表
打印

stm32流水线(pipeline)问题

[复制链接]
楼主: mybao
手机看帖
扫描二维码
随时随地手机跟帖
21
mybao|  楼主 | 2012-1-13 11:36 | 只看该作者 回帖奖励 |倒序浏览
21楼,我只是想验证下流水线,没别的。

使用特权

评论回复
22
mybao|  楼主 | 2012-1-13 11:40 | 只看该作者
本帖最后由 mybao 于 2012-1-13 11:41 编辑
你怎么知道指令周期没有减少?

如果没有流水线,一条LDR指令需要4~5个周期,现在只需要1~2个周期,这没有减少吗?
香水城 发表于 2012-1-13 11:28


香版,你要这样说,就没经过大脑了。流水线不是能提高独立的一条指令的执行效率,它只有在多条指令一起执行才有作用,看你书本知识也没理解透吧。;P

“一条LDR指令需要4~5个周期”,请你给明出处。M3的LDR需要两个周期,这个是手册的哦,我可不是乱说的。

使用特权

评论回复
23
香水城| | 2012-1-13 11:49 | 只看该作者
香版,你要这样说,就没经过大脑了。流水线不是能提高独立的一条指令的执行效率,它只有在多条指令一起执行才有作用,看你书本知识也没理解透吧。;P

“一条LDR指令需要4~5个周期”,请你给明出处。M3的LDR需要两 ...
mybao 发表于 2012-1-13 11:40


不是说别人敷衍你,就是说别人说话没经过大脑;就你这种态度,非常抱歉,我不会和你这种人再讨论了。

使用特权

评论回复
24
softradio| | 2012-1-13 11:53 | 只看该作者
24# mybao
两个说法都没有问题。MCU里面的流水是前一条指令的执行时,后面的指令在取指译码。mybao说的并行是指执行并行,这个取决于执行单元有的并行度和流水级数。常规的MCU不会这样实现,在DSP里面实现了比较多,譬如TI的C6000就是典型的例子。这样做的坏处是编程的人需要预测执行结果发生的时间,对编译器也会有比较高的要求。所以,MCU里面的流水一般情况下不这么干。

使用特权

评论回复
25
mybao|  楼主 | 2012-1-13 11:53 | 只看该作者
香版,表生气啊

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

你自己说,是不是没经过大脑。

没经过大脑,也没啥嘛,我也是经常不经过大脑的。

使用特权

评论回复
26
ilovezeno| | 2012-1-13 14:56 | 只看该作者
lz,既然你有工夫用keil的模拟器,也有工夫思考,为啥没工夫去arm的官方网站找找权威的解释?
cortex m核的流水LDR STR的指令周期问题,arm的**有专门一章详细解说的,去arm网站一搜就有.你说以什么为准?当然arm的文档第一,硬件结果第二,仿真只是参考罢了. 如果有问题,也是所有的cortex核都有问题,那么应该出现在arm的勘误里,和stm32有啥关系?

另外,lz,cortex m核的LDR 2+N个周期的流水化是有条件的,你的地址必须是字或者半字对齐的,不然你再怎么优化,每条读写指令还是至少3周期.

使用特权

评论回复
27
icecut| | 2012-1-13 15:20 | 只看该作者
lz,你确认m3是这么搞的?
首先
流水线使指令并行执行,但是微指令没有并行
其次
就是说下一条指令使用上一条结果需要延迟等待.
但是:
可是使用一个桥,从流水线的内部数据直接传给下一条指令.
可是:
cpu也可以支持乱序执行
------------------------------------------------------------------------
51单片机一步也没做.
m3的3级指令做到哪一步我也不知道.我没有查资料.以前看到的没有.但是我估计
取,计算,存,如果是这三步,那下一条指令的计算在上一条的存期间执行,完全可以用一个bridge把数据从内部运输过来.
-------------------------------------------------------------------------
软件仿真可能是不准确的.你用程序生成一个循环实测一下才知道.不过这是没意义的.学习不能这么玩
-------------------------------------------------------------------------
不过香主玩馅了.和当年一朝成名一样....被我抓住尾巴了...

使用特权

评论回复
28
mybao|  楼主 | 2012-1-13 15:31 | 只看该作者
29# ilovezeno
"另外,lz,cortex m核的LDR 2+N个周期的流水化是有条件的,你的地址必须是字或者半字对齐的,不然你再怎么优化,每条读写指令还是至少3周期"

LDR当然四字节对齐,不然,结果都错了。

“每条读写指令还是至少3周期”
没这个说法,这个是你自己想的吧,难道你认为,半字对齐,CPU会分多次读取?

使用特权

评论回复
29
mybao|  楼主 | 2012-1-13 15:35 | 只看该作者
本帖最后由 mybao 于 2012-1-13 15:37 编辑

30# icecut
LDR加载的数据,如果下条指令马上用,CPU会插入一个等待周期,这个在哪里都成立,但是,在M3上,如果隔一条指令之后再用LDR的结果,LDR会不会还会插入一个等待周期,这个不确定,我就想要这个答案,你知道的话,直接告诉我。

这个,软仿真,可能不准,硬仿真也很很麻烦,我现在也没硬件。

使用特权

评论回复
30
icecut| | 2012-1-13 15:52 | 只看该作者
LDR加载的数据,如果下条指令马上用,CPU会插入一个等待周期,这个在哪里都成立,
------------------------------------------------------------------------------------------
这个是不对的.你如果不信,就去看深入计算机系统,今年答题送书的一个原题.
高级cpu是直接带流水线间bridge的.就看m3有没有.
------------------------------------------------------------------------------------------
这个设计很细节,我手上没有M3的源码.别人估计也不会让我看
源码级M3授权有的公司有.等他们帮你看看吧.
------------------------------------------------------------------------------------------
作为一个软件,如果涉及到这种真的非常难办.因为我不知道你什么目的,所以无法告诉你怎么绕过去.
就算你用汇编写,编译器还可以帮你做指令重排序.你这么整是没有意义的.
arm的软件仿真器,官方的可能是有了.能够真正的时钟周期匹配的.但肯定不是免费能拿到 的
------------------------------------------------------------------------
如果是你想刺探m3的设计.那要么找个熟人偷偷看看源码.要么旁路pll,用外部时钟计数,发多少个周期执行多少条指令,去计算.
如果搞不定pll,那就只能是进行百万次循环,每个循环千条以上特定设计的指令,去用示波器测量运行时间.来估算周期.........
========================================
你为什么需要知道,不妨说一下

使用特权

评论回复
31
mybao|  楼主 | 2012-1-13 15:57 | 只看该作者
我只是说ARM,不说别的。

需要知道这个计算MCPS,百万周期每秒,软件性能啊

使用特权

评论回复
32
HORSE7812| | 2012-1-13 16:35 | 只看该作者
mark

使用特权

评论回复
33
jxk304| | 2012-1-13 17:21 | 只看该作者
指令的顺序决定了寄存器之间的相关性。但是流水线中还有一个称为bypass的技术,应该综合起来考虑流水线的性能。

使用特权

评论回复
34
ilovezeno| | 2012-1-13 17:40 | 只看该作者
29# ilovezeno
"另外,lz,cortex m核的LDR 2+N个周期的流水化是有条件的,你的地址必须是字或者半字对齐的,不然你再怎么优化,每条读写指令还是至少3周期"

LDR当然四字节对齐,不然,结果都错了。

“每条读写指令还 ...
mybao 发表于 2012-1-13 15:31


如果你把几条LDR拆开,那么每次不都是2+1么?

使用特权

评论回复
35
hsgswxb123| | 2012-1-18 14:19 | 只看该作者
疯狂拿分,争取脱离初级,呵呵!!!

使用特权

评论回复
36
grissiom| | 2012-1-18 22:53 | 只看该作者
我去,拿软件仿真的结果来分析这么硬件的问题,LZ 也太不靠谱了……

使用特权

评论回复
37
mybao|  楼主 | 2012-1-19 14:30 | 只看该作者
换了RVDS4.0来软仿真,优化后,指令周期确实减少了。
说明MDK还是面向单片机开发的,高端应用还是要选RVDS。

使用特权

评论回复
38
zchong| | 2012-1-22 11:37 | 只看该作者
MDK用的也是rvds的编译器啊,有这么神乎吗

使用特权

评论回复
39
ilovezeno| | 2012-1-22 16:29 | 只看该作者
高端有操作系统的都去arm新的DS5了,生肉开发的都是MDK,RVDS似乎没后续了就.....

使用特权

评论回复
40
恩哥| | 2015-12-11 18:23 | 只看该作者
感觉高手好多,毫无疑问LZ绝对是对ARM底层非常了解的,那个神马香主就别提了,不懂就不懂呗有什么不好意思的,本着一颗学习的心才能提高自己的技术水平,希望LZ继续加油!

使用特权

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

本版积分规则