999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向RISC-V內核的標記指令復算與糾錯機制的設計*

2020-12-07 09:19:10丁,郭
國防科技大學學報 2020年6期
關鍵詞:指令機制故障

鄧 丁,郭 陽

(國防科技大學 計算機學院, 湖南 長沙 410073)

據統計, 1971—1986年的16年期間,國外發射的39顆同步衛星總共出現故障1589次,其中1129次與空間輻射有關[1]。空間輻射對電子器件的影響可分為總劑量(Total Ionizing Dose,TID)效應和單粒子效應(Single Event Effect,SEE)。具體而言,單粒子效應又可細分為單粒子翻轉(Single Event Upset,SEU)、單粒子閂鎖(Single Event Latch,SEL)和單粒子燒毀(Single Event Burnout,SEB)三種子類。其中:后兩者均會導致載體器件發生不可逆轉的永久故障。而單粒子翻轉僅是由于晶體管在外界帶電粒子的轟擊下瞬時充放電,從而造成的邏輯狀態翻轉。一旦粒子轟擊結束,便可以自動恢復正常功能。也即,單粒子翻轉所引發的是一種瞬時故障。事實上,瞬時故障在所有引起計算機系統失效的故障中所占比重接近90%[2],是永久故障的100倍以上[3]。文獻[4]指出,單粒子翻轉是輻射效應的主要形式,在全部由宇宙輻射引發的故障中,55%是單粒子翻轉故障。

由計算機硬件故障所導致的錯誤可分為控制流錯誤和數據流錯誤。控制流錯誤主要發生在執行轉移指令時,而數據流錯誤主要是由于存儲或傳輸中的數據因干擾耦合等因素發生錯誤進而引起的系統異常。

針對控制流錯誤,2002年Standford大學CRC實驗室提出了基于軟件簽名的控制流檢查(Control Flow Checking by Software Signature, CFCSS)算法,有效地將分支故障導致系統錯誤的概率從33.7%降低為3.1%[5]。但是,CFCSS算法仍不能檢測到偽分支錯誤、基本塊內部控制流轉移錯誤。文獻[6]通過添加硬件看門狗來檢查程序的控制流錯誤。文獻[7]通過采用市場上常見的調試接口模塊能夠有效及時地檢測到控制流錯誤。

針對數據流錯誤,利用時間或空間上的冗余來驗證數據的有效性是一種行之有效的方法。N版本程序法(N-Version Programming, NVP)為目標功能設計了多種可能實現方式,從而保證至少有一種方式能夠正確地執行[8]。數據重表達法(Data Re-expression Algorithm, DRA)采用多種不同的方式表達同樣的數據,執行相同的程序,從而能夠檢查并恢復數據流錯誤。編譯器級容錯技術通過復制程序指令,在一定檢查點插入比較指令來判斷程序執行結果的正確與否,其典型的算法包括EDDI[9]、ED4I[10]、SWIFT[11]等。

文獻[12]將軟硬件方法結合在一起,僅用一個低端現場可編程門陣列(Field Programmable Gate Array, FPGA)便極大提高了處理器的容錯能力。文獻[13]從綜合階段入手優化數據通路對瞬時故障的容錯能力,將芯片的功耗降低了約48%。文獻[14]著重對專用于圖像處理和機器學習的分布式數據流處理系統進行了容錯設計。文獻[15]將數據流應用映射到多個虛擬處理器上,從而減小了容錯所需的總面積。

本文采用重復執行被標記指令的策略來檢測并糾正由單粒子翻轉效應引起的數據流瞬時故障。本文的主要創新與貢獻包括:

1)實現了一種可靈活標記復算指令的機制。該機制以較小的硬件開銷與性能降低為代價,能夠檢測出指定指令在執行期間是否發生數據流錯誤。

2)對于標記為復算的指令,實現了時間上的三模冗余糾錯機制。若第一次復算結果與初始結果不相等,將自動執行第二次復算,并根據少數服從多數的原則,對數據流錯誤進行糾正。

1 標記指令復算與糾錯機制

1.1 總體結構設計

