CPU 流水線
什么是流水線?
類似于工廠流水線。
為什么要弄出這個(gè)東西?
流水線是為了提高效率,能并發(fā)同時(shí)進(jìn)行多個(gè)任務(wù)。
CPU的一個(gè)任務(wù),或者說指令,被分為很多個(gè)步驟完成,就跟生產(chǎn)線上裝配汽車,分成若干個(gè)零件工序依次安裝。
幾種CPU流水線
Intel:流水線較少,但是每條流水線的長度很長。可以想象成,Intel有較少的生產(chǎn)線,而每個(gè)生產(chǎn)線上把裝配一輛汽車分成了較多的步驟,所以生產(chǎn)線很長。這樣的優(yōu)點(diǎn)是,生產(chǎn)線上的每個(gè)步驟需要完成的任務(wù)相對較少,這樣,工作的節(jié)奏很容易加快,也就是號子喊的可以快一些,所以Intel的P4主頻提高非常迅速。
這種架構(gòu)的缺點(diǎn)是,因?yàn)榱魉€太長,如果中間有一步發(fā)生錯(cuò)誤,只有到最后一個(gè)工序才能發(fā)現(xiàn)。雖然這種錯(cuò)誤幾率很小很小,但是不可避免,而且會(huì)被非常高的主頻放大無數(shù)倍,帶來的影響就是工作效率并沒有隨著節(jié)奏的加快而明顯提升,也就是Intel“高頻低能”的原因之一。Intel的Pentium M系列就沒有采用這種架構(gòu)模式,而是采用類似AMD的短管線多管線模式。
AMD:擁有較多的流水線,就是說,生產(chǎn)線較多,但是每條生產(chǎn)線的長度較短。帶來的影響是,在短生產(chǎn)線上裝備一輛汽車的話,每個(gè)工序需要干的活比較多,所以大家工作的節(jié)奏就不能太快。所以AMD的主頻提高非常困難??墒茿MD較多的流水線同樣保證了指令執(zhí)行數(shù)量,也就是裝配汽車的數(shù)量,效率較高。短的流水線受工序錯(cuò)誤的影響也很低,因?yàn)榱魉€短,發(fā)現(xiàn)錯(cuò)誤會(huì)更及時(shí)。主頻低,錯(cuò)誤率被放大的也小。
CPU的主頻
CPU的主頻相當(dāng)于流水線工作的統(tǒng)一干活節(jié)奏。你可以想象成主頻就是干活時(shí)候喊的號子,大家都跟著號子一步一步的干活。
描述主頻的單位:
MIPS(Million Instruction Per Second)表示CPU每秒執(zhí)行多少百萬條指令。比如0.9MIPS,表示每秒九十萬條指令。
MIPS/MHz表示CPU在每MHz的運(yùn)行速度下可以執(zhí)行多少個(gè)MIPS,如0.9MIPS/MHz則表示如果CPU運(yùn)行在1MHz的頻率下,每秒可執(zhí)行90萬條指令。如果CPU在20MHz的頻率下,每秒可運(yùn)行1800萬條指令。MIPS/MHz可以很好的反映CPU的速度。
ARM CPU 三級流水線(基于ARMV7)
3級流水線如上圖所示(PC為程序計(jì)數(shù)器),流水線使用3個(gè)階段,因此指令分3個(gè)階段執(zhí)行。
⑴ 取指-從存儲(chǔ)器裝載一條指令
⑵ 譯碼-識別將要被執(zhí)行的指令
⑶ 執(zhí)行-處理指令并將結(jié)果寫回寄存器或者存儲(chǔ)器
以前學(xué)過的51單片機(jī),因?yàn)楸容^簡單,所以它的處理器只能完成一條指令的讀取和執(zhí)行后,才會(huì)執(zhí)行下一條指令。這樣,PC始終指向的正在“執(zhí)行”的指令。
而對于ARMV7來說因?yàn)槭?級流水線,所以把指令的處理分為了上面所述的3個(gè)階段。
所以處理時(shí)實(shí)際是這樣的:ARM正在執(zhí)行第1條指令的同時(shí)對第2條指令進(jìn)行譯碼,并將第3條指令從存儲(chǔ)器中取出。
所以,ARMV7流水線只有在取第4條指令時(shí),第1條指令才算完成執(zhí)行。
下圖生動(dòng)形象的說明了3級流水線的處理機(jī)制。
下面一句話很關(guān)鍵: 無論處理器處于何種狀態(tài),程序計(jì)數(shù)器R15(PC)總是指向“正在取指”的指令,而不是指向“正在執(zhí)行”的指令或者“正在譯碼”的指令 。
人們一般會(huì)習(xí)慣性的將正在執(zhí)行的指令作為參考點(diǎn),即當(dāng)前第1條指令。
所以,PC總是指向第3條指令,或者說PC總是指向當(dāng)前正在執(zhí)行的指令地址再加2條指令的地址。
處理器處于ARM狀態(tài)時(shí),每條指令為4個(gè)字節(jié),所以PC值為正在執(zhí)行的指令地址加8字節(jié),即是:
PC值 = 當(dāng)前程序執(zhí)行位置 + 8字節(jié)
處理器處于Thumb狀態(tài)時(shí),每條指令為2字節(jié),所以PC值為正在執(zhí)行的指令地址加4字節(jié),即是:
PC值 = 當(dāng)前程序執(zhí)行位置 + 4字節(jié)
下面一個(gè)例子就很好的說明了這個(gè)問題。
- 0x4000 ADD PC,PC,#4 ;正在被執(zhí)行的指令,將地址值PC+4寫入PC
- 0x4004 ...;正在被譯碼的指令
- 0x4008 ...;正在被取指的指令,PC=0x4008
- 0x400C ...;PC+4=0x400C
另外補(bǔ)充說明就是根據(jù)以上描述,流水線只有被指令填滿時(shí)才能發(fā)揮最大效能,即每時(shí)鐘周期完成一條指令的執(zhí)行(僅單周期指令)。
如果程序發(fā)生跳轉(zhuǎn),流水線會(huì)被清空,這將需要幾個(gè)時(shí)鐘才能使流水線被再次填滿。因此,盡量地少使用跳轉(zhuǎn)指令可以提高程序的執(zhí)行效率。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7430瀏覽量
163514 -
流水線
+關(guān)注
關(guān)注
0文章
118瀏覽量
25578 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2253瀏覽量
94278 -
ARM處理器
+關(guān)注
關(guān)注
6文章
360瀏覽量
41632 -
MIPS芯片
+關(guān)注
關(guān)注
0文章
6瀏覽量
1818
發(fā)布評論請先 登錄
相關(guān)推薦
評論