国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于MIPS的流水線技術(shù)數(shù)據(jù)冒險轉(zhuǎn)發(fā)策略研究

2013-12-29 00:00:00解晨
電腦知識與技術(shù) 2013年13期

摘要:流水線技術(shù)是計算機加快處理指令的經(jīng)典策略之一,迄今為止,幾乎所有的計算機都采用了流水線技術(shù)來加速其中央處理器(CPU)的處理速度。然而,做到處理器的加速絕非輕而易舉,流水線技術(shù)雖然巧妙地大幅提高了處理器的速度,但是這其中也包含著許多影響計算大局的關(guān)鍵問題,數(shù)據(jù)冒險就是其中一類。該文探究了數(shù)據(jù)冒險中數(shù)據(jù)被提前使用所帶來的問題,并分析了專門針對此問題所用到的數(shù)據(jù)轉(zhuǎn)發(fā)策略。

關(guān)鍵詞:流水線技術(shù);MIPS;數(shù)據(jù)冒險;轉(zhuǎn)發(fā)策略

中圖分類號: TP311 文獻標識碼: A 文章編號:1009-3044(2013)13-2946-05

流水線技術(shù)可以說是計算機制造藝術(shù)中的降龍十八掌,威力巨大而不失優(yōu)雅的思想,就目前的計算機發(fā)展條件來說,其是提高處理器處理速度的關(guān)鍵。

簡單來說,流水線技術(shù)是一種可以將多條指令的執(zhí)行過程相互重疊的實現(xiàn)技巧。

讓我們來從現(xiàn)實生活中舉個例子,例如一位一級大廚在廚房做菜,一般來說,假設(shè)他可以將做菜分為以下四個步驟:

1) 在擺滿了原材料的臺子前挑選做菜的材料;

2) 在水池中清洗挑選出來的材料;

3) 一級廚師使用他眼花繚亂的技術(shù)進行炒菜;

4) 廚師炒完菜后將菜不緊不慢地送達客戶的桌上。

對于一位廚師以及少量的客人來說,上述步驟似乎沒有設(shè)么問題,我們的一級廚師只要專心地炒他的菜即可,僅有的幾個客人也只需耐心地小等一會便可吃上美味佳肴。

然而,當(dāng)客人變得多起來,情況就比較糟糕了,比如有1000個客人,廚師一個接一個地為客人炒菜就顯得耗時太多了,總有看上去多的可怕的客人在抱怨等待時間太長,于是,這位可憐的廚師只好一邊聽著客人不耐煩的抱怨一邊手忙腳亂的炒菜。

同樣,不只是廚師會碰到這種棘手的事,每秒處理幾億計算的計算機也是任務(wù)艱巨,倘若只有少得可憐的CPU的計算機只是呆板的一個接一個地處理繁雜的計算任務(wù),那計算機的響應(yīng)時間就會被大幅拖長,其交互性就會大打折扣,客戶很可能會因此對計算機失去信心。

不過幸運的是,流水線技術(shù)的出現(xiàn)很好地提高了CPU的處理速度。但是好事多磨,流水線技術(shù)在發(fā)展的過程中本身也包含著眾多問題。

下面,就讓我們結(jié)合MIPS匯編語言來分析一下流水線技術(shù)中的一種數(shù)據(jù)冒險問題,并分析一下專門應(yīng)對此問題的數(shù)據(jù)轉(zhuǎn)發(fā)策略。

1 流水線技術(shù)簡介及數(shù)據(jù)冒險問題探究

1.1 流水線技術(shù)簡介

正如概述中所述的,流水線技術(shù)是一種可以將多條指令的執(zhí)行過程相互重疊的實現(xiàn)技巧。

可以就我們前面所舉的一級廚師的例子來說明這個技巧的原理。

在概述中,廚師的做菜過程有四個步驟,簡化來說即挑選材料、清洗材料、炒菜和上菜。若只有一個專門的廚師,則該廚師只能按部就班地一步一步來。

假設(shè)突然之間,廚師所在的餐館富裕了,于是餐館給廚師請了三個助手,一個是專門選原材料的材料師,一個是專門洗菜的,最后一個則是一個帥氣的服務(wù)員,專門負責(zé)上菜,于是,廚師就可以一直待在灶臺前專心地揮動鍋鏟進行炒菜這一單獨事件。