單粒子翻轉故障是一種瞬時故障,其故障持續時間很短。因此通常假設單粒子翻轉故障發生的同時,錯誤也立即產生,即沒有故障延遲。又因單粒子翻轉故障觸發的時刻、位置都是隨機不可預測的,所以連續兩個不同時刻,在同一位置發生同一類型的瞬時故障的概率非常微小。鑒于此,本文提出在連續的指令周期里重復執行被標記的指令來檢測并糾正瞬時錯誤結果的容錯機制。

從宏觀上看,關于標記指令復算機制的改進主要集中在如圖1所示的深灰色方框中,關于標記指令糾錯機制的改進主要集中在如圖1所示的淺灰色方框中。糾錯的核心思想是:由編譯器對關鍵或易錯指令進行復算標記的賦值,并將復算標記一同存入指令存儲器中;復算標記與其所對應的指令一同流入處理器內核,最終一同發射給運算邏輯單元(Arithmetic Logical Unit, ALU);ALU部件根據所接收到的標記,由復算糾錯狀態機RCC_FSM生成反饋信號作用于itcm_ctrl和ifu兩個模塊,從而控制下一條指令是否流出。本文主要對以下兩種情況進行糾錯:①涉及寫寄存器文件的指令,包括load指令,以寄存器文件為目標地址的邏輯運算指令、算術運算指令等;②條件分支指令。對寄存器文件寫操作的糾錯主要由寄存器文件備份模塊Reg_bak來完成;對條件分支指令的糾錯主要由跳轉狀態位的備份模塊Bjp_bak來完成。Reg_bak模塊根據備份數據與復算數據的比較結果,控制寄存器文件的寫回模塊Wbck,進而決定是否對寄存器文件進行寫操作。Bjp_bak模塊根據備份跳轉位與復算跳轉位的比較結果,控制分支指令的跳轉模塊Isjp,進而決定是否沖刷掉已經推測預取到指令緩沖Ins_buf中的后續指令。

圖1 標記指令復算與糾錯機制結構框圖Fig.1 Architecture of the recomputation and correction mechanism for tagged instruction

1.2 標記指令復算機制的具體實現

在基于RISC-V指令集的開源內核“蜂鳥e203”[16]上實現該標記指令復算與糾錯機制,后文將以“蜂鳥e203”內核為例,詳細闡述該容錯機制的具體實現過程。

“蜂鳥e203”內核是一款超低功耗2級流水線處理器核,支持RISC-V指令集以及RV32I/E/A/M/C/F/D等指令子集的配置組合。其結構框架如圖2所示。私有的指令緊耦合存儲 (Instruction Tightly Coupled Memory, ITCM)與數據緊耦合存儲(Data Tightly Coupled Memory, DTCM)(未畫出)可在分離存儲指令與數據的同時提高性能。其中ITCM SRAM雖然主要用于存儲指令,但也可以用于存放數據并用load和store指令進行訪問。其電路實例化模塊是圖2中的u_e203_srams,位寬為64位,大小為64 KB。雖然RISC-V指令集里指令的最大寬度是32位,但為減小讀取功耗與延時,“蜂鳥e203”中的 itcm_ctrl模塊依然適時地從ITCM中讀出一整行的64位數據。為解決指令位寬不匹配的問題,“蜂鳥e203”里設計了ift2icb模塊。該模塊的主要功能是把讀出的64位指令分解成32位并暫存。由于“蜂鳥e203”是單發射、順序執行、順序提交的體系結構,而乘法、除法等多周期指令必然導致流水線的停滯,因此,itcm_ctrl的另一個功能是根據當前處理器所處的狀態,決定輸出指令來源于上一條正在執行的指令還是接受緩沖區(Ins_buf)中新的指令。由于RISC-V指令集是變長指令集(同時支持32位指令和16位指令),所以取指令部件ifetch需要對指令進行預譯碼,判斷當前32位指令數據是一條完整的32位指令還是兩條16位指令,抑或是上一條32位指令的低16位與下一條32位指令的高16位等。ifetch部件最終為執行部件u_e203_exu提供一個32位“指令束”ifu_o_ir。當待發射指令是32位指令時,ifu_o_ir的高16位來源于一個16位ifu_hi_ir觸發器中的新值,低16位來源于一個16位ifu_lo_ir觸發器中的新值。而當待發射指令是16位指令時,此時ifu_o_ir的真實有效指令只有低16位,其高16位數據此時是無關值。因此,ifu_o_ir的低16位來源于ifu_lo_ir觸發器的新值,而其高16位用ifu_hi_ir觸發器的舊值進行填充。上述整個階段是“蜂鳥e203”流水線的第一級,可歸納為“取指”,驅動數據主要是“指令流”。指令流在第一級流水線中經歷了“64位→32位→16位→32位”的變化。“蜂鳥e203”流水線的第二級可歸納為“執行”,主要負責指令的譯碼、執行、寫回、提交等功能,驅動數據主要是“數據流”。在本文所實現的容錯機制中,標記指令復算部分的改進主要在流水線第一級進行,而糾錯部分的改進主要在流水線第二級進行。

