簡體   English   中英

管道補充循環用於指令

[英]Pipeline refill cycles for instructions in arm

以下是帶有3級流水線的arm Cortex M4處理器的說明。我們如何知道這些指令的流水線補充周期數?

     Assembler                   Cycles
 1.  MOV PC, Rm                  1 + P
 2.  ADD PC, PC, Rm              1 + P
 3.  B <label>                   1 + P
 4.  BL <label>                  1 + P

根據數據表P是管道補充所需的循環次數。 其范圍從1到3,具體取決於目標指令的對齊和寬度,以及處理器是否能夠盡早推測地址。

問題的答案就在那里:1至3個周期取決於事物 即使在像Cortex-M4這樣相對簡單的東西上,也有足夠的因素指出一些硬性規則並不一定可能(或有用)。 但是,這並不是說我們不能根據可用的信息做一些推理:

取決於目標指令的對齊和寬度

指令提取是32位寬 ,因此可以相當安全地假設3周期最壞情況涉及半字對齊的32位目標指令,在整個指令被解碼之前需要2次指令提取。 因此,有可能在一個較少的周期內達到一個16位目標指令或一個字對齊的32位指令,由一次取指令覆蓋。

以及處理器是否設法盡早推測地址

鑒於上述情況,似乎合理的是,成功的分支預取與不成功的預取之間的差異占最佳情況和最差情況之間的2個周期中的另一個。 關於分支預測器似乎沒有太多可用信息,但我認為它是流水線解碼階段的簡單靜態預測器,在這種情況下,寄存器分支(包括PC寫入)和條件可能就是這種情況。不預測前向分支,並且預測無條件立即分支和條件后向分支。

現在,這只是受過教育的猜測 - 我不知道ARM微體系結構的秘密,所以可能會有比我想象的更微妙的細節,但它已經足夠復雜了。 我懷疑是否有人願意選擇反匯編代碼,對所有可能的分支/目標組合進行交叉引用,只需在這里和那里考慮2個周期 - 如果你真的需要知道一段代碼執行了多少個周期,那么最好的辦法就是執行它並計算周期

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM