計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)曹強(qiáng)習(xí)題答案_第1頁
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)曹強(qiáng)習(xí)題答案_第2頁
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)曹強(qiáng)習(xí)題答案_第3頁
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)曹強(qiáng)習(xí)題答案_第4頁
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)曹強(qiáng)習(xí)題答案_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)概述1.1下表1.8給出幾種芯片的規(guī)格信息,Phoenix是采用7nm技術(shù)設(shè)計(jì)的全新架構(gòu),而RedDragon與BlueDragon架構(gòu)和制程相同,但是優(yōu)化了設(shè)計(jì)。(參考附錄A內(nèi)容進(jìn)行分析及計(jì)算)芯片大小(mm2)估計(jì)缺陷率(每cm2)N制程(nm)晶體管數(shù)量(10億)核數(shù)BlueDragon1800.0312107.54RedDragon1200.041477.54Phoenix2000.04147128Phoenix芯片的成品率是多少?Phoenix為什么比BlueDragon有更高的缺陷率?答案:(1)成品率=1/(1+(0.04/cm2×2cm2))14=0.34(2)因?yàn)镻hoenix使用最新的工藝,因此缺陷率更高。1.2根據(jù)表1.8信息,假設(shè)會(huì)賣出兩種芯片,Phoenix是采用7nm技術(shù)設(shè)計(jì)的全新架構(gòu),而RedDragon與BlueDragon架構(gòu)相同。每塊RedDragon無缺陷芯片將獲利1000元。每塊Phoenix無缺陷芯片將獲利2000元。每個(gè)晶圓直徑是450毫米。(參考附錄A內(nèi)容進(jìn)行分析及計(jì)算)(1)Phoenix的每片晶圓上賺了多少利潤(rùn)?(2)RedDragon每片晶圓能賺多少利潤(rùn)?(3)如果每月需要5萬個(gè)RedDragon芯片和2.5萬個(gè)Phoenix,工廠每個(gè)月只有70個(gè)晶圓,如果晶圓不足,盡量減少芯片產(chǎn)量缺口情況下,如何分配晶圓生產(chǎn)芯片使得利潤(rùn)最大化?答案:(1)Phoenix:每個(gè)晶圓上的芯片數(shù)量=π×(45/2)2/2—(π×45)/sqrt(2×2)=795—70.7=724.5=724成品率=1/(1+(0.04×2))14=0.340利潤(rùn)為=724×0.34×2000=492320元(2)RedDragon:每個(gè)晶圓上的芯片數(shù)量=π×(45/2)2/2—(π×45)/sqrt(2×1.2)=1325—91.25=1234成品率=1/(1+(0.04×1.2))14=0.519利潤(rùn)為=1234×0.519×1000=640446元(3)Phoenix芯片數(shù)量:25000/724=34.5個(gè)晶圓;RedDragon50000/1234=40.5個(gè)晶圓因?yàn)槊總€(gè)晶圓RedDragon利潤(rùn)高,優(yōu)先生產(chǎn)40個(gè)晶圓,剩余保證Phoenix,需要30個(gè)晶圓。1.3實(shí)時(shí)系統(tǒng)中,執(zhí)行程序必須在規(guī)定執(zhí)行期限內(nèi)完成。更快地完成計(jì)算沒有收益。系統(tǒng)最快執(zhí)行程序的速度是正常執(zhí)行速度的兩倍。(1)功率不變情況下,以最快速度執(zhí)行,計(jì)算完成后關(guān)閉系統(tǒng),相對(duì)于正常執(zhí)行可以節(jié)省多少能耗?(2)設(shè)置電壓和頻率減半時(shí),程序執(zhí)行時(shí)間不變,請(qǐng)問可以節(jié)省多少電能?解答:(1)0.5T*P=0.5TP節(jié)省50%的功耗。(2)Energy:Energynew/Energyold=(Voltage×1/2)2/Voltage2=可以節(jié)省75%的能耗。1.4假設(shè)一個(gè)四核通用處理器,每個(gè)核滿載時(shí)的功耗為0.5W。對(duì)于特定任務(wù),該處理器四核同時(shí)工作會(huì)加速到單核運(yùn)行時(shí)的8倍。