圖2中的陰影矩形與陰影連線分別表示了指令復算標記所存儲的位置與傳輸的路徑。本文為每16位指令數據添加了1位初始標記init_tg。因此,“蜂鳥e203”第一級流水線里的指令流帶寬被相應調整成了“68位→34 位→17位→34位”。在所有指令需要暫存的地方,也都對其存儲部件進行了位寬擴展。比如:u_e203_srams從64位擴展為68位,Ins_buf從32位擴展成了34位,ifu_hi_ir/ifu_lo_ir從16位擴展成了17位。每1位復算標記與其所對應的16位指令數據同時進入每一個模塊,經歷相同的路徑,緩沖相同的時間,最后同時由ifetch模塊輸出給譯碼模塊Decode。

在ifetch部件最終輸出的32位“指令束”ifu_o_ir中包含2位指令復算標記rc_tg(tg_hi,tg_lo)。最終指令的復算情況與此二位復算標記的取值存在如表1所示的關系。

圖2 “蜂鳥e203”內核指令流示意Fig.2 Instruction flow path for “Humming bird e203”

表1 rc_tg取值與指令復算的關系

本文的指令初始標記init_tg是由編譯器根據目標指令在應用程序中的關鍵性與易錯性來賦值的。指令關鍵性越強,易錯性越高,則相應的init_tg就置為1,反之則置為0。所以對于32位指令不復算的情況,可以由編譯器在編譯時指定其兩段16位的指令數據所對應的init_tg=00。由表1可以觀察得到,無論是32位指令還是16位指令,需要進行復算時,其tg_lo=1;不需進行復算時,其tg_lo=0。所以只需根據tg_lo的值即可判定所有指令是否應該進行復算。當tg_lo=0時,按照常規步驟進行指令的譯碼、執行、寫回等操作后將發射下一條新的指令。當tg_lo=1時,當前指令提交之后,復算糾錯狀態機RCC_FSM將停止從ITCM中讀取新的指令,并保持ifu_o_ir所輸出的當前指令不變,重新再執行一次。實施該種機制的硬件只需兩個時鐘門控單元,如圖2所示的陰影橢圓CKG。

這種實現方式有以下三個優點:①相比于在編譯器級插入復算指令的做法,該方法只引入了1位的復算標記,極大節省了程序存儲空間;②相比于從ITCM中重新讀取一次復算指令的做法,避免了對程序計數器使用大量復雜的控制邏輯,同時也節省了將復算指令從ITCM讀到ift2icb再到經ifetch整合并輸出給執行部件所消耗的功耗與延時;③相比于引入一個額外的指令緩沖區來存儲已發射并需要復算的指令的做法,本文節省了一個至少32位寬的指令緩沖區面積。

1.3 標記指令糾錯機制的具體實現

如圖1所示,標記指令的糾錯機制主要由復算糾錯狀態機RCC_FSM和備份冗余模塊(Reg_bak與Bjp_bak)構成。

復算糾錯狀態機RCC_FSM的主要功能是:根據指令的標記情況、提交情況決定是否執行復算;根據原指令結果與第一次復算結果的比較情況,決定是否進行第二次復算。其狀態轉移如圖3所示。

圖3 RCC_FSM的狀態轉移Fig.3 State transition diagram of RCC_FSM

有3個信號決定RCC_FSM的狀態轉移:

1)Tag信號:Tag=1時,表示被標記指令需要進行復算;Tag=0時則不進行復算。

2)cmt_valid信號:cmt_valid=1時表示原指令已經執行完畢,下一周期將取下一條指令。

3)final_assure信號:final_assure=0時,表示復算結果與備份結果不相等。

