緩存輔助的向量寄存器堆的緩沖方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及一種緩存輔助的向量寄存器堆的緩沖方法。
【背景技術(shù)】
[0002] 寄存器緩沖,英文名buffer或cache,主要用于緩沖寄存器值數(shù)據(jù)來消除寄存器堆 訪問時(shí)的端口沖突及空間不足。如圖1所示。
[0003] 該專利用于寄存器文件資源不可用(寄存器端口或空間不足)時(shí),把數(shù)據(jù)緩沖到 405寄存器緩存(register cache),該專利具體體現(xiàn)在寫回算法上,主要實(shí)現(xiàn)如下及圖1所 不。
[0004] 圖2主要描述了寄存器堆空間不足時(shí)緩存寄存器堆寫入數(shù)據(jù)的操作方法,首先,在 701步處理器會(huì)檢查寄存器堆是否有空間及端口,如果有則把數(shù)據(jù)寫入寄存器堆,再繼續(xù)判 斷是否可以解鎖寄存器緩沖(711步),如果可以解鎖則寫入(716步)。如果判斷寄存器堆空 間及端口不足,繼續(xù)判斷是否可以解鎖寄存器緩沖(710步),如果可以解鎖則寫入(715步), 接下來會(huì)等待寄存器堆空閑時(shí)寫入(721步)。
[0005] 上面圖3主要描述了寄存器堆訪問帶寬不足時(shí)緩存寄存器堆寫入數(shù)據(jù)的操作方 法,首先,在801步處理器會(huì)檢查數(shù)據(jù)是否有效,如有效則解鎖寄存器緩沖(805步),如無效, 則判斷是否有足夠的寄存器堆寫帶寬,如果是,則把數(shù)據(jù)寫入寄存器堆(815步),如帶寬不 足,則會(huì)繼續(xù)810步。
[0006] 上面寄存器堆與緩沖中的數(shù)據(jù)為包含關(guān)系,主要減少了讀操作。另外此專利并沒 有區(qū)分變量的類型?,F(xiàn)有技術(shù)方案只考慮輔助緩沖用于寄存器端口及存儲(chǔ)空間沖突解決的 情況,未考慮減少寄存器堆能耗時(shí),可以同時(shí)緩沖短生命周期變量的情況。此外,未考慮用 作向量功能單元作用時(shí),向量寄存器堆的緩沖及功耗開銷。
【發(fā)明內(nèi)容】
[0007] 針對(duì)上述問題,本發(fā)明提供一種節(jié)約寄存器堆的訪問功耗,減少端口的使用的緩 存輔助的向量寄存器堆的緩沖方法。
[0008] 為達(dá)到上述目的,本發(fā)明緩存輔助的向量寄存器堆的緩沖方法,包括:
[0009] 對(duì)短生命周期變量進(jìn)行標(biāo)識(shí);
[0010] 寄存器堆讀過程,在流水線的譯碼階段從VBUF中查找相應(yīng)的寄存器id,
[0011] 若存在,則從VBUF中讀取;
[0012] 若不存在,則從MVRF中讀取,并判斷是否有端口沖突,
[0013] 若有端口讀沖突會(huì)暫停取指-譯碼的流水,則分兩次從MVRF中讀??;
[0014] 寄存器堆寫過程,判斷結(jié)果是否為SLV,
[0015]若是SLV,則判斷是否在bypass中被相關(guān)指令消費(fèi),如果未消費(fèi),寫入到VBUF中; [0016]若不是SLV,則判斷端口是否沖突,
[0017] 若沖突,則需要緩沖變量到VBUF;
[0018] 若無沖突,則直接寫入MVRF。
[0019] 進(jìn)一步地,向量寄存器緩沖VBUF失效時(shí),同時(shí)無效2條沖突時(shí)的臨時(shí)寄存器項(xiàng),將 所述臨時(shí)寄存器項(xiàng)寫入寄存器堆。
[0020] 本發(fā)明緩存輔助的向量寄存器堆的緩沖方法,同時(shí)存儲(chǔ)短生命周期值SLV及端口 沖突時(shí)的臨時(shí)寄存器項(xiàng),共享存儲(chǔ)空間,有效利用寄存器緩沖的空間。寄存器堆及寄存器緩 沖間為互斥關(guān)系,對(duì)寄存器緩沖訪問有優(yōu)先權(quán),數(shù)據(jù)量唯一位置存儲(chǔ),存儲(chǔ)開銷小。當(dāng)向量 寄存器緩沖VBUF失效時(shí),會(huì)同時(shí)無效掉2條沖突時(shí)的臨時(shí)寄存器項(xiàng),并將其寫入寄存器堆, 批量寫入數(shù)據(jù),可以減少對(duì)主寄存器訪問次數(shù)。
【附圖說明】
[0021 ]圖1現(xiàn)有的寄存器堆緩沖技術(shù);
[0022] 圖2寄存器堆空間不足時(shí)緩存寄存器堆寫入數(shù)據(jù)的操作方法;
[0023] 圖3寄存器堆訪問帶寬不足時(shí)緩存寄存器堆寫入數(shù)據(jù)的操作方法;
[0024]圖4是向量寄存器堆的緩沖結(jié)構(gòu);
[0025] 圖5是向量寄存器緩沖的數(shù)據(jù)項(xiàng)格式;
[0026] 圖6是讀寄存器堆時(shí)的流水線狀態(tài)圖;
[0027] 圖7是寫寄存器堆時(shí)的流水線狀態(tài)圖;
[0028]圖8是短生命周期量SLV讀寫策略;
[0029] 圖9是VBUF空間不足時(shí)的替換策略。
【具體實(shí)施方式】
[0030] 下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的描述。
[0031] 說明:SLV-短生命周期變量;VBUF-向量寄存器堆數(shù)據(jù)緩沖;Bypass-數(shù)據(jù)旁路; MVRF-主向量寄存器堆。
[0032] 在對(duì)數(shù)據(jù)進(jìn)行計(jì)算的過程中,為了減少寄存器堆的訪問及降低寄存器堆的能耗開 銷,可以采用把一些臨時(shí)變量緩沖到Buffer的方法。如短生命周期變量,生命周期只有幾條 指令,沒有必要寫回到寄存器堆,可以借助cache實(shí)現(xiàn)數(shù)據(jù)的緩沖,如下面代碼段所示:
0.
[0033]
[0034] 上面代碼中,寄存器Vr6,Vrl在第1行定義,第2行使用,第3行被重新定義,寄存器 vr6,vrl的值沒有必要寫回寄存器堆,可以通過寄存器緩沖或bypass網(wǎng)絡(luò)中獲得,從而減少 寄存器堆的訪問功耗開銷。
[0035] 短生命周期變量SLV,從第η次變量定義Dn到變量使用Un僅僅間隔數(shù)條指令,下一次 n+1重新定義Dn+1,使用深度Ln,空閑周期Sn。
[0036] Ln = Un-Dn,Sn = Dn+l-Un (1)
[0037] 當(dāng)匕較?。ㄒ话阈∮?)且在lkSDn+1未使用過該變量,那么該變量實(shí)質(zhì)上在1]"使用 后就消亡了,因此被稱為短生命周期變量。
[0038] 本發(fā)明采用一種新的方法,利用VBUF緩存短生命周期變量和主寄存器堆端口共享 結(jié)合起來,從而進(jìn)一步減少寄存器堆訪問開銷及功耗。
[0039] 針對(duì)現(xiàn)有技術(shù)未考慮暫存短生命周期變量的問題,本發(fā)明提出了一種復(fù)合的寄存 器buffer結(jié)構(gòu),用于節(jié)約寄存器堆的訪問功耗,以及減少端口的使用。本發(fā)明充分考慮了短 生命周期變量及MVRF端口沖突的情況,并把兩者很好的結(jié)合在一起,共享VBUF存儲(chǔ)的使用, 如圖4所示。
[0040] 1)正常訪問:當(dāng)數(shù)據(jù)通路中功能單元FU1,F(xiàn)U2,F(xiàn)U3使用端口數(shù)小于主寄存器堆 MVRF的端口個(gè)數(shù),通過MUX復(fù)用實(shí)現(xiàn)共享主寄存器堆MVRF端口。
[0041 ] 2)訪問帶寬沖突:當(dāng)數(shù)據(jù)通路中功能單元FU1,F(xiàn)U2,F(xiàn)U3使用端口數(shù)大于主寄存器 堆MVRF的端口個(gè)數(shù),需要MVRF寄存器Buffer緩沖解決。
[0042] 3)短生命周期變量:對(duì)于沒有必要寫回主寄存器堆MVRF的變量,通過MVRF寄存器 Buffer緩沖實(shí)現(xiàn)。
[0043] 3短生命周期變量的暫存:
[0044] 1)短生命周期變量通過編譯器標(biāo)識(shí)。
[0045] 2)對(duì)于深度1-3的臨時(shí)變量通過流水線bypass使用后釋放
[0046] 3)對(duì)對(duì)深度4-5的短什么周期變量,通過VBUF來緩沖。
[0047] 4VBUF(vector register file buffer)項(xiàng)的格式:
[0048] 四項(xiàng)結(jié)構(gòu):Item(VR_id, value,type,valid),表不如圖5所不:
[0049] 算法方面的實(shí)現(xiàn),主要有:1)寄存器堆讀策略,2)寄存器堆寫策略3)短生命周期變 量SLV的存儲(chǔ)策略。
[0050] 1)寄存器堆讀策略,如圖6所示,主要說明:在流水線的譯碼階段從VBUF中查找相 應(yīng)的寄存器id,如果存在就從VBUF中讀取;如果不存在,則從MVRF中讀取,并判斷是否有端 口沖突。如果有端口讀沖突會(huì)暫停取指-譯碼的流水,則分兩次從MVRF中讀取。
[0051] 2)寄存器堆寫策略,如圖7所示,主要說明:在寫回階段判斷結(jié)果是否為SLV,如果 是SLV則寫入到VBUF中。如果不是SLV,則判斷端口是否沖突,如果沖突,則需要緩沖變量到 VBUF。如果無沖突,則直接寫入MVRF。
[0052] 3)短生命周期變量分配及釋放策略,如圖8所示,主要說明:在譯碼階段檢測(cè)SLV標(biāo) 示,并設(shè)置內(nèi)部寄存器(map_slv)。在Execute階段根據(jù)bypass判斷SLV是否被消費(fèi)了。在寫 回階段,根據(jù)Map_slv的指示判斷目的結(jié)果寫入哪里:如果不是SLV變量則寫回MVRF,如果 是,則寫一步判斷是否在bypass中被相關(guān)指令消費(fèi),如果未消費(fèi),則寫入VBUF。
[0053] 6帶寬不足時(shí),算法上與專利US 7418551的主要區(qū)別:
[0054] 1)當(dāng)type = 0的變量發(fā)生替換操作時(shí),會(huì)無效掉2項(xiàng)VBUF項(xiàng),進(jìn)行批量寫入MVRF更 新。
[0055] 2)對(duì)于type = 1的項(xiàng)目,只能通過功能單元FU使用后無效。
[0056] 如下fftl024代碼:
[0057] l·
[0059] 執(zhí)行中VBUF的變化如圖9所示:圖9中,VBUF空間不足時(shí),會(huì)同時(shí)無效掉Type = 0的 兩項(xiàng)到MVRF中,然后寫入VR-id = 5的項(xiàng)。
[0060] 1.復(fù)合緩沖結(jié)構(gòu):同時(shí)存儲(chǔ)短生命周期值SLV及端口沖突時(shí)的臨時(shí)寄存器項(xiàng)。
[0061 ] 2.數(shù)據(jù)互斥結(jié)構(gòu):主寄存器堆及寄存器緩沖間為互斥關(guān)系,對(duì)寄存器緩沖訪問有 優(yōu)先權(quán)。
[0062] 3.批量更新策略:當(dāng)向量寄存器緩沖VBUF失效時(shí),會(huì)同時(shí)無效掉2條沖突時(shí)的臨時(shí) 寄存器項(xiàng),并將其寫入主寄存器堆。
[0063]以上,僅為本發(fā)明的較佳實(shí)施例,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本 技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在 本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求所界定的保護(hù)范圍為準(zhǔn)。
【主權(quán)項(xiàng)】
1. 一種緩存輔助的向量寄存器堆的緩沖方法,其特征在于,包括: 對(duì)短生命周期變量進(jìn)行標(biāo)識(shí); 寄存器堆讀過程,在流水線的譯碼階段從VBUF中查找相應(yīng)的寄存器id, 若存在,則從VBUF中讀??; 若不存在,則從MVRF中讀取,并判斷是否有端□沖突, 若有端口讀沖突會(huì)暫停取指-譯碼的流水,則分兩次從MVRF中讀??; 寄存器堆寫過程,判斷結(jié)果是否為SLV, 若是SLV,則判斷是否在bypass中被相關(guān)指令消費(fèi),如果未消費(fèi),寫入到VBUF中; 若不是SLV,則判斷端口是否沖突, 若沖突,則需要緩沖變量到VBUF; 若無沖突,則直接寫入MVRF。2. 根據(jù)權(quán)利要求1所述的緩存輔助的向量寄存器堆的緩沖方法,其特征在于,向量寄存 器緩沖VBUF失效時(shí),同時(shí)無效2條沖突時(shí)的臨時(shí)寄存器項(xiàng),將所述臨時(shí)寄存器項(xiàng)寫入寄存器 堆。
【專利摘要】本發(fā)明公開一種緩存輔助的向量寄存器堆的緩沖方法,包括:對(duì)短生命周期變量進(jìn)行標(biāo)識(shí);寄存器堆讀過程,在流水線的譯碼階段從VBUF中查找相應(yīng)的寄存器id,若存在,則從VBUF中讀??;若不存在,則從MVRF中讀取,并判斷是否有端口沖突,若有端口讀沖突會(huì)暫停取指-譯碼的流水,則分兩次從MVRF中讀取;寄存器堆寫過程,判斷結(jié)果是否為SLV,若是SLV,則判斷是否在bypass中被相關(guān)指令消費(fèi),如果未消費(fèi),寫入到VBUF中;若不是SLV,則判斷端口是否沖突,若沖突,則需要緩沖變量到VBUF;若無沖突,則直接寫入MVRF。
【IPC分類】G06F12/0808
【公開號(hào)】CN105653472
【申請(qǐng)?zhí)枴?br>【發(fā)明人】劉智國(guó), 劉鈺, 朱子元, 蘇泳濤, 石晶林
【申請(qǐng)人】北京中科晶上科技有限公司
【公開日】2016年6月8日
【申請(qǐng)日】2015年12月31日