按如上所述的情況,餐館將會大有改觀。假設(shè)以上的四個人很勤奮,一刻不停地堅守崗位,挑菜的一刻不停地在選材料,洗菜的一刻不停地清洗前面?zhèn)鞯绞种械牟?,我們的一級大廚則不停地炒送過來的菜,最后服務(wù)員矜矜業(yè)業(yè)地不斷為客人送上從廚房傳來的菜。

現(xiàn)在的情況比起只有一個人不停地重復(fù)全部事情要好不少,假設(shè)以上四個步驟所花的時間是相同的,每個步驟花費一個單位時間,則在一個人的情況下,要每過四個單位時間才能搞定一個菜,但是在四個人各司其職的情況下,除了前三個單位時間沒有菜被炒好外,以后每過一個單位時間便會有菜被炒好。這在要執(zhí)行很多任務(wù)時會將速度加快不少,按上述描述,我們假設(shè)現(xiàn)在有八個單位時間,則一個人做完全部事情則只能抄完兩個菜,倘若有四個人,則會炒好五個菜,在炒菜任務(wù)更多的情況下,這種加速就更可觀了。

對于計算機處理指令來說,也可以用相同的技巧。

值得注意的是,MIPS匯編指令總是按照以上五個步驟的執(zhí)行時間來運行,雖然有些MIPS匯編指令只會進行其中的四個或三個步驟,但是為了流水線技術(shù)的方便,這些指令也會運行五個單位執(zhí)行時間,在多余的單位執(zhí)行時間里,這些指令便什么都不做。

根據(jù)前文所述,計算機會將指令分為五個步驟執(zhí)行,于是,使用流水線技術(shù),這兩條指令將會如下被執(zhí)行:

1) 計算機從儲存器中讀取第一條指令;

2) 計算機在將第一條指令進行譯碼的同時從儲存器中讀取第二條指令;

3) 計算機執(zhí)行將100加至$0儲存的數(shù)據(jù)上,同時對第二條指令進行譯碼;

4) 計算機根據(jù)第一條指令而得出的儲存地址讀取數(shù)據(jù),同時將600加至$0儲存的數(shù)據(jù)上;

5) 計算機將執(zhí)行第一條指令得到的數(shù)據(jù)存入寄存器$1中,同時讀取由第二條指令指使的儲存器地址;

6) 計算機將執(zhí)行第二條指令而得的數(shù)據(jù)存入寄存器$2中,兩條指令執(zhí)行完畢。

二者親密無間的配合可以用下圖形象地說明:

在這里實際上只有一條執(zhí)行線,圖中畫了兩條是便于說明流水線技術(shù)。在第一個單位執(zhí)行時間里,計算機會讀取第一條指令;然后在第二個單位執(zhí)行時間里,計算機會讀取第一條指令中所指示的寄存器的值,同時由于第一條指令已經(jīng)被讀取指令完畢,所以讀取指令的部分變得空閑,計算機便同時在第二個單位執(zhí)行時間里讀取第二條指令;然后如圖所示,計算機進入了第三個單位執(zhí)行時間,第一條指令的地址相加開始計算,同時第一條指令的寄存器數(shù)據(jù)被讀取完畢,讀取寄存器的部分已空閑,于是第二條指令所指示的寄存器會被計算機讀取,同樣,讀取指令的部分也已讀完了第二條指令,變的空閑,此時,若有第三個指令,計算機便會在處理第一、二條指令相關(guān)步驟的同時讀取第三條指令。第四、第五個單位執(zhí)行時間里計算機所做的事情也跟上文中敘述的一樣,在這就不贅述。

根據(jù)上面的執(zhí)行步驟可以看出,流水線技術(shù)會和諧流暢地運行每一條由MIPS匯編指令生成的五步中的每一個原子步驟,這比執(zhí)行完一條指令后再執(zhí)行下一條指令要快,比如上面的兩條指令就用了6個步驟,只用6個單位執(zhí)行時間,而一條一條地執(zhí)行會花費8個單位執(zhí)行時間,當(dāng)指令更多時,差距會更大。

但是僅僅做到這里就可以了嗎?毫無疑問,目前的情況是漏洞百出,數(shù)據(jù)冒險問題便是破綻之一。

