计算机组成 超标量,计算机组成原理6-流水线、多发射和超标量、SIMD(示例代码)...
1、完整功能的CPU有3個周期概念:指令周期、機(jī)器周期、時鐘周期
2、一條CPU指令的執(zhí)行步驟:取得指令-指令譯碼-執(zhí)行指令,這個過程至少花費(fèi)一個時鐘周期。
單指令周期處理器:一個周期內(nèi),只執(zhí)行一條指令。這樣就需要保證時鐘周期等于執(zhí)行時間最長的指令時間。這樣時鐘頻率就不能太高,否則指令可能還沒有執(zhí)行完成就開始執(zhí)行下一條指令,而之前的指令計算結(jié)果還沒有存到寄存器中。
這樣的CPU實際效率并不高
3、流水線
CPU 的指令執(zhí)行過程,其實也是由各個電路模塊組成的。在取指令的時候,需要一個譯碼器把數(shù)據(jù)從內(nèi)存里面取出來,寫入到寄存器中;在指令譯碼的時候,需要另外一個譯碼器,把指令解析成對應(yīng)的控制信號、內(nèi)存地址和數(shù)據(jù);到了指令執(zhí)行的時候,需要的則是一個完成計算工作的 ALU。把時鐘周期設(shè)置成整條指令執(zhí)行的時間,而是拆分成完成這樣的一個一個小步驟需要的時間。同時,每一個階段的電路在完成對應(yīng)的任務(wù)之后,也不需要等待整個指令執(zhí)行完成,而是可以直接執(zhí)行下一條指令的對應(yīng)階段。
不需要確保最復(fù)雜的那條指令在時鐘周期里面執(zhí)行完成,而只要保障一個最復(fù)雜的流水線級的操作,在一個時鐘周期內(nèi)完成就好了。
4、 超長流水線
流水線并沒有縮短單條指令的響應(yīng)時間,但是可以增加運(yùn)行很多條指令時候的吞吐率。
流水線深度的增加,需要的電路數(shù)量變多了,也就是使用的晶體管也就變多了。過深的流水線,不僅不能提升計算機(jī)指令的吞吐率,更會加大計算的功耗和散熱問題。而流水線帶來的吞吐率提升,只是一個理想情況下的理論值。在實踐的應(yīng)用過程中,還需要解決指令之間的依賴問題。這個使得流水線,特別是超長的流水線的執(zhí)行效率變得很低。要想解決好冒險的依賴關(guān)系問題,需要引入亂序執(zhí)行、分支預(yù)測等技術(shù)。
5、關(guān)于多發(fā)射和超標(biāo)量
通過增加硬件的方式,將取指令和指令譯碼實現(xiàn)并行,一次性取出多條指令,然后分發(fā)給多個并行的指令譯碼器,進(jìn)行譯碼,然后對應(yīng)交給不同的功能單元去處理。這樣,在一個時鐘周期里,能夠完成的指令就不只一條了。這種 CPU 設(shè)計,叫作多發(fā)射(Mulitple Issue)和超標(biāo)量(Superscalar)。
?多發(fā)射是指將多條指令同時發(fā)射到不同的譯碼器或者后續(xù)處理流水線中。
?超標(biāo)量的CPU里面有很多并行的流水線,而不是單一一條。
6、單指令多數(shù)據(jù)流
?SIMD 在獲取數(shù)據(jù)和執(zhí)行指令的時候,都做到了并行。一方面,在從內(nèi)存里面讀取數(shù)據(jù)的時候,SIMD 是一次性讀取多個數(shù)據(jù)。對于那些在計算層面存在大量“數(shù)據(jù)并行”(Data Parallelism)的計算中,使用 SIMD 是一個很劃算的辦法。在這個大量的“數(shù)據(jù)并行”,其實通常就是實踐當(dāng)中的向量運(yùn)算或者矩陣運(yùn)算。在實際的程序開發(fā)過程中,過去通常是在進(jìn)行圖片、視頻、音頻的處理。最近幾年則通常是在進(jìn)行各種機(jī)器學(xué)習(xí)算法的計算。
?
7、計算機(jī)是如何處理異常的
關(guān)于異常,最有意思的一點(diǎn)就是,它其實是一個硬件和軟件組合到一起的處理過程。異常的前半生,也就是異常的發(fā)生和捕捉,是在硬件層面完成的。但是異常的后半生,也就是說,異常的處理,其實是由軟件來完成的。
計算機(jī)會為每一種可能會發(fā)生的異常,分配一個異常代碼(Exception Number)。有些教科書會把異常代碼叫作中斷向量(Interrupt Vector)。異常發(fā)生的時候,通常是 CPU 檢測到了一個特殊的信號。比如,按下鍵盤上的按鍵,輸入設(shè)備就會給 CPU 發(fā)一個信號。或者,正在執(zhí)行的指令發(fā)生了加法溢出,同樣,可以有一個進(jìn)位溢出的信號。這些信號呢,在組成原理里面,一般叫作發(fā)生了一個事件(Event)。CPU 在檢測到事件的時候,其實也就拿到了對應(yīng)的異常代碼。
這些異常代碼里,I/O 發(fā)出的信號的異常代碼,是由操作系統(tǒng)來分配的,也就是由軟件來設(shè)定的。而像加法溢出這樣的異常代碼,則是由 CPU 預(yù)先分配好的,也就是由硬件來分配的。這又是另一個軟件和硬件共同組合來處理異常的過程。
拿到異常代碼之后,CPU 就會觸發(fā)異常處理的流程。計算機(jī)在內(nèi)存里,會保留一個異常表(Exception Table)。也有地方,把這個表叫作中斷向量表(Interrupt Vector Table),好和上面的中斷向量對應(yīng)起來。
CPU 在拿到了異常碼之后,會先把當(dāng)前的程序執(zhí)行的現(xiàn)場,保存到程序棧里面,然后根據(jù)異常碼查詢,找到對應(yīng)的異常處理程序,最后把后續(xù)指令執(zhí)行的指揮權(quán),交給這個異常處理程序。
8、異常分類:中斷、陷阱、故障和中止
第一種異常叫中斷(Interrupt)。顧名思義,自然就是程序在執(zhí)行到一半的時候,被打斷了。這個打斷執(zhí)行的信號,來自于 CPU 外部的 I/O 設(shè)備。在鍵盤上按下一個按鍵,就會對應(yīng)觸發(fā)一個相應(yīng)的信號到達(dá) CPU 里面。CPU 里面某個開關(guān)的值發(fā)生了變化,也就觸發(fā)了一個中斷類型的異常。
第二種異常叫陷阱(Trap)。陷阱,其實是程序員“故意“主動觸發(fā)的異常。就好像你在程序里面打了一個斷點(diǎn),這個斷點(diǎn)就是設(shè)下的一個"陷阱"。當(dāng)程序的指令執(zhí)行到這個位置的時候,就掉到了這個陷阱當(dāng)中。然后,對應(yīng)的異常處理程序就會來處理這個"陷阱"當(dāng)中的獵物。
第三種異常叫故障(Fault)。它和陷阱的區(qū)別在于,陷阱是開發(fā)程序的時候刻意觸發(fā)的異常,而故障通常不是。比如,在程序執(zhí)行的過程中,進(jìn)行加法計算發(fā)生了溢出,其實就是故障類型的異常。這個異常不是我們在開發(fā)的時候計劃內(nèi)的,也一樣需要有對應(yīng)的異常處理程序去處理。
故障和陷阱、中斷的一個重要區(qū)別是,故障在異常程序處理完成之后,仍然回來處理當(dāng)前的指令,而不是去執(zhí)行程序中的下一條指令。因為當(dāng)前的指令因為故障的原因并沒有成功執(zhí)行完成。
最后一種異常叫中止(Abort)。與其說這是一種異常類型,不如說這是故障的一種特殊情況。當(dāng) CPU 遇到了故障,但是恢復(fù)不過來的時候,程序就不得不中止了。
?
總結(jié)
以上是生活随笔為你收集整理的计算机组成 超标量,计算机组成原理6-流水线、多发射和超标量、SIMD(示例代码)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子商务笔记
- 下一篇: 电子地图市场现状研究分析报告 -