默認情況下,RCC_FSM處于None狀態,即不進行復算狀態。在此種狀態下,只有當Tag=1(也即tg_lo=1)且cmt_valid=1時,才會跳轉到Repeat狀態。其他情況下,都將保持None狀態不變。

當正在進行復算或者已經進行過一次復算時,RCC_FSM則處于Repeat狀態。在此狀態下,只有兩種類型的輸入能夠使RCC_FSM繼續保持在Repeat狀態:

1)Tag=1且final_assure=0。此種情況的含義是:第一次復算已經完成并已與原始指令的結果進行了比較,發現連續兩次執行的同一條指令結果不相同,因此需要對該指令進行第二次復算,通過三模冗余的方式進行糾錯處理。

2)Tag=1且cmt_valid=0。此種情況常發生在被復算的指令是多周期指令時。

其他輸入模式下,狀態機都將跳回到None狀態。

Reg_bak與Bjp_bak模塊其實都是備份冗余模塊rddt的實例化,只是各自備份的數據位寬不同而已。rddt模塊主要由兩個數據緩存單元、兩個比較器、一個計數器、一個3路選擇器,一個或門構成。因為Reg_bak需要備份將要寫進寄存器文件的32位數據,所以其數據位寬是32位;而Bjp_bak只需要備份指示條件分支指令是否跳轉的1個狀態位,所以其數據寬度是1位。

備份冗余模塊運行過程的時序情況如圖4所示。若目標指令不是復算指令(即圖4所示的單周期指令Inst1),寫使能信號Wen=0、比較使能信號CP_en=0,備份冗余模塊并不對備份數據信號Din進行暫存和比較。計數使能信號Cnt_en一直等于0,因此提交確認信號cmt_assure一直為1。只要該指令執行完畢,便可立即提交。

圖4 rddt模塊時序圖Fig.4 Timing diagram of rddt

若目標指令是復算指令(即圖4所示的單周期指令Inst2),則:①在原指令執行期間,內部計數值Cnt=0,CP_en=0,因此cmt_assure=1。Wen=1,所以Din將原始指令執行的結果存入第一級緩沖中。②在第一次復算期間,CP_en由0變為1, Cnt此時由0變為1,因此cmt_assure=CP1。若CP1=1,說明復算結果與備份數據相等,從而可以順利提交該指令;若CP1=0,說明復算結果與備份數據不相等,需要繼續執行第二次復算。此時Wen=1,原始執行結果被傳到第二級緩存,第一次復算結果被存進第一級緩存。③在第二次復算期間,Cnt由1變為2。第二次復算的結果將分別與原始結果和第一次復算結果進行比較,并把CP1|CP2賦給cmt_assure。

2 理論分析

本文提出的標記指令復算糾錯機制主要是針對由宇宙輻射所導致的數據流瞬時錯誤。因此,對于某一個特定的指令,在不同的時刻發生單粒子翻轉效應的概率相等。對于某條執行周期為n的指令,假設其每個周期中數據流出錯的概率為p。

在不復算的情況下,該指令執行正確的概率:

Pr=(1-p)n

(1)

在不復算的情況下,該指令執行錯誤的概率:

Pf=1-Pr=1-(1-p)n

(2)

在復算的情況下,兩次均執行正確的概率:

Prr=(1-p)2n

(3)

在復算的情況下,一次執行錯誤、一次執行正確的概率:

Pfr+Prf=2[1-(1-p)n](1-p)n

(4)

在復算的情況下,兩次均執行錯誤的概率:

Pff=[1-(1-p)n]2

(5)

在不利用中斷程序輔助錯誤處理的情況下,采取本文提出的標記指令復算糾錯機制,其最終能得到正確結果的概率為:

Pnew=Prfr+Pfrr+Prr

=2[1-(1-p)n](1-p)2n+(1-p)2n

(6)

在不復算也不利用中斷程序處理錯誤的情況下,其最終能得到正確結果的概率:

Pold=Pr=(1-p)n

(7)

所以指令i正確執行的概率增加了:

ΔP=Pnew-Pold=2[1-(1-p)n](1-p)2n+

(1-p)2n-(1-p)n

=-2t3+3t2-t=f1(t)

(8)

其中,t=(1-p)n。