(1)假設(shè)該四核處理器中四個(gè)核必須同時(shí)同頻運(yùn)行,但可以同時(shí)關(guān)閉,關(guān)閉時(shí)不會(huì)產(chǎn)生電流泄露。請(qǐng)計(jì)算單核和四核工作情況下的工作功率和任務(wù)能耗比。當(dāng)該處理器頻率和電壓減小到1/8,計(jì)算此時(shí)的動(dòng)態(tài)功率和能耗下降到正常情況下的比例。為該特定任務(wù)設(shè)計(jì)專用集成電路(ASIC),不使用時(shí)能夠完全關(guān)閉。執(zhí)行該任務(wù)僅需一個(gè)通用核心,芯片上剩下部分用于實(shí)現(xiàn)專用電路。具體運(yùn)行時(shí),需要一個(gè)核心運(yùn)行25%的時(shí)間,這個(gè)核心在剩下75%的時(shí)間內(nèi)會(huì)被關(guān)停。在這75%的時(shí)間內(nèi),一個(gè)該專用電路運(yùn)行,僅需要一個(gè)核心20%功率。試計(jì)算采取新方案和(1)中單核方案的能耗比。解答:(1)單核工作時(shí),需要T時(shí)間完成工作。四核同時(shí)工作時(shí),僅需要1/8T時(shí)間完成任務(wù)。四個(gè)核需要同時(shí)同頻工作,四核工作和單個(gè)核工作時(shí),功率相同為P。單核工作時(shí),總功耗=PT。四核工作時(shí),功率相同為1/8PT;因此工作功率,單核情況下和四核情況下相同。單核情況下任務(wù)能耗是四核情況下的1/8倍。(2)當(dāng)頻率和電壓減小到1/8,計(jì)算此時(shí)的動(dòng)態(tài)功率和能耗。能耗:Energynew/Energyold=(Voltage×1/8)2/Voltage2=動(dòng)態(tài)功率:Powernew/Powerold=0.156×(Frequency×1/8)/Frequency=(3)(1)中單核功耗為P,時(shí)間為T。本方案下,0.25T*0.25P+(0.25P*0.75T*0.2)==0.1TP也即是能耗是單核情況下的10%1.5可用性是服務(wù)器設(shè)計(jì)中的最重要考慮事項(xiàng),其次是可擴(kuò)展性和吞吐量。(1)有一個(gè)服務(wù)器,其處理器的壽命為109小時(shí),處理器總故障次數(shù)(Failureintime,FIT)為10000。這個(gè)系統(tǒng)的平均無故障時(shí)間(MTTF)為多少?(2)如果需要1天的時(shí)間才能讓這個(gè)系統(tǒng)再次正常運(yùn)行,這個(gè)系統(tǒng)的可用性是多少?(3)現(xiàn)代數(shù)據(jù)中心為了降低成本,準(zhǔn)備用上述廉價(jià)服務(wù)器構(gòu)建一個(gè)倉儲(chǔ)式計(jì)算機(jī)。一個(gè)具有1000服務(wù)器的系統(tǒng),其MTTF為多少?(假設(shè)如果一個(gè)服務(wù)器發(fā)生故障,整個(gè)系統(tǒng)就不能工作都會(huì)故障)解答:(1)109/10000=105(2)105/(105+24)=99.76%(3)1/(103/105)=100(小時(shí))1.6假設(shè)對(duì)某一計(jì)算機(jī)進(jìn)行了優(yōu)化,采用增強(qiáng)模式使得程序的特定模塊加速了10倍,特定模塊占加速后程序50%時(shí)間。(1)增強(qiáng)模式下的全局加速比是多少?(2)在未增強(qiáng)模式下,特定模塊執(zhí)行時(shí)間占整個(gè)程序的多少比例?解答:(1)T未加速時(shí)時(shí)間=0.5*T加速時(shí)間+0.5*T加速時(shí)間*10=5.5T加速時(shí)間*。因此加速比是5.5倍(2)未加速部分時(shí)間在兩種情況下相同,加速部分占比為x;由于加速后,未加速部分占50%,(1—x)=x/1010—10x=x10=11x10/11=x=0.911.7假設(shè)考慮通過添加專用加密硬件來增強(qiáng)四核處理器功能。該專用加密模塊執(zhí)行加密操作,比正常執(zhí)行模式快20倍。在非加速情況下,一個(gè)程序加密部分執(zhí)行時(shí)間比例為X。(1)X為多少時(shí),加密硬件降低一半的整體執(zhí)行時(shí)間?(2)如果全局加速比為2,硬件加速占整個(gè)程序執(zhí)行時(shí)間比例是多少?(3)假設(shè)測(cè)量了X是50%。為了進(jìn)一步加快加密速度,計(jì)劃通過增加第二個(gè)加密硬件單元通過并行加密。假設(shè)90%的加密操作可以并行,請(qǐng)問相對(duì)于不使用加密硬件情況下,此時(shí)的全局加速比。解答:(1)2=1/((1—x)+x/20)x=10/19=52.6%(2)(0.526/20)/(0.474+0.526/20)=(3)加密部分的局部加速比為:1/(0.1+0.9/2)=1.82,加密部分的總局部加速比為1.82*20=36.4全局加速比為1/(0.5+0.5/36.4)=1.947或1.951.8加速處理器的某些指令時(shí),可能導(dǎo)致其他指令速度降低的情況。(1)如果新快速浮點(diǎn)單元使浮點(diǎn)運(yùn)算的速度平均提高2倍,浮點(diǎn)運(yùn)算占用的時(shí)間為原程序執(zhí)行時(shí)間的20%,那么總加速比為多少(忽略對(duì)所有其他指令的影響)?(2)現(xiàn)在假定浮點(diǎn)單元的加速會(huì)降低數(shù)據(jù)緩存訪問的速度,減緩倍數(shù)為1.5(或者說加速比為2/3)。數(shù)據(jù)緩存訪問時(shí)間為總執(zhí)行時(shí)間的10%?,F(xiàn)在的總加速比為多少?(3)在實(shí)現(xiàn)新的浮點(diǎn)運(yùn)算之后,浮點(diǎn)運(yùn)算執(zhí)行時(shí)間占總執(zhí)行時(shí)間的比例為多少?數(shù)據(jù)緩存訪問所占比例為多少?解答:(1)1/(0.8+0.20/2)=1.11(2)1/(0.7+0.20/2+0.10×3/2)=1.05(3)浮點(diǎn)運(yùn)算:0.1/0.95=10.5%,緩存:0.15/0.95=15.8%1.9在實(shí)現(xiàn)一個(gè)應(yīng)用程序的并行化時(shí),理想加速比應(yīng)當(dāng)?shù)扔谔幚砥鞯膫€(gè)數(shù)。但它要受到兩個(gè)因素的限制:應(yīng)用程序可并行化部分的百分比和通信成本。Amdahl定律考慮了前者,但沒有考慮后者。(1)如果應(yīng)用程序的80%可以并行化,N個(gè)處理器的加速比為多少?(忽略通信成本。)(2)如果每增加一個(gè)處理器,通信開銷增加原執(zhí)行時(shí)間的0.5%,則8個(gè)處理器的加速比為多少?(3)如果處理器數(shù)目每增加一倍,通信開銷增加原執(zhí)行時(shí)間的0.5%,則8個(gè)處理器的加速比為多少?(4)如果處理器數(shù)目每增加一倍,通信開銷增加原執(zhí)行時(shí)間的0.5%,則N個(gè)處理器的加速比為多少?解答:(1)1/(0.2+0.8/N)(2)1/(0.2+8×0.005+0.8/8)=2.94(3)1/(0.2+3×0.005+0.8/8)=3.17(4)1/(.2+logN×0.005+0.8/N)1.10如果某重要程序運(yùn)行在300MHZ的SuperI處理器上,通過運(yùn)行仿真器,能夠發(fā)現(xiàn)指令類型的比例和延遲。如下表所示:指令類型頻率(%)周期ALUandLogic401Load201Store102Branches203FloatingPoint106(1) 請(qǐng)計(jì)算SuperI的CPI和MIPS。(2) SuperII增加了處理器的時(shí)鐘頻率(450MHZ),但是為了獲得更高的時(shí)鐘頻率,設(shè)計(jì)者不得不增加ALU,Logical和Load指令的CPI到2,浮點(diǎn)指令的CPI到8,請(qǐng)計(jì)算相對(duì)于SuperI的加速比。(3) 在SuperII的基礎(chǔ)上進(jìn)一步設(shè)計(jì)SuperIII處理器時(shí),發(fā)現(xiàn)所有浮點(diǎn)指令中有20%復(fù)雜浮點(diǎn)指令和80%簡(jiǎn)單浮點(diǎn)指令組成,每條復(fù)雜浮點(diǎn)指令的CPI為32,并且可以使用10條簡(jiǎn)單浮點(diǎn)指令替代,每條簡(jiǎn)單浮點(diǎn)指令的CPI為32,。那么在SuperIII中取消復(fù)雜浮點(diǎn)指令,使用簡(jiǎn)單浮點(diǎn)指令取代復(fù)雜浮點(diǎn)指令,其他不變名,請(qǐng)計(jì)算SuperIII的平均CPI。解答:(1)CPI=0.4*1+0.2*1+0.1*2+0.1*6=2;MIPS=300MHZ/2=150MIPS(2)CPI=0.4*2+0.2*2+0.1*2+0.2*3+0.1*8=2.8Speedup=2*450/2.8*300=1.07(3)如下表所示:總的浮點(diǎn)CPI為8,F(xiàn)1的比例是20%,CPI為32,F(xiàn)2的比例為80%,則F2的CPI為2.程序的總指令數(shù)為40%+20%+10%+20%+2%*10+8%=108%CPI=(40%*2+40%*2+10%*2+20%*3+(2%*10+8%)*2)/108%=2.37指令類型頻率(%)周期ALUandLogic402Load202Store102Branches203F110*20%=22F210*80%=81.11某8核MCPUx能夠動(dòng)態(tài)啟動(dòng)和關(guān)閉工作的核,假設(shè)某一程序80%部分可以并行執(zhí)行,不考慮L1$,L2$對(duì)于計(jì)算過程和功耗的影響,CPI在兩種情況下都不變;在單核運(yùn)行時(shí),程序執(zhí)行的時(shí)間為T0,P0為運(yùn)行功率。下面有兩個(gè)調(diào)度方案,請(qǐng)分別計(jì)算該程序運(yùn)行在兩種情況下的實(shí)際功耗。(1)只使用一個(gè)核,其它核關(guān)閉,CPU電壓增加10%,主頻增加25%;(2)使用全部8個(gè)核,CPU電壓增加10%,主頻不變。解答:T0為程序原來執(zhí)行的時(shí)間,P0為單核執(zhí)行不改變時(shí)的功率,其執(zhí)行程序的總能耗為W0=T0*P0(1)T1=T0/(1+0.25)=0.8*T0;P1=(1+10%)2*(1+25%)*P0=1.5125*P0W1=T1*P1=1.21W0(2)T2=(20%+80%/8)*T0=30%T0P2=(1+10%)2*8*P0=9.68*P0W2=T2*P2=2.904W0第二章計(jì)算機(jī)指令集2.1一種RISC-VCPU運(yùn)行Astar和GCC兩種程序,經(jīng)過實(shí)際測(cè)量得到每類指令的頻率如下表所示。假設(shè)60%分支條件成功,請(qǐng)計(jì)算實(shí)際平均CPI。指令時(shí)鐘周期AstarGccAverage所有ALU指令146%36%41%載入5存儲(chǔ)3分支成功5不成功3跳轉(zhuǎn)3解答:實(shí)際CPI=加權(quán)求和(指令頻率×指令CPI)=(0.41)(1.0)+(0.225)(5.0)+(0.145)(3.0)+(0.19)[(0.6)(5.0)+(1—0.6)(3.0)]+(0.03)(3.0)=2.862.2考慮以下情景的指令編碼:處理器的指令長(zhǎng)度為14位,有64個(gè)通用寄存器,是否有可能實(shí)現(xiàn)如下指令編碼?如可以,請(qǐng)給出一種編碼方法,操作碼放在最高位,寄存器地址碼放在最低位。

(1)3個(gè)兩地址指令

(2)63個(gè)單地址指令

