流水線沖突
流水線沖突:由于相關(guān)等原因的存在呐萌,使得指令流中的嚇一跳指令不能在指定的時(shí)鐘周期執(zhí)行。
分類(lèi)
? ? 1. 結(jié)構(gòu)沖突:因硬件資源滿足不了指令重疊執(zhí)行的要求而發(fā)生的沖突错沽。
? ? 2. 數(shù)據(jù)沖突:當(dāng)指令在流水線中重疊執(zhí)行時(shí)簿晓,因需要用到前面指令的執(zhí)行結(jié)果而發(fā)生的重發(fā)。
? ? 3. 控制沖突:流水線遇到分支指令和其他會(huì)改變PC值的指令所引起的沖突千埃。
解決流水線沖突的基本方法是暫停部分指令執(zhí)行憔儿。
結(jié)構(gòu)沖突:某種指令組合因?yàn)橘Y源沖突而不能正常執(zhí)行
常見(jiàn)的導(dǎo)致結(jié)構(gòu)沖突的原因:1. 功能部件不是完全流水。2.資源份數(shù)不夠放可。
? ? * 一般解決方法:
????????① 通過(guò)拉開(kāi)兩條沖突指令在流水線之間的距離來(lái)避免沖突的發(fā)生的谒臼。
????????② 通過(guò)設(shè)置相互獨(dú)立的存儲(chǔ)器(分別存儲(chǔ)指令和數(shù)據(jù))
????????原理:通過(guò)增加資源數(shù)量,來(lái)避免訪同一資源導(dǎo)致的沖突耀里。
數(shù)據(jù)沖突:當(dāng)相關(guān)的指令靠得足夠近時(shí)-重疊執(zhí)行蜈缤、重新排序會(huì)導(dǎo)致指令的讀寫(xiě)操作數(shù)的順序。
可分為三個(gè)子類(lèi):寫(xiě)后讀沖突备韧、寫(xiě)后寫(xiě)沖突劫樟、讀后寫(xiě)沖突
讀后寫(xiě)沖突:
而對(duì)于寫(xiě)后寫(xiě)沖突、讀后寫(xiě)沖突
可用反相關(guān)與輸出相關(guān)的解決方法:換名技術(shù)织堂,來(lái)避免這兩種相關(guān)的出現(xiàn)叠艳,也就能避免讀后寫(xiě)、寫(xiě)后寫(xiě)沖突的發(fā)生易阳。
著重解決讀后寫(xiě)
定向技術(shù)是一種緩解數(shù)據(jù)沖突(介紹沖突引起的停頓時(shí)間)的典型方法附较。
但定向技術(shù)并不能解決所有數(shù)據(jù)沖突。
定向:是基于硬件的運(yùn)行時(shí)解決方案潦俺。
指令調(diào)度:通過(guò)讓編譯器重新組織指令順序來(lái)消除沖突拒课。
定向技術(shù)的關(guān)鍵思想是在計(jì)算結(jié)構(gòu)尚未出來(lái)之前徐勃,后面等待使用該結(jié)果的指令并不真正立即需要該計(jì)算結(jié)果。如果能夠?qū)⒃撚?jì)算結(jié)果從其產(chǎn)生的地方直接送到其他指令需要它的地方早像。這樣僻肖,就可以避免停頓。
控制沖突:由分支指令引起的指令延遲卢鹦。
? ? · 最簡(jiǎn)單的解決方法:凍結(jié)或排空流水線臀脏。
? ? · 控制沖突的改善 基于編譯器的軟件方法:① 總是預(yù)測(cè)分支失敗 ② 預(yù)測(cè)分支總是成功 ③ 延遲分支