寄存器15中的程序计数器如何显示流水线?

时间:2019-02-08 01:04:11

标签: arm microprocessors

我有一个问题要指出:

“ ARM将程序计数器放在寄存器r15中,对程序员来说是可见的。有人写过ARM文章说这暴露了ARM的管道。他的意思是什么,为什么?”

我们还没有在课堂上谈论管道,所以我不知道那是什么,而且我很难理解在线内容。有人可以帮助我回答问题或帮助我理解,以便我形成自己的答案吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上,他们可能在说的是程序计数器是正在执行的指令之前的两个指令。但这并不意味着它有两个或三个深的管道。在这一点上它什么都不暴露,就像MIPS中的分支阴影什么都不暴露一样。有教科书MIPS,有现实。

关于流水线的神奇之处在于它是流水线的计算机版本。您可以就地建造汽车,并将发动机的门,车轮等带到汽车上。或者,您也可以将汽车移动通过装配线,并有一个门站,一个轮子站等等。您一次要建造许多汽车,而从建筑物中出来的汽车的数量是每隔几分钟,但这并不意味着新汽车需要花费几分钟的时间来制造。这只是意味着最慢的步骤需要几分钟,从前到后大约需要相同的时间。

一条指令有几个明显的步骤,一个加法要求您获取该指令,对其进行解码,收集操作数并将它们馈送到加法器(alu)并取结果并存储结果。其他说明具有相似的步骤和编号。

您的教科书将使用诸如获取,解码和执行之类的术语。因此,如果您要获取0x1000处的指令,然后获取0x1004处的一条,然后获取0x1008处的一条,希望代码在没有分支的情况下线性运行,则当获取0x1004时将对0x1000进行解码,当获取0x1008时将获取0x1004被解码,0x1000可能取决于执行情况。因此,当执行0x1000时,人们可能会想到,程序计数器正在获取0x1008,这样就可以告诉我管道的工作方式。好吧,不是我可以有10000条深的流水线,并且没有指令可以看到的程序计数器是我喜欢的相对于该指令地址的任何地址,对于0x1000处的指令,我可以让它为0x1000,并有12345条深流水线。它仅是一个定义,它可能在历史的某个时候由于真实的设计和真实的管道而放置到位,或者可能总是以这种方式定义。

重要的是,如果指令集说pc是指令加上一定的偏移量,则指令集会声明并支持该定义,那么它必须始终是该PC,或者需要记录异常并匹配那些定义。做完了程序员然后可以给程序员编写编译器,等等。

关于管道的教科书问题(不是说它不是真的)是说我们用完了v8引擎,我们在装配线上有12辆卡车,我们在那条线上制造卡车一段时间,然后我们用v6。发动机组装完成后,它们将由慢船驶入,但是我们现在已经准备好汽车零件,因此让我们将卡车下线并重新开始生产,因为在装配线中进行了N个步骤,所以没有另一头汽车出来在建筑物中,一旦第一辆汽车驶入终点,然后每隔几分钟就要换一辆新汽车。我们不得不冲洗装配线。当您运行指令0x1000、0x1004、0x1008等时。如果您可以使管道更高效地运行,但是0x1004是0x1100的分支,则管道中可能会有0x1008的指令和0x100c的指令,因此我们必须刷新管道从0x1100开始提取,在再次完成指令之前需要花费一定数量的时钟周期,然后理想情况下,我们随后每个时钟完成一个时钟,直到另一个分支。因此,如果您阅读有关使用mips或教育前辈的主题的经典教科书,则它们具有分支影子或其他类似术语的概念,分支之后的指令将始终执行。因此,与其从管道中清除N条指令,不如从N-1条指令中清除,您将获得一个额外的时钟,以获取分支进入管道后的下一条指令。这就是默认情况下mips的工作方式,但是当您购买真正的内核时,可以将其关闭,并使其在分支之后不执行指令。它是一本很好的教科书插图,可能是真实的,对于让我们在计算机工程中建立mips类来说可能是真实的。但是,今天使用的管道不必等待很长时间就能看到管道将为空,并且可以提早开始获取,有时获得的时钟多于一个时钟,而不是冲洗整个管道。如果确实做到了,那么它目前不会给MIPS提供比其他设计更多的优势,也不会给我们提供使用它们的渠道的机会。

答案 1 :(得分:1)

exposed pipeline意味着程序员需要考虑管道,而我不同意r15值偏移量不是编码常数。

是的,通过使PC对程序员可见,是的,早期实现细节的某些片段已“暴露”为体系结构上的异常,需要在以后的实现中维护。

如果已设计到体系结构中的偏移量为零,这将不值得一提-对于简单的3级管道,不可能进行优化,而且每个人都不明智。

没有从管道中“导出”任何东西,不是以跟踪或调试的方式窥探代码运行时的时序行为-此功能只是处理器硬件给程序员带来的幻觉的一部分(类似于按程序顺序执行的每条指令。

诸如此类的新颖技巧的一个问题是,人们喜欢写关于它们的问题,而这些问题很容易用措辞不好。他们还忽略了一个事实,即使管道是3级的,也只需要一个“特殊情况”就要求门进行偏移量计算(即使这些门在典型操作中不消耗功率)。

拥有PC相对说明非常普遍。常见的做法是采用实现优化的编码来计算不愉快的事情-例如IBM 650

Retrocomputing.SE是一个有趣的地方,可了解与现代计算机的发展有关的某些事物。