(3)45個(gè)零地址指令解答:一條指令的長(zhǎng)度是14位。有64個(gè)通用寄存器,因此每個(gè)寄存器操作數(shù)的地址字段的大小為6位。由于存在帶有兩個(gè)地址的指令,因此為操作碼保留了兩個(gè)最高有效位。標(biāo)識(shí)addr[13:0]用來表示一條指令的14位。首先需要支持3個(gè)雙地址指令,可以編碼如第二行。其次最高2位為11,接下來6位可以表示63個(gè)單地址指令,可以編碼如第三行。最后最高8為為11,最低6為可以表示45個(gè)零地址指令,可以編碼如第四行。3個(gè)兩地址指令‘0’,‘0’,‘00000’to‘00000’to63個(gè)單地址指令‘11’‘000000’to‘111110’‘000000’to‘111111’45個(gè)零地址指令‘11’‘111111’‘000000’to‘101100’19unusedencodings‘11’‘111111’‘101101’to‘111111’2.3考慮下述C結(jié)構(gòu)體foo。structfoo{chara;boolb;intc;doubled;shorte;floatf;doubleg;char*cptr;float*fptr;intx;};對(duì)于32位處理器計(jì)算機(jī),foo結(jié)構(gòu)的大小為多少?假定可以任何安排結(jié)構(gòu)成員的順序,這一結(jié)構(gòu)最小為多少?對(duì)于64位處理器計(jì)算機(jī)?解答:需要考慮對(duì)齊策略。在32位處理器上,foo結(jié)構(gòu)由1+1+4+8+2+4+8+4+4+4總共40個(gè)字節(jié)組成。由于對(duì)齊要求,char和bool會(huì)被打包并填充兩個(gè)字節(jié),完成4個(gè)字節(jié)。第一個(gè)int和double類型已經(jīng)滿足對(duì)齊要求,因此不需要打包或填充。short將用兩個(gè)字節(jié)填充。其余成員滿足對(duì)齊邊界,所以結(jié)構(gòu)的實(shí)際大小是40+2+244字節(jié)。要找到結(jié)構(gòu)所需的最小大小,數(shù)據(jù)成員需要從最寬到最窄排列,見下表。重新排列的結(jié)構(gòu)將首先包含指針和雙精度類型,并以bool和char類型結(jié)束。此排序不需要填充字節(jié),因此結(jié)構(gòu)的實(shí)際大小為40字節(jié)。在64位處理器上,結(jié)構(gòu)由1+1+4+8+2+4+8+8+8+4總共48個(gè)字節(jié)組成。由于對(duì)齊要求,char和bool將被打包并填充兩個(gè)字節(jié),并且還與第一個(gè)int打包。雙精度和指針類型不需要打包或填充。short將填充兩個(gè)字節(jié)并與浮點(diǎn)數(shù)一起打包。最后一個(gè)int將需要四個(gè)填充字節(jié)來滿足8字節(jié)邊界。那么,結(jié)構(gòu)體的實(shí)際大小是48+2+2+456個(gè)字節(jié)。重新排列后結(jié)構(gòu)的最小大小為48字節(jié),因?yàn)椴恍枰畛渥止?jié)。Datasizeon32-bitmachine(bytes)Datasizeon64-bitmachine(bytes)11112244484488482.4—數(shù)值5249534356435055用十六進(jìn)制數(shù)字表示,將其存儲(chǔ)在64位對(duì)齊雙字中。(1)使用大端字節(jié)順序?qū)懭胍鎯?chǔ)的值。接下來,逐一解讀字節(jié)作為ASCII字符并在每個(gè)字節(jié)下方寫入相應(yīng)的字符,形成字符串。請(qǐng)從左到右給出相應(yīng)字符串。(2)使用與(1)部分相同的物理排列,使用小端字節(jié)順序存儲(chǔ),接下來,逐一解讀字節(jié)作為ASCII字符,形成字符串。請(qǐng)從左到右給出相應(yīng)字符串。解答:(1)RISCVCPU(2)PUVCSCRI2.5考慮到下述C代碼和相應(yīng)的RISC-V代碼片段:C代碼for(i=0;i<100;i++){

A[i]=B[i]+C;

}RISC-V代碼:EX: ADD A1,A0,A0 ;A0=0,初始化i=0SD A1,7000(A0) ;存儲(chǔ)iLoop: LD A1,7000(A0) ;取i的值LD A2,3000(A1) ;取B[i]LD A3,5000(A0) ;取CADD A4,A2,A3 ;B[i]+CSD A4,1000(A1) ;存儲(chǔ)B[i]+C到A[i]ADD A1,A1,8 ;i增加SD A1,7000(A0) ;存儲(chǔ)iADD A5,A0,808 ;i是否是101?BNE A1,A5,loop ;如果不是101,重復(fù)loop假設(shè)A和B是64位整數(shù)數(shù)組,C和i是64位整數(shù)。假設(shè)所有數(shù)據(jù)值及其地址都保存在內(nèi)存中(在A、B、C和i的地址分別為1000、3000、5000和7000)。寄存器中的值在迭代之間會(huì)丟失。所有地址和字都是64位。(1)程序需要執(zhí)行多少條指令?(2)程序需要執(zhí)行多少條訪問內(nèi)存指令?(3)以字節(jié)為單位的代碼大小是多少?解答:(1)指令的數(shù)量為:2+(9×101)=(2)訪存指令數(shù)量為:=1+(5×101)=506(3)代碼長(zhǎng)度:=11×4=44bytes第三章指令流水線3.1以下代碼段:Loop: ldx1,0(x2) ;地址0+x2載入x1addix1,x1,1 ;x1=x1+1sdx1,0,(x2) ;存儲(chǔ)x1到地址0+x2addix2,x2,4 ;x2=x2+4subx4,x3,x2 ;x4=x3-x2bnezx4,Loop ;如果x4!=0則循環(huán)假定x3的初始值為x2+396。(1)列出上述代碼中的所有數(shù)據(jù)相關(guān),記錄寄存器、源指令和目標(biāo)指令;例如,從ld到addi,存在對(duì)于寄存器x1的數(shù)據(jù)相關(guān)性。

(2)給出這一指令序列對(duì)于5級(jí)RISC流水線的時(shí)序,該流水線沒有任何轉(zhuǎn)發(fā)或旁路硬件,但假定在同一時(shí)鐘周期中的寄存器讀取與寫入通過寄存器組進(jìn)行“轉(zhuǎn)發(fā)”。請(qǐng)畫出流水線時(shí)空?qǐng)D。假定該分支是通過清空流水線來處理的?如果所有存儲(chǔ)器引用耗時(shí)1個(gè)周期,這一循環(huán)的執(zhí)行需要多少個(gè)周期。

(3)給出這一指令序列對(duì)于擁有完整轉(zhuǎn)發(fā)、旁路硬件的5級(jí)RISC流水線的時(shí)序。假定在處理分支時(shí),預(yù)測(cè)分支不成功。如果所有存儲(chǔ)器引用耗時(shí)1個(gè)周期,這一循環(huán)的執(zhí)行需要多少個(gè)周期?

(4)給出這一指令序列對(duì)于擁有完整轉(zhuǎn)發(fā)、旁路硬件的5級(jí)RISC流水線的時(shí)序。假定在處理分支時(shí),預(yù)測(cè)分支成功。如果所有存儲(chǔ)器引用耗時(shí)1個(gè)周期,這一循環(huán)的執(zhí)行需要多少個(gè)周期?(5)對(duì)于一個(gè)擁有完整轉(zhuǎn)發(fā)、旁路硬件的10級(jí)RISC流水線,也就是經(jīng)典5級(jí)流水線的每一級(jí)被分為2級(jí),具有數(shù)據(jù)重定向機(jī)制,也就是數(shù)據(jù)由流水級(jí)的末尾轉(zhuǎn)發(fā)到需要這些數(shù)據(jù)的兩個(gè)流水級(jí)的開頭。例如,數(shù)據(jù)從第二執(zhí)行級(jí)的輸出轉(zhuǎn)發(fā)到第一執(zhí)行級(jí)的輸入,仍然導(dǎo)致1個(gè)周期的延遲。給出這一指令序列的時(shí)空?qǐng)D。假定在處理分支時(shí),預(yù)測(cè)分支成功。如果所有存儲(chǔ)器引用耗時(shí)1個(gè)周期,這一循環(huán)的執(zhí)行需要多少個(gè)周期?(6)假定在一個(gè)5級(jí)流水線中,最長(zhǎng)的流水級(jí)需要0.8ns,流水線寄存器延遲為0.1ns。這個(gè)5級(jí)流水線的時(shí)鐘周期時(shí)間為多少?如果10級(jí)流水線將所有流水級(jí)都分為兩半,那么10級(jí)機(jī)器的周期時(shí)間為多少?(7)利用第(d)、(e)部分的答案,判斷該循環(huán)在5級(jí)流水線和10級(jí)流水線上的每指令周期數(shù)(CPI)。確保僅計(jì)算從第一條指令到達(dá)寫回級(jí)再到最后的周期數(shù)。不要計(jì)算第一條指令的開始時(shí)間。利用第(f)部分計(jì)算的時(shí)鐘周期,計(jì)算每種機(jī)器的平均指令執(zhí)行時(shí)間。解答:(1)下面是所有的相關(guān) x1 ld x1 daddi x2 ldx2 sd daddix2 dsub daddix4 bnez dsub(2)5段RISC-V流水線時(shí)空?qǐng)D123456789 x1,FDXMWdaddix1,x1,FssDXMW x1,FssDXMWdaddix2,x2,FDXMWdsubx4,x3,FssDXMWbnezx4,FssDXMWLDR1, 僅通過寄存器文件轉(zhuǎn)發(fā)執(zhí)行。由于直到執(zhí)行階段結(jié)束才知道分支結(jié)果和目標(biāo),因此在此之前進(jìn)入流水線的所有指令都將被清空。由于x3的初始值為x2+396,并且循環(huán)的相等實(shí)例將x2加4,因此迭代的總數(shù)為99。請(qǐng)注意,包括分支指令在內(nèi)的RAW沖突增加了8個(gè)周期。由于指令刷新,分支后增加兩個(gè)周期。循環(huán)實(shí)例之間需要16個(gè)周期;循環(huán)總數(shù)為98*16+18=1584。最后一個(gè)循環(huán)的最后2個(gè)周期不能與其他循環(huán)實(shí)例重疊。123456789101112131415161718x1,FDXMWx1,x1,FDsXMWx1,FsDXMWx2,x2,FDXMWx4,x3,FDXMWx4,FsDXMW(incorrectFssss x1,FDXM W(3)使用正常重定向操作,在解碼之后,能夠確定分支結(jié)果和分支目標(biāo)。這次也有99次循環(huán),有2個(gè)RAW沖突,在分支發(fā)生之后,會(huì)發(fā)生清空流水線操作??偣不ㄙM(fèi)9*98+12=894。最后一次循環(huán)花費(fèi)3個(gè)額外周期。(4)這次也有99次循環(huán),有2個(gè)RAW沖突,能夠正確預(yù)測(cè)分支,不會(huì)發(fā)生清空流水線操作??偣不ㄙM(fèi)8*98+12=796。最后一次循環(huán)花費(fèi)3個(gè)額外周期。123456789 x1,FDXMWx1,x1,FDsXMWx1,FsDXMWx2,x2,FDXMWx4,x3,FDXMWx4,FsDXMW x1, (5)在ld和addi之間有3個(gè)RAW沖突,在daddi和dsub之間發(fā)生1個(gè)RAW沖突。因此有分支預(yù)測(cè),98個(gè)循環(huán)??傊芷跀?shù)為10×98+19=999123456789 x1,x1,x1,sssx1,sssx2,x2,sssx4,x3,ssssx4,sx1,sW1(6)5級(jí)流水線周期為0.9ns。10級(jí)流水線周期為0.5ns。(7)5級(jí)流水線CPI為:796/(99×6)=1.34.10級(jí)流水線CPI為:999/(99×6)=1.68.5級(jí)流水線平均執(zhí)行時(shí)間為:1.34×0.91.21ns10級(jí)流水線CPI為:1.68×0.5=.3.2假定分支頻率如下所示(以占全部指令的百分比表示):分支條件15%跳轉(zhuǎn)與調(diào)用1%成功分支條件60%成功(1)一個(gè)4級(jí)流水線,其中,無條件分支在第二周期結(jié)束時(shí)執(zhí)行,而條件分支則在第三個(gè)周期結(jié)束時(shí)執(zhí)行。假定第一個(gè)流水級(jí)總會(huì)完成,與是否執(zhí)行該分支無關(guān),忽略其他流水線停頓,在沒有分支沖突的情況下,該流水線CPU比非流水線實(shí)現(xiàn)CPU的速度快多少?