1.2 數(shù)據(jù)冒險問題探究

在前面的敘述中,計算機用流水線技術(shù)連續(xù)執(zhí)行兩條指令似乎毫不費力,沒有出現(xiàn)什么問題,然而,必須看到一個重要的事實,那就是前面作為例子的指令中相互之間沒有修改寄存器的數(shù)據(jù),一旦后面的指令在前一條指令還沒有執(zhí)行結(jié)束之前便修改了前一條指令的數(shù)據(jù),問題就來了。

但是在計算機的實際操作中卻并非如此,因為我們使用了流水線技術(shù)。

現(xiàn)在在流水線技術(shù)的背景下來重新考慮此問題。對于這兩條指令,計算機會像前文中描述的那樣,將每個指令分為五個步驟來執(zhí)行。

問題就在這,在第三個單位時間,寄存器$12中的數(shù)值是什么呢?在這個時候,由$1和$2相加的結(jié)果還沒有來得及被寫入$12中,此時$12中可能是上一次執(zhí)行指令而留下來的任何數(shù)據(jù),由此,本來第二條指令是指望使用$1和$2相加的結(jié)果,但最后寄存器$16卻得到了錯誤的結(jié)果。

如上所述的只是兩條MIPS匯編指令的執(zhí)行情況,在實際操作中,指令是數(shù)以億計的,出現(xiàn)錯誤的情況會多得多,也更復(fù)雜,這便是數(shù)據(jù)冒險問題中的最主要一種。

那么,對于這種數(shù)據(jù)冒險情況,應(yīng)該如何解決呢?

2 數(shù)據(jù)冒險的轉(zhuǎn)發(fā)數(shù)據(jù)解決方案

正如前文所述,數(shù)據(jù)冒險問題是一個影響計算機計算的主要罪魁禍首之一。

這種數(shù)據(jù)冒險情形可以對癥下藥。

2.1 數(shù)據(jù)冒險問題轉(zhuǎn)發(fā)數(shù)據(jù)解決方案探究

現(xiàn)在事已至此,似乎這類數(shù)據(jù)冒險問題已經(jīng)被很好地解決了。但是還應(yīng)該解決一個問題,那就是如何檢測此類數(shù)據(jù)冒險問題。

2.2 轉(zhuǎn)發(fā)型數(shù)據(jù)冒險問題的檢測

正如上文2.1里所述,計算機必須能檢測到數(shù)據(jù)轉(zhuǎn)發(fā)型的數(shù)據(jù)冒險問題,因為在流水線中,并非所有的指令都會產(chǎn)生這個問題。

那么,什么樣的指令會產(chǎn)生這個問題呢?

上文中0d2ba8b783aaacba685fa76cc70cd80070de2c794651636d505e976ebcd225b0已經(jīng)舉出來一種情況了,即在流水線的過程中,假設(shè)有一條指令處在本身的第三個單位執(zhí)行時間里,假設(shè)這個時間對于計算機來說為第N個單位執(zhí)行時間,現(xiàn)在下一條指令會用到這條指令中最后所寫入的寄存器的值,那么這就產(chǎn)生數(shù)據(jù)冒險問題。這如何進行檢測呢?可以看到,在流水線的過程中,在這第N個單位執(zhí)行時間中,計算機在用累加器進行計算的同時,還會對下一條指令進行譯碼并讀取下一條指令中所指示的寄存器的值,因此,可以在這個時刻對上下兩條指令進行檢測,若其中有涉及到對相同的寄存器的修改,那便可以判斷出這需要使用數(shù)據(jù)轉(zhuǎn)發(fā)策略。實現(xiàn)這種檢測不是很困難,因為MIPS指令每一條都有單獨的二進制碼,并且寄存器也有單獨的編號,檢測起來可以說完全不費吹灰之力。

除此之外,這種數(shù)據(jù)冒險還會在其他情況下會產(chǎn)生。

在上文中,我們的流水線只是有兩條指令,倘若是一個宏大的流水線,又會如何呢?這時,計算機的五個處理步驟就會一刻不停地處理源源不斷而來的原子步驟。

在源源不斷的情況下,若接下來的第3、4或者第5條指令會用到某條指令修改的寄存器,情況又會如何呢?