若與中斷機制相結合,則當三次計算結果均不一樣時,可以通過中斷程序報錯,讓操作系統進行相應的錯誤處理。此種情況的概率為:

Pint=2(1-p)n[1-(1-p)n]-

2(1-p)2n[1-(1-p)n]-

2(1-p)n[1-(1-p)n]·qn

(9)

其中:2(1-p)n[1-(1-p)n]表示的是標記指令被執行3次的概率;2(1-p)2n[1-(1-p)n]表示的是3次執行中2次正確、1次錯誤的概率;2(1-p)n[1-(1-p)n]·qn表示的是3次執行中2次錯誤、1次正確,且錯誤結果相同的概率。q表示出現錯誤且錯誤結果與之前的錯誤結果相同的概率,其數值遠遠小于p。比如,對某個深度為32、位寬為32的寄存器文件而言,若寄存器R0某個數據位發生單粒子瞬時故障的概率為p,則對于指定位(如最高位)發生單粒子瞬時故障的概率q=p/32。

因此,可以忽略2(1-p)n[1-(1-p)n]·qn項,則Pint≈2(1-p)n[1-(1-p)n][1-(1-p)n]。

同理,設t=(1-p)n∈(0,1),則:

Pint≈f2(t)=2(t3-2t2+t)

(10)

所以Pint+ΔP≈f(t)=-t2+t。

f(t)max=f(1/2)=0.25,即:若與中斷錯誤處理程序配合使用,標記指令復算糾錯機制可把單個指令的檢錯能力最多提高25%。

對于一個包含s條指令的程序,假設沒有復算糾錯機制,每一條指令執行正確的概率是ti=(1-pi)ni,其中pi是第i條指令發生錯誤的概率,ni是執行第i條指令所需的時鐘周期。則整個程序最終能正確執行結束的概率是:

(11)

若采用指令復算糾錯機制,則整個程序最終能夠正確執行結束的概率是:

(12)

所以對于整個系統而言,最終目標程序的容錯能力提高了:

(13)

以本文所做的實驗為例,假設整個程序中共s= 160條指令,所有指令都是涉及寄存器文件操作的單周期指令,任一時刻寄存器文件中的某個寄存器發生故障的概率pi=1/32,則對于每一條指令,其能正確執行的概率ti=(1-1/32)1=31/32,代入式(8)可得Δti=ΔPi=2.83%。

在沒有復算糾錯機制時,整個程序最終得以正確執行的概率Pori=(31/32)160=0.62%。

若采用復算糾錯機制(不考慮中斷輔助),程序正確執行的概率為:

Prcc=(31/32+2.83%)160=62.33%

(14)

所以對于整個程序而言,本文提出的復算糾錯機制將系統可靠性提高了:

ΔPtotal=Prcc-Pori=61.71%

(15)

3 實驗結果

本文用6個來自riscv-test項目中的基準測試集對復算糾錯機制進行測試。riscv-test是由RISC-V架構開發者在Github平臺上維護的公共項目,其中包含一些測試處理器是否符合RISC-V指令集架構定義的測試程序,它們均由匯編語言編寫。本文的重點是從硬件上建立指令復算和糾錯機制,而非在軟件上優化編譯器使之能根據指令的重要性和易錯性自動添加復算標記。所以在整個實驗過程中,復算標記是在ITCM初始化文件中手動添加的。

本文對邏輯運算測試集or、and、xor和算數運算測試集add、mul、div分別進行了100次容錯實驗。因為在上述6個測試集中也包含有分支跳轉指令,因此通過對其中的分支跳轉指令添加復算標記,也可以順便完成對Bjp_bak糾錯模塊的測試。其中故障注入是通過在測試文件tb_top.v中利用force和release語句,在指定時刻對隨機信號產生隨機干擾完成的。為降低故障注入的復雜度并便于調試,本文在每個時鐘周期上升沿之后,只針對32個通用寄存器文件進行隨機故障注入,每次故障持續的時間都最長不超過一個時鐘周期。雖然只針對寄存器進行了故障注入,但是該方法可以模擬整個寄存器文件讀、寫以及運算執行過程中所覆蓋的硬件的全部故障,即達到了本文想要檢測并糾正數據流瞬時故障的初衷。因此,對于每個時鐘周期,每個寄存器文件出錯的概率p=1/32。每個“蜂鳥e203”寄存器文件的數據位寬是32位,因此對于指定寄存器的指定位發生錯誤的概率q=p/32。