(2)一個(gè)15級(jí)高性能處理器,無條件分支在第五周期結(jié)束時(shí)執(zhí)行,條件分支在第十周期結(jié)束時(shí)執(zhí)行。第一個(gè)流水級(jí)總會(huì)完成,與是否執(zhí)行該分支無關(guān),忽略其他流水線停頓,在沒有分支沖突的情況下,該流水線CPU比非流水線實(shí)現(xiàn)CPU的速度快多少?

解答:(1)4級(jí)流水線的理想加速比為4,如果沒有分支沖突,就能得到理想加速比。接下來考慮跳轉(zhuǎn)和分支,對(duì)于跳轉(zhuǎn)和調(diào)用指令,產(chǎn)生1個(gè)額外停頓。123456Jumpori+..i+..i+..分支成功情況下,產(chǎn)生2個(gè)額外停頓:分支不成功情況下,產(chǎn)生1個(gè)額外停頓:123456Not-takeni+..i+..i+...綜合起來:Controlflow(perinstruction)Jumpsand1Conditional15%60%=2Conditional(not15%40%=1流水線加速比停頓real=(1×1%)+(2×9%)+(1×6%)=流水線加速比ideal=1/(1+0.24)*4=3.23流水線加速比相對(duì)加速比=4/3.23=1.24(2)15級(jí)流水線的理想加速比為15,如果沒有分支沖突,就能得到理想加速比。和上面相同的分析過程。對(duì)于跳轉(zhuǎn)或調(diào)用,跳轉(zhuǎn)或調(diào)用在第5周期結(jié)束時(shí)解決,導(dǎo)致4次浪費(fèi)取指或4次停頓。對(duì)于成功的條件分支,直到第10周期結(jié)束才解決分支,導(dǎo)致浪費(fèi)1次取指和8次停頓或9次停頓。對(duì)于未成功的條件分支,直到第10周期結(jié)束時(shí)分支處理完,有8個(gè)停頓,而不浪費(fèi)的取指操作。綜合起來:Controlflow(perinstruction)Jumpsand4Conditional15%60%=9Conditional(not15%40%=8實(shí)際流水線實(shí)現(xiàn)=(4*1%)+(9*9%)+(8*6%)=0.04+0.81+0.48=1.33實(shí)際流水線加速比=(1/(1+1.33))*(15)=15/2.33=6.44相對(duì)加速比=15/6.44=2.333.3一個(gè)采用單周期實(shí)現(xiàn)的處理器,時(shí)鐘周期時(shí)間為7ns。在按功能劃分流水級(jí)時(shí),每個(gè)流水級(jí)的時(shí)鐘延遲不一定相同,這個(gè)流水線化處理器具體測(cè)得的時(shí)間數(shù)據(jù)為:IF,1ns;ID,1.5ns;EX,1ns;MEM,2ns;WB,1.5ns。流水線寄存器延遲為0.1ns。

(1)這個(gè)5級(jí)流水化機(jī)器的時(shí)鐘周期時(shí)間為多少?

(2)如果流水化處理器每4條指令有一次停頓,新機(jī)器的CPI為多少?

(3)流水化機(jī)器相對(duì)于單周期機(jī)器的加速比為多少?

(4)如果流水化機(jī)器有無限個(gè)流水級(jí),每級(jí)延遲接近于0,則相對(duì)于單周期機(jī)器的加速比為多少?解答:(1)2ns+0.1ns=2.1ns(2)5cycles/4instructions=1.25(3)程序執(zhí)行時(shí)間=I×CPI×CycleTime加速比=(I×1×7)/(I×1.25×2.1)=2.67(4)I×1×7/I×1×(N+0.1)=703.4典型5級(jí)RISC流水線可以在ID中增加分支計(jì)算減少控制沖突停頓,并且通過重定向減輕RAW的停頓。即使有上述優(yōu)化,分析下述代碼,計(jì)算分支導(dǎo)致停頓周期。LOOP:x1,#x1=x2-x3,x3,#sum=sum+x2-x2,#x2=x2-x2,x0,#while(x2!=null)keep

解答:分支判定依賴于前面的內(nèi)存讀取LW。停頓2個(gè)周期。

3.5假定原CPU是一個(gè)5級(jí)流水線,其時(shí)鐘周期為1ns。第二種CPU采用12級(jí)流水線,時(shí)鐘周期0.6ns。由于數(shù)據(jù)沖突,5級(jí)流水線每5條指令經(jīng)歷1次停頓;而12級(jí)流水線每8條指令經(jīng)歷3次停頓。此外,分支占全部指令的20%,兩臺(tái)機(jī)器的錯(cuò)誤預(yù)測(cè)率都是5%。

(1)僅考慮數(shù)據(jù)沖突,12級(jí)流水線相對(duì)于5級(jí)流水線的加速比為多少?

(2)如果第一種CPU的分支錯(cuò)誤預(yù)測(cè)代價(jià)為2個(gè)周期,而第二臺(tái)機(jī)器為5個(gè)周期,則每種機(jī)器的CPI為多少?由于分支錯(cuò)誤預(yù)測(cè)而導(dǎo)致的停頓考慮在內(nèi)。

解答:(1)執(zhí)行時(shí)間=I×CPI×CycleTimeSpeedup=(I×6/5×1)/(I×11/8×0.6)=1.45(2)CPI5-stage=6/5+0.20×0.05×2=1.22,CPI12-stage=11/8+0.20×0.05×5=1.425Speedup=(1×1.22×1)/(1×1.425×0.6)=1.173.6下述代碼:C代碼匯編代碼intarray[N]={…};for(inti=0;i<N;i++){if(array[i])array[i]++;}lia0,N laa1,arrayloop: lwa2,0(a1) beqza2,endif addia2,a2,1 swa2,0(a1)endif: addia0,a0,-1 addia1,a1,4 bneza0,loop處理器具有一個(gè)512項(xiàng)分支歷史表(BHT),被PC[10:2]索引。每條分支歷史記錄包含2位計(jì)數(shù)器,初始值是00,如果array={1,0,-3,2,1},請(qǐng)問兩個(gè)分支(bnez和beqz)在五次循環(huán)中的分支預(yù)測(cè)正確率?請(qǐng)給給出每步計(jì)算過程。解答:

bnez分支執(zhí)行情況如下,預(yù)測(cè)精度是2/5.StatePredictionActual00NottakenTaken01NottakenTaken10TakenTaken11TakenTaken11TakenNottakenbeqz分支執(zhí)行情況如下,預(yù)測(cè)精度是4/5StatePredictionActual00NottakenNottaken00NottakenTaken01NottakenNottaken00NottakenNottaken00NottakenNottaken3.7DAXPY循環(huán)程序是高斯消去法中的核心運(yùn)算。該循環(huán)對(duì)于一個(gè)長(zhǎng)度為100的向量實(shí)現(xiàn)了向量運(yùn)算Y=a*X+Y。下面是該循環(huán)的MIPS代碼:

foo:fldf2,0(x1)載入X(i)fmul.df4,f2,f0求乘積a*X(i)fldf6,0(x2)載入Y(i)fadd.df6,f4,f6求和a*X(i)+Y(i)fsd0(x2),f6存儲(chǔ)Y(i)addix1,x1,8遞增X索引addix2,x2,8遞增Y索引sltiux3,x1,done測(cè)試是否完成bnezx3,foo如果沒有完成則繼續(xù)循環(huán)假定整數(shù)計(jì)算在一個(gè)時(shí)鐘周期內(nèi)發(fā)射和完成(包括載入),它們的結(jié)果被全旁路,忽視分支延遲。浮點(diǎn)操作延遲如下表所示,假定浮點(diǎn)單元被完全流水化,啟動(dòng)間隔為1。畫出時(shí)序圖的執(zhí)行時(shí)序。顯示每條指令的執(zhí)行時(shí)間每個(gè)循環(huán)迭代耗用多少個(gè)時(shí)鐘周期?從第一條指令進(jìn)入WB級(jí)開始計(jì)算,直到最后一條指令進(jìn)入WB級(jí)為止。生成結(jié)果的指令使用結(jié)果的指令延遲(時(shí)鐘周期)浮點(diǎn)乘浮點(diǎn)ALU操作6浮點(diǎn)加浮點(diǎn)ALU操作4浮點(diǎn)乘浮點(diǎn)存儲(chǔ)5浮點(diǎn)乘浮點(diǎn)存儲(chǔ)3整數(shù)運(yùn)算(包括載入)任意0解答:21—5=16cycles/iteration1 1011 1415 L.DF6, IFIDEXMMMUL.DF4,F2, IFID M1M2M3M4M5M6M7MMLDF6, IF EXMMADD.DF6,F4, ID A2A3A4MMS.D0(R2), IF EXMMDADDIUR1,R1, EXMM EXMM EXMM

3.8假定有一個(gè)深度流水線處理器,為其實(shí)現(xiàn)分支目標(biāo)緩沖區(qū),僅用于條件分支。假定錯(cuò)誤預(yù)測(cè)的代價(jià)都是4個(gè)周期,緩沖缺失代價(jià)都是3個(gè)周期。假定命中率為90%、準(zhǔn)確率為90%、分支頻率為15%。與分支代價(jià)固定為兩個(gè)周期的處理器相比,采用這一分支目標(biāo)緩沖區(qū)的處理器要快多少?假定每條指令的時(shí)鐘周期數(shù)(CPI))為基本CPI,沒有分支停頓。解答:Speedup=CPInoBTB=CPIbase+ CPIbase+StallsnoBTB=15%×2=計(jì)算StallsBTBBTB結(jié)果BTB預(yù)測(cè)頻率代價(jià)缺失15%×10%=3命中正確15%×90%×90%=0命中不正確15%×90%×10%=4因此:StallsBTB=(1.5%×3)+(12.1%×0)+(1.3%×4)=0.097加速比=(1+0.3)/(1+0.097)=1.23.9考慮分支目標(biāo)緩沖區(qū),正確條件分支預(yù)測(cè)、錯(cuò)誤預(yù)測(cè)和緩存缺失的代價(jià)分別為0、2和2個(gè)時(shí)鐘周期。考慮一種區(qū)分條件與無條件分支的分支目標(biāo)緩沖區(qū)設(shè)計(jì),而條件分支存儲(chǔ)目標(biāo)地址,對(duì)于無條件分支則存儲(chǔ)目標(biāo)指令。(1)當(dāng)緩沖區(qū)中發(fā)現(xiàn)無條件分支時(shí),獲得多少個(gè)時(shí)鐘周期的收益?(2)假定BTB緩存命中率為90%,無條件分支頻率為5%,緩沖區(qū)缺失的代價(jià)為2個(gè)時(shí)鐘周期。這樣可以獲得多少收益?解答:(1)由于無條件分支存儲(chǔ)是分支目標(biāo)指令,decode段直接執(zhí)行分支目標(biāo)指令,這減少一次分支目標(biāo)指令的取值操作,因此獲得1個(gè)時(shí)鐘周期的收益。(2)5%*(90%*(-1)+10%*2)=-0.035,獲得0.035的收益。3.10假定分支目標(biāo)緩沖的命中率為90%,程序中無條件轉(zhuǎn)移指令為5%,其它指令的CPI為1。假設(shè)分支目標(biāo)緩沖包含分支目標(biāo)指令,允許無條件轉(zhuǎn)移指令進(jìn)入分支目標(biāo)緩沖,則CPI是多少。假定原來的CPI為1.1。解答:(1)原來不采用分支目標(biāo)緩沖器BTB情況下實(shí)際CPI=理想CPI+各種停頓拍數(shù)=1+5%×L=1.1解出L=2(2)現(xiàn)在采用分支目標(biāo)緩沖器BTB情況下實(shí)際CPI=理想CPI+各種停頓拍數(shù)=1+5%×10%×2=1.01第四章指令級(jí)并行表4.1練習(xí)4.1至練習(xí)4.5的代碼與延遲超過一個(gè)時(shí)鐘周期的延遲額外操作延遲Loop:fldf2,0(Rx)存儲(chǔ)器fld+3I0:fmul.df2,f0,f2存儲(chǔ)器SD+1I1:fdiv.df8,f2,f0整數(shù)ADD,SUB+0I2:fldf4,0(Ry)分支+1I3:fadd.df4,f0,f4fadd.d+2I4:fadd.df10,f8,f2fmul.d+4I5:fsdf4,0(Ry)fdiv.d+10I6:addiRx,Rx,8I7:addiRy,Ry,8I8:subx20,x4,RxI9:bnzx20,Loop4.1某CPU必須串行執(zhí)行指令,也就是在前條指令執(zhí)行完之前,不會(huì)開始執(zhí)行新指令,請(qǐng)給出表4.11中代碼序列執(zhí)行一次循環(huán)迭代的時(shí)鐘周期。假定每個(gè)周期只能發(fā)射一條指令,但執(zhí)行過程不會(huì)因?yàn)槿鄙傧乱粭l指令而停頓,忽略指令提取與譯碼過程。假定該分支被成功,并且存在一個(gè)時(shí)鐘周期的分支延遲槽。解答:每次循環(huán)執(zhí)行時(shí)間作為基準(zhǔn)性能(以周期為單位,每次循環(huán)迭代),如果在前一條指令的執(zhí)行完成之前不能啟動(dòng)新指令的執(zhí)行。每條指令都必須執(zhí)行,需要一個(gè)時(shí)鐘周期。在該基數(shù)上(11),加上額外的延遲周期(3+4+10+3+2+2+1+1=26),再增加分支延遲(1),合計(jì)38時(shí)鐘周期。4.2如果流水線內(nèi)部具有多個(gè)功能相同單元,不會(huì)因?yàn)槟硞€(gè)功能單元被占用就停頓,僅在檢測(cè)到真數(shù)據(jù)相關(guān)時(shí),才會(huì)產(chǎn)生停頓。但代碼是順序執(zhí)行,如果前一條指令停頓,后續(xù)指令也會(huì)停頓。一個(gè)時(shí)鐘周期指令的延遲為1+0,也就是不需要額外的等待狀態(tài)。那么延遲1+1就意味著1個(gè)停頓周期,延遲1+N有N個(gè)額外停頓周期。4.1表中代碼順序執(zhí)行需要多少個(gè)時(shí)鐘周期?解答:(1)4.1代碼順序執(zhí)行需要23時(shí)鐘周期。延遲時(shí)間1fldf2,0(Rx)1+32<Stallforfld>3<Stallforfld>4<Stallforfld>5fmul.df2,f0,f21+46fdiv.df8,f2,f01+107fldf4,0(Ry)1+38<Stallforfld>9<Stallforfld>10<Stallforfld>11fadd.df4,f0,f41+212<Stallforfdiv>13<Stallforfdiv>14<Stallforfdiv>15<Stallforfdiv>16<Stallforfdiv>17fadd.df10,f8,f21+218fsdf4,0(Ry)1+119addiRx,Rx,8120addiRy,Ry,8121subx20,x4,Rx122bnzx20,Loop1+14.3考慮一種處理器具有兩個(gè)執(zhí)行流水線,每條流水線可以在每個(gè)時(shí)鐘周期開始執(zhí)行一條指令,前端有足夠取指/譯碼帶寬,保證連續(xù)發(fā)射。假定重定向硬件能夠在兩條流水線之間把結(jié)果從一個(gè)執(zhí)行單元轉(zhuǎn)發(fā)給另一個(gè)單元。每個(gè)流水線有獨(dú)立浮點(diǎn)多功能單元,意味著具有兩個(gè)能夠并行執(zhí)行的兩個(gè)浮點(diǎn)操作。流水線執(zhí)行停頓的唯一原因來源于真正數(shù)據(jù)相關(guān)?,F(xiàn)在順序執(zhí)行這一循環(huán)代碼需要多少個(gè)周期?解答:答案是(21)22。fld像以前一樣首先執(zhí)行,fdiv.d必須等待四個(gè)額外的延遲周期才能執(zhí)行。fdiv.d之后是fmul.d,它可以與fdiv.d一起在第二個(gè)流水線中運(yùn)行,因?yàn)樗鼈冎g沒有依賴關(guān)系。請(qǐng)注意,它們都需要相同的輸入f2,并且它們都必須等待f2準(zhǔn)備就緒,但它們之間沒有關(guān)聯(lián)。fmul.d后面的fld不依賴于fdiv.d和fmul.d,本題是一個(gè)雙流水線機(jī)器,fld在fdiv.d/fmul.d之后的循環(huán)中執(zhí)行。循環(huán)后部的循環(huán)控制指令也具有并發(fā)性,因?yàn)樗鼈儾灰蕾囉谌魏伍L(zhǎng)延遲指令。流水線1流水線21fldf2,0(Rx)2<Stallforfld>3<Stallforfld>4<Stallforfld>5fmul.df2,f0,f2<Stallformul>6<Stallformul>7<Stallformul>8<Stallformul>9fdiv.df8,f2,f0fldf4,0(Ry)10<Stallforfdiv><Stallforfld>11<Stallforfdiv><Stallforfld>12<Stallforfdiv><Stallforfld>13<Stallforfdiv>fadd.df4,f0,f41+214<Stallforfdiv><Stallforadd>15<Stallforfdiv><Stallforadd>16<Stallforfdiv>fsdf4,0(Ry)1+117<Stallforfdiv>addiRx,Rx,818<Stallforfdiv>addiRy,Ry,819<Stallforfdiv>subx20,x4,Rx20fadd.df10,f8,f2bnzx20,Loop21<Stallforadd><Stallforbnz>22<Stallforadd>4.4使用上述雙流水線機(jī)器靜態(tài)調(diào)度表4.11中代碼,是否能夠得到更短的執(zhí)行時(shí)間?請(qǐng)給出調(diào)度后的代碼執(zhí)行示意圖。解答:下表展示一種重新排序指令以提高性能的可能方法。這個(gè)重新排序的代碼需要的周期數(shù)是21。流水線1流水線21fldf2,0(Rx)fldf4,0(Ry)2addiRx,Rx,8<Stallforfld>3<Stallforfld><Stallforfld>4<Stallforfld><Stallforfld>5fmul.df2,f0,f2fadd.df4,f0,f46<Stallformul><Stallforadd>7<Stallformul><Stallforadd>8<Stallformul>fsdf4,0(Ry)9<Stallformul>addiRy,Ry,810fdiv.df8,f2,f011subx20,x4,Rx12<Stallforfdiv>13<Stallforfdiv>14<Stallforfdiv>15<Stallforfdiv>16<Stallforfdiv>17<Stallforfdiv>18<Stallforfdiv>19<Stallforfdiv>20bnzx20,Loop21fadd.df10,f8,f24.5從硬件潛力角度來看,循環(huán)展開是能夠提高雙流水線的利用率。請(qǐng)展開表4.11代碼兩次迭代,然后通過重新排序代碼,降低時(shí)鐘浪費(fèi)。請(qǐng)寫出調(diào)度后的代碼序列,并給出執(zhí)行時(shí)間解答:(1)下表所示的代碼中手動(dòng)展開循環(huán)的兩次迭代,執(zhí)行時(shí)間為21次。pipelinepipeline1 2 3 <stallduetoLD4<stallduetoLD<stallduetoLD5fmul.dfadd.d6fmul.dfadd.d7<stallduetoMULD<stallduetoADDD8<stallduetoMULD9<stallduetoMULDfdiv.dfdiv.d<stallduetoDIVD <stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD <stallduetoDIVDfadd.dfadd.d4.6超長(zhǎng)指令字(VLIW)設(shè)計(jì)者有幾個(gè)基本關(guān)于寄存器使用的體系結(jié)構(gòu)規(guī)則選擇。假設(shè)VLIW是采用自排水流水線設(shè)計(jì):一旦操作執(zhí)行,其結(jié)果將在最多L個(gè)周期后出現(xiàn)在目標(biāo)寄存器中(其中L是操作的延遲)??紤]表4.12所示,如果載入操作有1+2周期延遲,如果展開此循環(huán)一次,并展示VLIW如何能夠每個(gè)周期兩次加載和兩次加法可以使用最少數(shù)量的寄存器,請(qǐng)給出代碼調(diào)度方案實(shí)現(xiàn)沒有任何流水線中斷或停頓。表4.2一段VLIW代碼包含兩個(gè)加、載入和暫停Loop:lwx1,0(x2);lwx3,8(x2)<stall><stall>addix10,x1,1;addix11,x3,1swx1,0(x2);swx3,8(x2)addix2,x2,8subx4,x3,x2bnzx4,Loop解答:周期數(shù)ALU0ALU0Ld/stLd/st分支1addix11,x3,2lwx4,0(x0)2addix2,x2,16addix11,x0,2lwx4,0(x0)lwx5,8(x1)3lwx5,8(x1)4addix10,x4,#15addix10,x4,#1swx7,0(x6)swx9,8(x8)6subx4,x3,x2swx7,0(x6)swx9,8(x8)7bnzx4,Loop4.6假設(shè)一個(gè)五段單流水線結(jié)構(gòu)(IF,ID、EX、MEM、WB)。除了LW、SW和分支,所有操作都是1個(gè)周期,LW和SW們是1+2周期,分支指令是1+1周期。沒有重定向硬件。給出循環(huán)中每個(gè)時(shí)鐘的指令執(zhí)行情況(1)每次循環(huán)迭代有多少時(shí)鐘周期的分支開銷?分支指令實(shí)際造成的延遲(從分支ID段開始到取得正確指令時(shí)鐘周期延遲)是多少?(2)假設(shè)采用一個(gè)靜態(tài)分支預(yù)測(cè)器,能夠在解碼階段識(shí)別一個(gè)后向分支(確定分支方向),也就是預(yù)測(cè)分支成功。分支指令實(shí)際造成的延遲是多少?(3)假設(shè)采用一個(gè)動(dòng)態(tài)分支預(yù)測(cè)器(IF段就可以確定分支方向和分支目標(biāo)地址)。分支指令實(shí)際造成的延遲是多少?表4.12循環(huán)代碼Loop:lwx1,0(x2)addix1,x1,1swx1,0(x2)addix2,x2,4subx4,x3,x2bnzx4,Loop解答:(1)循環(huán)執(zhí)行時(shí)間為16個(gè)時(shí)鐘周期。分支產(chǎn)生的延遲為4個(gè)周期。沒有重定向路徑,sub結(jié)果需要在W階段才能獲得。循環(huán)長(zhǎng)度12345678918lwFDEM––WaddiFD––EMWswFDEM––WaddiFDEMWsubFDEMW–bnzx4,FDE––MWlwFD預(yù)測(cè)分支不成功F動(dòng)態(tài)預(yù)測(cè)成功F(2)使用靜態(tài)預(yù)測(cè)器延遲3個(gè)周期。預(yù)測(cè)分支成功不需要等待Sub結(jié)果,僅需要計(jì)算分支目標(biāo)地址EX,就可在下一時(shí)鐘取值。這導(dǎo)致2個(gè)周期延遲。(3)正確的動(dòng)態(tài)預(yù)測(cè)延遲1個(gè)時(shí)鐘周期,實(shí)際沒有損失周期,。動(dòng)態(tài)分支預(yù)測(cè)器會(huì)記住,當(dāng)過去獲取分支指令時(shí),它最終變成了一個(gè)分支,并采用了這個(gè)分支。因此,“預(yù)測(cè)采取”將在提取分支的同一周期內(nèi)發(fā)生,之后的下一次提取將到達(dá)假定的目標(biāo)。4.7下面是DAXPY循環(huán)(雙精度aX加Y),它是高斯消元法的核心運(yùn)算。下面的代碼實(shí)現(xiàn)DAXPY運(yùn)算Y=aX+Y,向量長(zhǎng)度為100。最初,x1被設(shè)置為數(shù)組X的基地址,x2被設(shè)置為Y的基地址:表4.13DAXPY循環(huán)Loop:fldF2,0(x1);(F2)=X(i)fmul.dF4,F2,F0;(F4)=a*X(i)fldF6,0(x2);(F6)=Y(i)fadd.dF6,F4,F6;(F6)=a*X(i)+Y(i)fsdF6,0(x2);Y(i)=a*X(i)+Y(i)addix1,x1,#8;incrementXindexaddix2,x2,#8;incrementYindexsltux3,x1,x4;test:continueloop?bnezx3,foo;loopifneeded假定功能單元的延遲如下表所示。假定在ID階段解決一個(gè)延遲為1周期的分支。假定結(jié)果被完全旁路。生成結(jié)果的指令使用結(jié)果的指令延遲(時(shí)鐘周期)浮點(diǎn)乘浮點(diǎn)算術(shù)運(yùn)算6浮點(diǎn)加浮點(diǎn)算術(shù)運(yùn)算4浮點(diǎn)乘浮點(diǎn)存儲(chǔ)5浮點(diǎn)加浮點(diǎn)存儲(chǔ)4整數(shù)運(yùn)算和所有載入任何指令2(1)假定一個(gè)單發(fā)射流水線。請(qǐng)給出未調(diào)度以及對(duì)浮點(diǎn)運(yùn)算、分支延遲進(jìn)行靜態(tài)調(diào)度之后,該單個(gè)循環(huán)執(zhí)行周期數(shù),包含所有停頓或空閑時(shí)間周期。在未調(diào)度和已調(diào)度情況下,結(jié)果向量Y中每個(gè)元素的執(zhí)行時(shí)間為多少個(gè)時(shí)鐘周期?(2)假定一個(gè)單發(fā)射流水線。根據(jù)需要對(duì)循環(huán)進(jìn)行任意次展開,使調(diào)度中不存在任何停頓,消除循環(huán)開銷指令。必須將此循環(huán)展開多少次?給出指令調(diào)度。結(jié)果中每個(gè)元素的執(zhí)行時(shí)間為多少?(3)假定一個(gè)VLIW處理器,可以同時(shí)進(jìn)行兩條訪存流水線、兩條浮點(diǎn)流水線和整型/分支流水線,也也就是一條指令最多包含5個(gè)操作。首先將該循環(huán)展開6次,并對(duì)其進(jìn)行調(diào)度,使其沒有任何停頓(所謂停頓就是完全空閑的發(fā)射周期),消除循環(huán)開銷指令。其次將循環(huán)展開10次,忽略分支延遲槽。給出兩個(gè)調(diào)度表。對(duì)于每個(gè)調(diào)度而言,結(jié)果向量中每個(gè)元素的執(zhí)行時(shí)間為多少?每個(gè)調(diào)度中,所使用的操作槽占多大比例??jī)煞N調(diào)度中的代碼相差多少??jī)煞N調(diào)度的總共需要多少寄存器?解答:(1)每個(gè)元素執(zhí)行時(shí)間為16個(gè)時(shí)鐘周期;調(diào)度之后的代碼為10個(gè)周期。ClockUnscheduledScheduled1 2 3 4fmul.dfmul.d5 6 7fadd.dfadd.d89bnez f6,- (2)循環(huán)展開3次能夠消除所有停頓ClockScheduled1 2 3 4fmul.d5 6 7fmul.d8 9 fmul.dfadd.d fadd.d fadd.d f6,- f10,- f14,-(3)循環(huán)展開6次能夠消除所有停頓referencereferenceIntegeroperation/1fldf1,fldf2,2fldf3,fldf4,3fldf5,fldf6,fmul.dfmul.d4fldf7,fldf8,fmul.dfmul.d5fldf9,fldf10,fmul.dfmul.d6fldf1132(x2)fldf12,40(x2)7addix1,x1,488addix2,x2,489fadd.df7,f7,f1fadd.df8,f8,f210fadd.df9,f9,f3fadd.df10,f10,f411fadd.df11,f11,f5fadd.df12,f12,f612sltux3,x1,x413fsdf7,-48(x2)fsdf8,-40(x2)14fsdf9,-32(x2)fsdf10,-24(x2)15fsdf11-16(x2)fsdf12,-8(x2)bnezx3,foo34個(gè)操作15個(gè)循環(huán),每次時(shí)鐘周期為2.67,VLIW效率為34操作/75slots=45.3%。這次調(diào)度需要12個(gè)浮點(diǎn)寄存器循環(huán)展開10次能夠消除所有停頓:fPfPIntegerreferencereference121fldf1,fldf2,2fldf3,fldf4,3fldf5,fldf6,fmul.dfmul.d4fldf7,fldf8,fmul.dfmul.d5fldf9,fldf10,fmul.dfmul.d6fldf11,fldf12,fmul.dfmul.d7fldf13,fldf14,fmul.daddi8fldf15,fldf16,addi9fldf17,fldf18,fadd.df11,fadd.df12,f12,fldf19,fldf20,fadd.df13,fadd.df14,f14,fadd.df15,fadd.df16,f16,fadd.df17,fadd.df18,f18,DSLTUfsdf11,-fsdf12,-fadd.df19,fadd.df20,f20,fsdf13,-fsdf14,-fsdf15-fsdf16,-fsdf17-fsdf18,-fsdf19-fsdf20,- bnezx3,54個(gè)操作消耗17個(gè)時(shí)鐘周期,每個(gè)時(shí)鐘3.18操作。VLIW效率為54操作/85slots=63.5%。4.8使用Tomasulo算法執(zhí)行習(xí)題4.8中的循環(huán)。功能單元延遲如表4.15所示。功能單元類型EX中的循環(huán)數(shù)功能單元數(shù)保留站數(shù)整數(shù)115浮點(diǎn)加法器1013浮點(diǎn)乘法器1512作出如下假設(shè):□功能單元未實(shí)現(xiàn)流水化;□功能單元之間不存在重定向,結(jié)果由公共數(shù)據(jù)總線(CDB)傳送;□執(zhí)行(EX)段既進(jìn)行有效地址計(jì)算,又進(jìn)行存儲(chǔ)器訪問執(zhí)行載入和存儲(chǔ)指令。因此,這個(gè)流水線為IF/ID/IS/EX/WB;□載入指令需要一個(gè)時(shí)鐘周期;□發(fā)射(IS)和寫回(WB)結(jié)果段各需要一個(gè)時(shí)鐘周期;□共有5個(gè)載入緩沖區(qū)槽和5個(gè)存儲(chǔ)緩沖區(qū)槽;□假定“等于/不等于0時(shí)轉(zhuǎn)移”(BNEZ)指令需要一個(gè)時(shí)鐘周期;(1)單發(fā)射TomasuloMIPS流水線的延遲如上表所示。對(duì)于該循環(huán)的3個(gè)迭代,給出每個(gè)指令的停頓周期數(shù)以及每個(gè)指令在哪個(gè)時(shí)鐘周期中開始執(zhí)行(即,進(jìn)入它的第一個(gè)EX周期)。每個(gè)循環(huán)迭代需要多少個(gè)時(shí)鐘周期?以表格方式寫出答案,表中應(yīng)當(dāng)具有以下列標(biāo)頭:□迭代(循環(huán)迭代數(shù));□指令;□發(fā)射(發(fā)射指令的周期);□執(zhí)行(執(zhí)行指令的周期);□存儲(chǔ)器訪問(訪問存儲(chǔ)器的周期);□寫CDB(將結(jié)果寫到CDB的周期);□注釋(對(duì)指令正在等待的事件的說明)。在表中給出這個(gè)循環(huán)的3次迭代,可以忽略第一條指令。(2)重復(fù)(1)部分,但這次假設(shè)有雙發(fā)射Tomasulo算法和全流水線浮點(diǎn)單元(FPU)解答:(1)IssuesWriteCDB 1fld12 First1fmul.d24Waitfor MultrsMultuse1fld34 Ldbuf1fadd.d4Waitfor AddrsAdduse1fsd5WaitforF61addi6781addi7891sltu891bnez9Waitfor2fld WaitforLdbuf2fmul.dF4,F2,F011141934WaitforF2MultbusyMultrs[12–19]Multuse[20–33]2fldF6,0(x2)121314 Ldbuf[13]2fadd.dF6,F4,F61335WaitforF445 Addrs[14–35]Adduse[36–44]2fsdF6,0(x2)1446WaitforF6Stbuf[15–46]2addix1,x1,#81516172addix2,x2,#81617182sltux3,x1,x41718202bnezx3,foo1820Waitforx33fldF2,0(x1)192122 WaitforbnezLdbuf[20–21]MultrsMultuse3fld Ldbuf3fadd.dWaitfor AddrsAdduse3fsdWaitforF63addi3addi3sltu3bnezWaitfor(2)IssuesWriteCDB 1fld1231fmul.d14Waitfor MultrsMultuse1fld23 Ldbuf1fadd.d2Waitfor AddrsAdduse1fsd3WaitforF6Stbuf1addi3451addi4561sltu46 INTINTrs1bnez57INTbusyINTrs[6–7]2fld68 Waitfor2fmul.d6Waitfor MultrsMultuse2fld79 INTINTrs2fadd.d7Waitfor AddxSAdduse2fsd8Waitfor2addi8 INTINTrs2addi9 INTINTrs2sltu9 INTINTrs2bnezWaitfor3fld Waitfor3fmul.dWaitfor MultrsMultuse3fld INTINTrs3fadd.dWaitfor AddrsAdduse3fsdWaitforINTrsfullin3addiINTrsfullandbusyINTrs[17]3addiINTrsfullandbusyINTrs[18]3sltuINTrs3bnezINTrs4.9某處理器采用基于全局分支歷史兩位飽和預(yù)測(cè)器PR(所有分支共享一個(gè)全局分支歷史預(yù)測(cè)器),其預(yù)測(cè)狀態(tài)變化如右圖所示。處理器執(zhí)行下述程序段,R1和R2的初始值分別為3和3。預(yù)測(cè)器PR的初始值為(10)。Project1:{SUBIR1,1+,R1……} X1: BNEQProject1Project2:{SUBIR2,1+,R2……} X2: BNEQProject2X3:假設(shè)代碼段Project1和Project2中沒有分支語句,并且不會(huì)修改R1和R2的值。請(qǐng)計(jì)算下述情況下,PR的值、預(yù)測(cè)和實(shí)際執(zhí)行分支的情況,完成填寫下表,并給出預(yù)測(cè)正確率。執(zhí)行狀態(tài)預(yù)測(cè)器PR值預(yù)測(cè)實(shí)際預(yù)測(cè)成功?初始R1=3R2=3(10)分支成功N/AN/AX1:R1=2X2:R2=3X1:R1=1X2:R2=3X1:R1=0X2:R2=3X2:R1=0X2:R2=2X2:R1=0X2:R2=1X2:R1=0X2:R2=0答:執(zhí)行狀態(tài)預(yù)測(cè)器PR值預(yù)測(cè)實(shí)際預(yù)測(cè)成功?初始R1=3R2=3(10)分支成功N/AN/AX1:R1=2X2:R2=310分支成功分支成功YX1:R1=1X2:R2=311分支成功分支成功YX1:R1=0X2:R2=311分支成功分支失敗NX2:R1=0X2:R2=210分支成功分支成功YX2:R1=0X2:R2=111分支成功分支成功YX2:R1=0X2:R2=011分支成功分支失敗N預(yù)測(cè)正確率為66.6%4.10在下面Tomasulo結(jié)構(gòu)上執(zhí)行指令,分別計(jì)算每條指令寫結(jié)果階段的時(shí)間(時(shí)鐘周期數(shù)),并畫出相應(yīng)的時(shí)空?qǐng)D。R1,R2,R3和F10具有初值。其中BNZ,DADDIU,L.D和S.D的執(zhí)行過程花費(fèi)為1時(shí)鐘周期,而SUB.D/ADD.D的為2個(gè)時(shí)鐘周期,MULT.D的為5個(gè)周期,而DIV.D的為10時(shí)鐘周期。 lw f1, 0(x1)lw f2, 0(x2)fadd.d f3, f1, f2fdiv.d f4, f1, f2fmult.d f5, f3,f10fsub.df6,f4,f10fsd f5, 0(x1)fsd f6, 0(x2)addi x1, x1, #8addi x2, x2, #8bnzx1,x3,Loop解答:12345678910111213141516171819lwf1,0(x1)ISCWlwf2,0(x2)ISCWfadd.df3, f1,f2InSECWfdiv.df4, f1,f2ISEEEEEEEEECWfmult.df5, f3,f10InnSEEEECWfsub.df6,f4,f10ISEEEEEEEECWfsdf5,0(x1)InnnnnnSCWfsdf6, 0(x2)InnnnnnnnSCWaddi x1, x1, #8ISCWaddi x2, x2, #8ISCWbnzx1,x3,LoopISCW第六章外存儲(chǔ)系統(tǒng)6.1對(duì)于磁盤而言,讀寫一個(gè)1MB數(shù)據(jù)的平均延遲時(shí)間是多少?假設(shè)此時(shí)磁盤空閑,這樣沒有排隊(duì)延遲;平均尋道時(shí)間是8ms,順序傳輸速度是200MB/s,轉(zhuǎn)速是5400RPM(每分鐘旋轉(zhuǎn)圈數(shù)),控制器的開銷是0.1ms。平均磁盤訪問時(shí)間=平均尋道時(shí)間+平均旋轉(zhuǎn)延遲+傳輸時(shí)間+控制器開銷=8ms+0.5/5400RPM+1000/200KB/ms+0.1ms=8ms+5.6ms+5ms+0.1ms=18.7ms6.2大規(guī)模數(shù)據(jù)中心的存儲(chǔ)集群中經(jīng)常使用三副本策略保存數(shù)據(jù)集,也就是每一個(gè)數(shù)據(jù)集分別有三份拷貝存儲(chǔ)在三個(gè)獨(dú)立的節(jié)點(diǎn)上,而且這些節(jié)點(diǎn)連接到不同的交換機(jī)端口,三個(gè)副本不在同一個(gè)機(jī)柜內(nèi)。假設(shè)每個(gè)節(jié)點(diǎn)的可用性為99%(綜合節(jié)點(diǎn)、網(wǎng)絡(luò)等因素)。假設(shè)每個(gè)節(jié)點(diǎn)失效是完全獨(dú)立的。(1)請(qǐng)問3個(gè)副本節(jié)點(diǎn),數(shù)據(jù)不可用性為多少?(2)如果采用糾刪碼機(jī)制,所有數(shù)據(jù)以分條方式存儲(chǔ),一個(gè)數(shù)據(jù)分條包含5個(gè)數(shù)據(jù)塊,分布在5個(gè)獨(dú)立存儲(chǔ)節(jié)點(diǎn)中,在一個(gè)數(shù)據(jù)條帶中能夠最多容忍2個(gè)節(jié)點(diǎn)上相應(yīng)數(shù)據(jù)塊錯(cuò)誤或者是不可訪問,請(qǐng)計(jì)算每個(gè)數(shù)據(jù)條帶的不可用性是多少?解答:(1)S節(jié)點(diǎn)可用性99%S^2=0.98S^3=0.97S^4=0.961S^5=0.951A=3S+2(1–S)S+(1–S)2S=0.99999Triplicatedavail.=3S–3(S)2–(S)3=0.99999Unavailability =(1–S)3=0.01%=10-6(2)A=(S)5+5(1–S)(S)4+10(1–S)2(S)3=0.951+5*0.01*0.961+10*0.0001*0.965=0.99998U=1-0.99998=2*10^-66.3采用RAID01方式組織6塊磁盤,單個(gè)磁盤可靠性為0.95,請(qǐng)分析系統(tǒng)可靠性。(精確到小數(shù)點(diǎn)后4位)。解答:系統(tǒng)可靠性=1-(1-0.953)2=1-0.1426252=1-0.0203=0.986.4一個(gè)廉價(jià)磁盤冗余陣列由4個(gè)磁盤配置為RAID10級(jí),其結(jié)構(gòu)如圖6.12所示,采用雙控制器(RC)結(jié)構(gòu),任何一個(gè)陣列控制器失效不影響系統(tǒng)工作。已知各部分可靠度為:陣列控制器R1=0.9,通道適配器R2=0.95,磁盤R3=0.95。畫出系統(tǒng)可靠性框圖;(1)寫出系統(tǒng)可靠性R的表達(dá)式;(2)計(jì)算R的數(shù)值(保留小數(shù)點(diǎn)后兩位)圖6.21RAID10結(jié)構(gòu)圖解答:(1)可靠性模型如圖所示:(2)系統(tǒng)可靠度R=(1—(1—R1)2)×R2×[1—(1—R3)2]2(3)R=[1—(1—R1)2]×R2×[1—(1—R3)2]2=0.99×0.95×[1—(1—0.95)2]2=0.946.5有1個(gè)由6塊磁盤組成的陣列系統(tǒng),若每塊盤的容量為10TB,每塊盤的隨機(jī)讀寫帶寬為50IOps,則:(1)采用RAID4方式組織時(shí),其有效容量(可用于存放數(shù)據(jù)而非校驗(yàn)的最大容量)為多少TB?采用RAID6方式組織時(shí)呢?(4分)(2)當(dāng)采用RAID4和RAID5方式組織時(shí),若上層負(fù)載為100%隨機(jī)寫,且所有寫請(qǐng)求在整個(gè)地址空間是均勻分布的,寫請(qǐng)求大小與RAID分塊大小一致且對(duì)齊,試計(jì)算系統(tǒng)最大吞吐率(每秒處理的上層IO數(shù),IO是串行執(zhí)行)。(6分)(1)RAID4容量=10*(6-1)=50TBRAID6容量=10*(6-2)=40TB(2)RAID4,更新寫模式:每一個(gè)上層寫操作,在校驗(yàn)盤以及數(shù)據(jù)所在數(shù)據(jù)盤上引起1r1w。此時(shí),校驗(yàn)盤是瓶頸,最大吞吐率=50/2=25IOPS。重建寫模式:每一個(gè)上層寫操作,在校驗(yàn)盤以及數(shù)據(jù)所在數(shù)據(jù)盤上引起1w,在其他數(shù)據(jù)盤上引起1r。此時(shí),所有盤負(fù)載均衡,最大吞吐率=50/1=50IOPS。因此,最優(yōu)方法是做重建寫,最大吞吐率為50IOPS。RAID5,RAID5負(fù)載已均衡,因此,應(yīng)采用IO數(shù)更少的更新寫(4IO)而不是重建寫(6IO)。故,最大吞吐率=50*6/4=75IOPS。6.6某服務(wù)器的存儲(chǔ)子系統(tǒng)包括I/O控制器(帶寬為3.0GB/s)和5個(gè)SATA3.0控制器(帶寬為600MB/s),五個(gè)固態(tài)盤構(gòu)成RAID5模式,分條大小為512KB。固態(tài)盤寫64KB的平均延遲為1毫秒,讀64KB的平均延遲為0.5毫秒,I/O控制器根據(jù)RAID5算法把用戶I/O請(qǐng)求分解到每個(gè)固態(tài)盤上,然后通過SATA3.0總線將每個(gè)請(qǐng)求發(fā)送到固態(tài)盤接口。假設(shè)I/O控制器延遲和SATA3.0總線延遲忽略不計(jì)。CPU向存儲(chǔ)子系統(tǒng)每秒發(fā)出200個(gè)512KB的讀請(qǐng)求,達(dá)到I/O控制器的I/O請(qǐng)求呈泊松分布,假設(shè)每個(gè)固態(tài)盤延遲相同:(1)請(qǐng)計(jì)算512KB讀請(qǐng)求的服務(wù)時(shí)間;(2)請(qǐng)計(jì)算上述情況下的讀請(qǐng)求平均響應(yīng)時(shí)間。解答:(1) 每個(gè)盤數(shù)據(jù)量為512/4=128KB,固態(tài)盤128KB讀延遲為1毫秒,則512KB讀服務(wù)時(shí)間為2ms。(2) 512KB讀服務(wù)時(shí)間為1ms,通過服務(wù)率為1000,使用率為0.2平均響應(yīng)時(shí)間為(0.2/0.8+1)*1=1.25ms第七章數(shù)據(jù)級(jí)并行7.1考慮以下代碼,它將兩個(gè)包含單精度復(fù)數(shù)值的向量相乘:for(i=0;i<300;i++){c_re[i]=a_re[i]*b_re[i]-a_im[i]*b_im[i];c_im[i]=a_re[i]*b_im[i]+a_im[i]*b_re[i];}假定處理器的運(yùn)行頻率為700MHz,最大向量長(zhǎng)度為64。載入/存儲(chǔ)單元的啟動(dòng)開銷為15個(gè)時(shí)鐘周期,乘法單元為8個(gè)時(shí)鐘周期,加法單元為5個(gè)時(shí)鐘周期。(1)此內(nèi)核的運(yùn)算強(qiáng)度為多少?給出理由。(2)將此循環(huán)轉(zhuǎn)換為使用分段開采的RV64V匯編代碼。(3)假定采用鏈接和單一存儲(chǔ)器流水線,需要多少次鐘鳴?每個(gè)結(jié)果值需要多少個(gè)時(shí)鐘周期(包括啟動(dòng)開銷在內(nèi))?(4)如果向量序列被鏈接在一起,每個(gè)復(fù)數(shù)結(jié)果值需要多少個(gè)時(shí)鐘周期(包含開銷)?(5)現(xiàn)在假定處理器有3條存儲(chǔ)器流水線和鏈接。如果該循環(huán)的訪問過程中沒有組沖突,每個(gè)結(jié)果需要多少個(gè)時(shí)鐘周期?解答:(1)這個(gè)代碼每6個(gè)浮點(diǎn)操作需要讀4個(gè)浮點(diǎn)數(shù)、寫兩個(gè)浮點(diǎn)數(shù),那么計(jì)算密度為6/6=1(2)x1,#initializeloop:v1,#loadv3,#loadv5,#v2,#loadv4,#loadv6,v2,#v5,v5,#a+re*b_re-v5,#storev5,v1,#v6,v2,#v5,v5,#a+re*b_im+v5,#storex1,0,#checkiffirstx1,x1,#firstiteration,incrementbyj#guaranteednextelse:x1,x1,#notfirstiteration,incrementbyskip:x1,1200,#next(3)六次鐘鳴 vmul#loadb_im, #subtractandstorec #a_re*b_im,loadnexta_re #a_im*b_re,loadnextb_re #addandstore6(4)每次迭代的總時(shí)鐘周期=6鐘鳴*64元素+15周期(load/store)*6+8周期(乘法)*4+5周期(add/substract)*2=516周期,每個(gè)結(jié)果=516/128=4(5)增加load/store不會(huì)提升性能。1. #2.vmul #a_im*b_im3.vsubvs #su

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論