根據(jù)流水線的過程,可以看到,當(dāng)一條指令進入其本身的第三個步驟時,在第三個步驟末期,計算的結(jié)果會出來,還是假設(shè)這個單位執(zhí)行時間為計算機中第N個單位執(zhí)行時間。同時,下一條指令將會在第N+1個單位執(zhí)行時間用到計算的結(jié)果?,F(xiàn)在再往下看,接下來的第三、四、五條指令現(xiàn)在也會用到這個結(jié)果。根據(jù)流水線的過程,第三條指令將會在第N+2個單位執(zhí)行時間用到該結(jié)果,此時對于第一條指令來說,剛進入其本身的第五個步驟,此時寄存器的內(nèi)容會在這個時期的開始階段被改變,但是第三條指令會在第N+1個單位執(zhí)行時間里讀取寄存器的值,因此在第N+2個單位執(zhí)行時間里第三條指令急于求成地使用寄存器的值也會出錯,因此,有必要給第三條指令也加根線;而對于第四條指令,則會在第N+3個單位時間用到計算的結(jié)果,不過第四條指令會在第N+2個單位時間的末期讀取寄存器的值,此時第一條指令已在這個時間的開始階段就將結(jié)果寫入寄存器了,并且,對于第五條指令及以后的指令,再使用這個被修改的寄存器已無多大障礙,因為這已經(jīng)是在第N+2個單位執(zhí)行時間以后了,第一條指令早已不在流水線中,寄存器的值大局已定,完全可以被利用了。

因此,最終只需再加上檢測第三條指令是否會用到被修改的寄存器便可,傳送數(shù)據(jù)再加上一根從寫入寄存器堆的數(shù)據(jù)總線引出到累加器的線便可。

到這里,數(shù)據(jù)轉(zhuǎn)發(fā)型的數(shù)據(jù)冒險情況就可以完全被掌控了。

2.3 數(shù)據(jù)轉(zhuǎn)發(fā)型數(shù)據(jù)冒險問題的解決總結(jié)

這在實際的計算機中,主要多加幾根信號線和數(shù)據(jù)傳送線便可實現(xiàn)。

3 總結(jié)

本文在簡要分析了計算機中常用的加速技術(shù)——流水線技術(shù)的基礎(chǔ)上,分析了由其引出的數(shù)據(jù)轉(zhuǎn)發(fā)型數(shù)據(jù)冒險問題,并探究了其解決方案。

流水線技術(shù)是當(dāng)今計算機處理器加速所使用的最主要的技術(shù),其原理簡潔明了,效果顯著。數(shù)據(jù)冒險問題則是應(yīng)用此技術(shù)最常碰到的問題之一。在實際應(yīng)用中,流水線技術(shù)還存在其他的一些問題,例如計算機指令不一定會被分為等步驟、指令控制問題等,但是這些問題都有解決方案。相信在未來,在生物計算機、量子計算機等未來計算機中,流水線技術(shù)依舊會成為一個好用的處理加速技術(shù)。

參考資料:

[1] William Stallings.計算機組成與體系結(jié)構(gòu)-性能設(shè)計[M].北京:機械工業(yè)出版社,2011.

[2] Alexander Stepanov&Paul McJones.編譯原本[M].北京:機械工業(yè)出版社,2012.

[3] Patrick Juola.計算機組成及匯編語言原理[M].北京:機械工業(yè)出版社,2010.

[4] Louden, K.C.編譯原理及實踐[M].北京:機械工業(yè)出版社,2000.

[5] William Stallings.操作系統(tǒng):精髓與設(shè)計原理[M].北京:機械工業(yè)出版社,2010.

肃宁县| 射洪县| 平阴县| 昆明市| 响水县| 剑川县| 溧水县| 长寿区| 兴海县| 英德市| 景东| 五大连池市| 华亭县| 和林格尔县| 双流县| 泸水县| 湘西| 永嘉县| 光泽县| 琼中| 建瓯市| 定兴县| 炉霍县| 金湖县| 镇原县| 琼海市| 泰顺县| 澄江县| 缙云县| 城市| 县级市| 巧家县| 肃北| 遂川县| 湄潭县| 彩票| 成安县| 兴和县| 迁安市| 唐山市| 广安市|