圖5展示了在100次隨機故障注入的實驗中,引入標記指令復算與糾錯機制前后各測試集錯誤執行的次數。其中,空白條BF表示未引入復算糾錯機制前,測試程序能夠順利完成但得到的是錯誤結果的次數;灰色填充條BD表示未引入復算糾錯機制前,測試程序由于數據流錯誤,導致其中某些分支跳轉指令跳錯方向,從而陷入死循環無法正常退出的次數,即偽分支錯誤;綠色填充條AF表示引入復算糾錯機制后,測試程序能夠順利完成但得到的是錯誤結果的次數;紅色填充條AD表示引入復算糾錯機制后,測試程序由于數據流錯誤,其中某些分支跳轉指令跳錯方向,從而陷入死循環無法正常退出的次數。

從or、and、xor的實驗數據中可以看出,未改進之前,邏輯運算內在的容錯能力十分微弱,在100次隨機故障注入的實驗中,沒有一次能夠正確運行完畢。對于算數運算測試集add、mul、div,在未引入復算糾錯機制之前,出錯概率也為100%。當引入復算糾錯機制和中斷處理機制之后,從圖5可以看出錯誤執行概率大大減小。其中,執行完畢但得到錯誤結果的概率(彩色條長度相對于灰白條長度)平均減小了約89.82%,說明標記指令復算與糾錯機制能夠有效地檢查并校正數據流錯誤。另外,偽分支錯誤的概率(紅色填充條長度相對于灰色填充條長度)平均減小了40%。

圖6展示了在100次故障注入實驗中,在引入本文所提出的標記指令復算與糾錯機制之后,程序最終得以正確執行的次數。從中可以看出,在本文所提出的標記指令復算與糾錯機制和中斷處理程序的配合下,6個測試集平均有86.67%的概率能夠正確完成程序的指定任務。對于單周期指令or、and、xor測試集而言,實驗數據表明在只有復算糾錯機制的情況下,其正確執行的概率平均為[(65+77+61)/300]×100%=67.67%,與第2節理論分析中得出的62.33%相吻合。

對于mul、div等多周期指令,隨著指令周期數n的增大,單條指令受到隨機故障影響的概率也越大。因此單條mul、div指令正確執行的概率將變小,從而導致通過兩次復算進行糾錯的成功率也將大大降低。盡管如此,本文提出的復算與糾錯機制可以根據原始計算與兩次復算結果的不同,檢查出數據流錯誤并報中斷程序進行系統級糾錯,從而成功保證程序得以正常執行。從圖6的實驗數據可以發現,對于mul測試集和div測試集,其通過兩次復算成功糾錯的次數分別只有27次和1次,但分別有62次和99次通過報中斷處理程序得以糾正錯誤,保證程序的正確執行。

圖5 程序執行錯誤的次數Fig.5 The number of program failures

圖6 程序正常執行完畢的次數Fig.6 The number of program successes

4 結論

本文提出了一種標記指令復算與糾錯機制。通過編譯器對每16位指令數據插入1位復算標記,并引入一個復算糾錯狀態機RCC_FSM來監控指令流中的標記,可以對標記為復算的指令進行復算。通過引入Reg_bak和Bjp_bak兩個備份糾錯模塊,若寫入寄存器文件的數據或者分支跳轉的方向在第一次復算時的結果與原始運算結果不同,可自動進行第二次復算。根據少數服從多數的原則,可自動糾正錯誤從而得到正確結果。若三次運算結果均各不相同,則可自動觸發中斷機制,交由系統級容錯軟件進行處理。

所提出的標記指令復算與糾錯機制的優點有:

1)對軟件程序所需的內存開銷較小。因為沒有直接插入完整的冗余指令,而只是插入了是否復算的標記位。

2)對芯片的硬件開銷較小。采用時鐘門控的做法,避免了在原有的硬件基礎上增加復雜的控制邏輯。整個內核只需引入一個復算糾錯狀態機RCC_FSM。可根據具體的需要,針對易錯部件靈活地插入備份糾錯模塊。

3)對程序執行時間的開銷較小。在程序復算的過程中免去了重新取指的過程,可以直接重新發射。而且僅在第一次復算結果與原始結果不同時,才進行第二次復算。

然而,本文的工作也仍存在不足:

1)雖然用額外添加標記位的方式來表達指令復算的需求可以節省存儲空間,但同時也要求軟件工程師能分析出易出錯的指令,抑或是將容錯能力納入編譯器中,使編譯器能夠對易錯指令進行自動標記。下一步研究將對RISC-V編譯器進行優化和改進,使之能自動分析出指令的易錯性和重要性。

2)雖然二次復算可以避免傳統硬件三模冗余結構帶來的面積與功耗開銷,但是對于出錯率高、執行周期長的指令而言,可能會降低整體程序的性能,因此,本文提出的結構可能更適合于出錯率相對較低的環境。

3)最終實驗時,只選取了功能單一的測試向量并且最終的故障注入實驗只針對寄存器文件中的32個通用寄存器進行了等概率的隨機故障注入,其主要原因是缺乏具有標記容錯能力的編譯器與真實的輻射實驗環境。事實上,不同指令所調用的部件、執行周期長短都各不相同,因此其真實的出錯概率并不一樣。后續將研究建立更精確的故障注入模型,利用改進后的編譯器產生更多貼近真實情況的程序,從而更好地模擬復算糾錯機制對系統容錯能力的提升。

猜你喜歡
指令機制故障
聽我指令:大催眠術
故障一點通
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
奔馳R320車ABS、ESP故障燈異常點亮
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
故障一點通
江淮車故障3例
注重機制的相互配合
中國衛生(2014年3期)2014-11-12 13:18:12
主站蜘蛛池模板: 国产精品视频观看裸模 | 欧美精品成人| 色欲色欲久久综合网| 蜜桃视频一区二区| 在线观看无码av免费不卡网站| 成人综合在线观看| 3D动漫精品啪啪一区二区下载| 亚洲中文字幕无码mv| 专干老肥熟女视频网站| 国产成人一区| 精品国产电影久久九九| 国产免费精彩视频| 中文字幕有乳无码| 亚洲 日韩 激情 无码 中出| 在线亚洲精品自拍| 国语少妇高潮| 国产啪在线91| 囯产av无码片毛片一级| 91激情视频| 精品国产黑色丝袜高跟鞋| 国产成年女人特黄特色毛片免| 亚洲床戏一区| 精品伊人久久久久7777人| 青青青亚洲精品国产| 久久不卡精品| 国产精品成人久久| 欧美日韩中文字幕在线| 五月婷婷中文字幕| 国产内射一区亚洲| 日韩精品一区二区三区中文无码| 伦伦影院精品一区| 成人免费视频一区| 无码电影在线观看| 高清无码不卡视频| 亚洲成A人V欧美综合| 国内精品一区二区在线观看 | 爱做久久久久久| 欧美一级专区免费大片| 日韩123欧美字幕| 欧美精品1区| 东京热高清无码精品| 91成人免费观看| 亚洲午夜片| 人人爱天天做夜夜爽| 伊人蕉久影院| 日韩东京热无码人妻| 久久香蕉国产线| AⅤ色综合久久天堂AV色综合| 精品自窥自偷在线看| 日韩欧美国产成人| 欧洲熟妇精品视频| 久久狠狠色噜噜狠狠狠狠97视色| 麻豆国产在线观看一区二区 | 亚洲无码91视频| 不卡色老大久久综合网| 无码视频国产精品一区二区| 久久国语对白| 久久黄色免费电影| 国产青青操| 国产视频一区二区在线观看| 欧美国产视频| 无码粉嫩虎白一线天在线观看| 日韩欧美综合在线制服| 黄色在线不卡| 毛片网站在线看| 欧美在线观看不卡| 久草国产在线观看| 亚洲欧美一区二区三区图片| 久久久久久国产精品mv| 国产小视频a在线观看| 亚洲中文字幕23页在线| 成人精品午夜福利在线播放| 国产毛片高清一级国语 | av一区二区三区在线观看| 精品伊人久久久香线蕉| 丝袜国产一区| 日本精品视频一区二区| 欧美精品在线免费| 亚洲成人免费在线| 国产主播在线一区| 亚洲全网成人资源在线观看| 色综合久久无码网|