本發(fā)明涉及一種圖形處理單元技術(shù),特別是一種全精度及部分精度數(shù)值的計(jì)算方法及裝置。
背景技術(shù):
圖形處理單元的架構(gòu)通常具有數(shù)百個(gè)基本著色器處理單元(basicshaderprocessingunits),又稱為流處理器(streamprocessors)。每一個(gè)流處理器于每個(gè)周期處理一個(gè)單指令多數(shù)據(jù)(simd,singleinstructionmultipledata)執(zhí)行線程的指令,接著于下一個(gè)周期處理另一個(gè)單指令多數(shù)據(jù)執(zhí)行線程。一般而言,為符合ieee754規(guī)范,每個(gè)流處理器要能計(jì)算32比特浮點(diǎn)數(shù)(fp32)或整數(shù)數(shù)值(int32)。32比特?cái)?shù)值可稱為全精度(fp,fullprecision)數(shù)值。然而,于一些應(yīng)用中,例如,畫素著色器(pixelshader)、圖像處理(imageprocessing)等,流處理器只要能計(jì)算較低精度的數(shù)值就能滿足需求,例如,16/18/24比特浮點(diǎn)數(shù)(fp16/18/24)等。16/18/24比特?cái)?shù)值可稱為部分精度(pp,partialprecision)數(shù)值。因此,本發(fā)明提出一種全精度及部分精度數(shù)值的計(jì)算方法及裝置,用以提升流處理器的效能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提出一種全精度及部分精度數(shù)值的計(jì)算方法,由指令解碼單元執(zhí)行,包含下列步驟:解碼從一編譯器傳來的一指令請(qǐng)求;以及依據(jù)指令請(qǐng)求中的指令模式執(zhí)行m次循環(huán)以產(chǎn)生m個(gè)計(jì)算第一類型數(shù)據(jù)的微指令或執(zhí)行n次循環(huán)以產(chǎn)生n個(gè)計(jì)算第二類型數(shù)據(jù)的微指令,使得多個(gè)算術(shù)邏輯組完成一個(gè)執(zhí)行線程的多個(gè)通道計(jì)算。其中,m小于n,并且上述第一類型數(shù)據(jù)的精度低于上述第二類型數(shù)據(jù)的精度。
本發(fā)明的實(shí)施例提出一種全精度及部分精度數(shù)值的計(jì)算裝置,包含第一類運(yùn)算通道;及多個(gè)第二類運(yùn)算通道,耦接于第一類運(yùn)算通道。當(dāng)運(yùn)行于第一模式時(shí),第一類運(yùn)算信道及第二類運(yùn)算信道中的每一者獨(dú)立完成一組第一類型數(shù)據(jù)的計(jì)算。當(dāng)運(yùn)行于第二模式時(shí),第二類運(yùn)算通道的每一者計(jì)算一組第二類型數(shù)據(jù)的一部份以產(chǎn)生部分結(jié)果,并且第二類運(yùn)算通道合并第一類運(yùn)算通道輸出的部分結(jié)果并使用合并結(jié)果完成該組第二類型數(shù)據(jù)的計(jì)算。
附圖說明
圖1是通用流處理器的流水線示意圖。
圖2是依據(jù)本發(fā)明實(shí)施例的流處理器的流水線示意圖。
圖3a是依據(jù)本發(fā)明實(shí)施例的fp浮點(diǎn)數(shù)示意圖。
圖3b是依據(jù)本發(fā)明實(shí)施例的pp浮點(diǎn)數(shù)示意圖。
圖4是依據(jù)本發(fā)明實(shí)施例的算術(shù)邏輯組的第一類運(yùn)算通道的硬件架構(gòu)圖。
圖5是依據(jù)本發(fā)明實(shí)施例的第二類運(yùn)算通道的硬件架構(gòu)圖。
具體實(shí)施方式
以下說明是完成發(fā)明的較佳實(shí)現(xiàn)方式,其目的在于描述本發(fā)明的基本精神,但并不用以限定本發(fā)明。實(shí)際的發(fā)明內(nèi)容必須參考之后的權(quán)利要求范圍。
必須了解的是,使用于本說明書中的“包含”、“包括”等詞,是用以表示存在特定的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、組件以及/或組件,但并不排除可加上更多的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、組件、組件,或以上的任意組合。
在權(quán)利要求中使用如“第一”、“第二”、“第三”等詞是用來修飾權(quán)利要求中的組件,并非用來表示之間具有優(yōu)先權(quán)順序,先行關(guān)系,或者是一個(gè)組件先于另一個(gè)組件,或者是執(zhí)行方法步驟時(shí)的時(shí)間先后順序,僅用來區(qū)別具有相同名字的組件。
圖1是通用流處理器的流水線示意圖。流處理器的流水線可包含四個(gè)順序性階段:指令解碼(id,instructiondecode);數(shù)據(jù)提取(df,datafetch);執(zhí)行(ex,execute)以及回寫(wb,writeback)?;貙戨A段產(chǎn)生的最終結(jié)果可儲(chǔ)存至通用緩存器(cr,commonregister),或輸出至后處理單元。詳細(xì)來說,指令解碼單元120解碼從編譯器(compiler)傳來的指令請(qǐng)求110,并通知需要取得數(shù)據(jù)或常數(shù)的通用緩存器地址121以及/或常數(shù)緩存器地址123。指令解碼單元120可取得指令請(qǐng)求110中的操作碼(opcode,operationcode)。數(shù)據(jù)提取單元130取得通用緩存器地址121的數(shù)據(jù)133以及/或常數(shù)緩存器地址123的常數(shù)135,如果需要,通知欲寫回的通用緩存器地址131。取得的數(shù)據(jù)133以及/或常數(shù)135又可稱為操作數(shù)(operand),可為全精度數(shù)值及部分精度數(shù)值。執(zhí)行單元140可從數(shù)據(jù)提取單元130接收操作數(shù)以及/或從通用緩存器或常數(shù)緩存器(cb,constantbuffer)接收數(shù)據(jù)或常數(shù)141??梢罁?jù)操作碼控制解多任務(wù)器(demux,de-multiplexer)151將數(shù)據(jù)提取單元130連接上算術(shù)單元(arithmeticunit)153、比較/邏輯單元(compare/logicunit)155及選擇/旁路單元(selection/branchunit)157中之一者,用以將操作碼及操作數(shù)從數(shù)據(jù)提取單元130傳送至連接上的單元。此外,可依據(jù)操作碼控制控制多任務(wù)器(mux,multiplexer)159將算術(shù)單元153、比較/邏輯單元155及選擇/旁路單元157中之連接一者連接上回寫單元(writebackunit)160,用以將執(zhí)行結(jié)果傳送至回寫單元160。算術(shù)單元153可依據(jù)操作碼對(duì)操作數(shù)進(jìn)行數(shù)學(xué)計(jì)算。數(shù)學(xué)計(jì)算包含加、減、乘、除、四舍五入等。比較/邏輯單元155可依據(jù)操作碼對(duì)操作數(shù)進(jìn)行比較或邏輯操作。比較操作包含取大值、取小值、數(shù)值比較等,邏輯操作包含及(and)、或(or)、非(not)、或非(nor)、互斥或(xor)等。算術(shù)單元153及比較/邏輯單元155可統(tǒng)稱為算術(shù)邏輯單元(alu,arithmeticlogicunit)。回寫單元160可將運(yùn)算后的結(jié)果161寫回至通用緩存器,或者傳送至加載/儲(chǔ)存單元181、取樣單元183以及特殊函數(shù)單元185中之一者。詳細(xì)來說,判斷單元171依據(jù)操作數(shù)中的目的地地址決定將運(yùn)算結(jié)果輸出至通用緩存器,或者加載/儲(chǔ)存單元181、取樣單元183以及特殊函數(shù)單元185中的一者。此外,可依據(jù)操作數(shù)中的目的地地址控制解多任務(wù)器173將運(yùn)算結(jié)果輸出至加載/儲(chǔ)存單元181、取樣單元183以及特殊函數(shù)單元185中之一者。特殊函數(shù)單元185實(shí)施復(fù)雜數(shù)學(xué)運(yùn)算,例如正弦(sin)、余弦(cos)、根數(shù)(sqrt)等。加載/儲(chǔ)存單元181、取樣單元183以及特殊函數(shù)單元185可統(tǒng)稱為后處理單元(post-processingunit)。
一個(gè)執(zhí)行線程(thread)包含可合并執(zhí)行的32個(gè)通道(lanes),或稱為simd32。圖2是依據(jù)本發(fā)明實(shí)施例的流處理器的流水線示意圖。一個(gè)流處理器可包含多個(gè)算術(shù)邏輯組(alg,arithmeticlogicgroups),例如四個(gè)算術(shù)邏輯組200a至200d。每個(gè)算術(shù)邏輯組(簡稱為alu-quad)可包含組控制器290及四個(gè)運(yùn)算單元(computationunits)210、230、250及270,用以于一個(gè)周期(cycle)并行執(zhí)行4組部分精度(pp,partialprecision)數(shù)據(jù)的運(yùn)算或執(zhí)行1組全精度(fp,fullprecision)數(shù)據(jù)的運(yùn)算。所以,每個(gè)流處理器可支持4組fp或16組pp數(shù)據(jù)的運(yùn)算。運(yùn)算單元210、230、250及270中之任一者可執(zhí)行24比特?cái)?shù)值(或可稱為pp數(shù)值)的運(yùn)算,并且結(jié)合運(yùn)算單元210、230、250及270可執(zhí)行32比特?cái)?shù)值(或可稱為fp數(shù)值)的運(yùn)算。
圖3a是依據(jù)本發(fā)明實(shí)施例的fp浮點(diǎn)數(shù)示意圖。fp浮點(diǎn)數(shù)以32比特表示,而最高比特(第31比特)為符號(hào)位(signbit)310a。fp浮點(diǎn)數(shù)另包含23比特的尾數(shù)310b(第8至30比特)及8比特的指數(shù)310c(第0至7比特)。圖3b是依據(jù)本發(fā)明實(shí)施例的pp浮點(diǎn)數(shù)示意圖。pp浮點(diǎn)數(shù)以24比特表示,而最高比特(第23比特)為符號(hào)位330a。pp浮點(diǎn)數(shù)另包含16比特的尾數(shù)330b(第7至22比特)及7比特的指數(shù)330c(第0至6比特)。
運(yùn)算單元210、230、250及270中的每一者可獨(dú)立完成pp數(shù)值的fmad操作,或者運(yùn)算單元210、230、250及270合并完成fp數(shù)值的fmad操作。fmad操作(=axb+c)的方程式如下:
dest=src0xsrc1+src2,
src0、src1及scr2代表三個(gè)來源存儲(chǔ)裝置(sourcememories)中的pp/fp數(shù)值,dest代表即將儲(chǔ)存于目的地存儲(chǔ)裝置的pp/fp數(shù)值。運(yùn)算單元210、230、250及270中的每一者包含一個(gè)乘法器,用以將pp/fp數(shù)值src0乘以pp/fp數(shù)值src1。運(yùn)算單元210、230、250及270中之每一者另包含一個(gè)加法器,用以將乘法器的輸出加上pp/fp數(shù)值scr2,用以產(chǎn)生fmad操作的運(yùn)算結(jié)果。
流處理器的流水線可包含五個(gè)順序性階段:指令解碼;數(shù)據(jù)提??;零級(jí)執(zhí)行(ex0);一級(jí)執(zhí)行(ex1)以及回寫。指令解碼單元120可執(zhí)行解碼流程,用以偵測指令模式,例如fp或pp,以及根據(jù)指令模式產(chǎn)生m個(gè)計(jì)算第一類型數(shù)據(jù)的微指令,或者產(chǎn)生n個(gè)計(jì)算第二類型數(shù)據(jù)的微指令。于一些實(shí)施例中,m為2,n為8,第一類型數(shù)據(jù)為pp數(shù)據(jù),而第二類型數(shù)據(jù)為fp數(shù)據(jù)。詳細(xì)來說,指令解碼單元120可從編譯器接收64比特指令,包含操作碼(opcode)、來源(source)、目的地(destination)及斷言(predicate)操作數(shù)(operands)及fp/pp旗標(biāo)等(步驟s210)。指令的最高比特(msb,mostsignificantbit,bit63)存放fp/pp旗標(biāo)。例如,如果fp/pp旗標(biāo)為0,代表此指令為fp指令。如果fp/pp旗標(biāo)為1,代表此指令為pp指令。于此須注意的是,熟習(xí)此技藝人士可顛倒fp/pp旗標(biāo)代表的模式,本發(fā)明并不因此受限。如果fp/pp旗標(biāo)為1,循環(huán)次數(shù)loopcnt設(shè)為2;如果fp/pp旗標(biāo)為0,循環(huán)次數(shù)loopcnt設(shè)為8(步驟s230)。當(dāng)循環(huán)次數(shù)loopcnt小于或等于0時(shí)(步驟s250中“是”的路徑),從編譯器接收下一個(gè)64比特指令(步驟s210)。當(dāng)循環(huán)次數(shù)loopcnt大于0時(shí)(步驟s250中“否”的路徑),根據(jù)fp/pp旗標(biāo)產(chǎn)生微指令,產(chǎn)生來源存儲(chǔ)裝置(sourcememory)的地址,依據(jù)產(chǎn)生的地址發(fā)送數(shù)據(jù)請(qǐng)求給來源存儲(chǔ)裝置,并更新loopcnt(步驟s270)。來源存儲(chǔ)裝置可為通用寄存器(cr,commonregister)或常數(shù)緩存器(constantbuffer)。舉例來說,當(dāng)fp/pp旗標(biāo)為1時(shí),產(chǎn)生simd16指令,產(chǎn)生16個(gè)通道的來源存儲(chǔ)裝置的地址,依據(jù)產(chǎn)生的地址發(fā)送數(shù)據(jù)請(qǐng)求給來源存儲(chǔ)裝置,以及將循環(huán)次數(shù)loopcnt減1。當(dāng)fp/pp旗標(biāo)為0時(shí),產(chǎn)生simd4指令,產(chǎn)生4個(gè)通道的fp數(shù)值scr0及scr1的來源存儲(chǔ)裝置的地址,并且依據(jù)產(chǎn)生的地址發(fā)送數(shù)據(jù)請(qǐng)求給來源存儲(chǔ)裝置,以及將循環(huán)次數(shù)loopcnt減1。于pp模式,通過如上所述的解碼流程,執(zhí)行階段于第1個(gè)周期可實(shí)施執(zhí)行線程中的第0個(gè)通道(lane0)至第15個(gè)通道(lane15),并且于第2個(gè)周期可實(shí)施執(zhí)行線程中的第16個(gè)通道(lane16)至第31個(gè)通道(lane31)。于fp模式,通過如上所述的解碼流程,執(zhí)行階段于第1個(gè)周期可實(shí)施執(zhí)行線程中的第0個(gè)通道(lane0)至第3個(gè)通道(lane3),于第2個(gè)周期可實(shí)施執(zhí)行線程中的第4個(gè)通道(lane4)至第7個(gè)通道(lane7),依此類推。
數(shù)據(jù)提取單元130從來源存儲(chǔ)裝置提取來源數(shù)據(jù)(sourcedata)scr0及scr1。數(shù)據(jù)提取單元130另可從斷言存儲(chǔ)裝置(predicatememory)接收斷言數(shù)據(jù)(predicatedata),以及產(chǎn)生通道掩碼(lanemask)。斷言存儲(chǔ)裝置可為斷言寄存器(pr,predicateregister)。
在零級(jí)執(zhí)行(ex0)階段,算術(shù)邏輯組200a至200d中的每一者中的群控制器290可依據(jù)微指令類型指示運(yùn)算單元210、230、250及270運(yùn)行于pp模式或fp模式。當(dāng)微指令為simd16指令時(shí),指示運(yùn)算單元210、230、250及270運(yùn)行于pp模式。當(dāng)微指令為simd4指令時(shí),指示運(yùn)算單元210、230、250及270運(yùn)行于fp模式。算術(shù)邏輯組200a至200d可并行執(zhí)行simd4fp通道,或simd16pp通道的來源數(shù)據(jù)scr0及scr1的乘法運(yùn)算。
于一級(jí)執(zhí)行(ex1)階段,于pp模式,算術(shù)邏輯組200a至200d可并行執(zhí)行乘法運(yùn)算結(jié)果及來源數(shù)據(jù)scr2的加法運(yùn)算,接著,輸出加法運(yùn)算結(jié)果。于fp模式,算術(shù)邏輯組200a至200d中的每一者的運(yùn)算單元210可合并運(yùn)算單元230、250及270及自己的乘法運(yùn)算結(jié)果,執(zhí)行乘法運(yùn)算結(jié)果及來源數(shù)據(jù)scr2的加法運(yùn)算,接著,輸出加法運(yùn)算結(jié)果。
于回寫階段,于pp模式,算術(shù)邏輯組200a至200d的運(yùn)算單元210、230、250及270中的每一者執(zhí)行歸一化(normalization)及數(shù)據(jù)格式轉(zhuǎn)換(dataformatting),用以產(chǎn)生即將儲(chǔ)存至目的地存儲(chǔ)裝置(destinationmemory)或輸出至后處理單元的pp數(shù)據(jù)。于fp模式,算術(shù)邏輯組200a至200d的運(yùn)算單元210中之每一者執(zhí)行歸一化及數(shù)據(jù)格式轉(zhuǎn)換,用以產(chǎn)生即將儲(chǔ)存至目的地存儲(chǔ)裝置或輸出至后處理單元的fp數(shù)據(jù)。目的地存儲(chǔ)裝置可為通用寄存器。
此外,運(yùn)算單元210、230、250及270中的每一者可使用如上所述的fmad架構(gòu)獨(dú)立完成pp數(shù)值的其它基本運(yùn)算,例如乘法、加法等?;蛘?,運(yùn)算單元210、230、250及270可使用如上所述的fmad架構(gòu)合并完成fp數(shù)值的其它基本操作。
例如,fmul操作(=axb)相當(dāng)于:
dest=src0xsrc1+0,
于指令解碼階段,指令解碼單元120可更將來源數(shù)據(jù)src2=0儲(chǔ)存至指定的來源存儲(chǔ)裝置。最后,輸出為fmul操作的運(yùn)算結(jié)果。
例如,fadd操作(=a+b)相當(dāng)于:
dest=src0x1.0+src2,
于指令解碼階段,指令解碼單元120可更將來源數(shù)據(jù)src1=1.0儲(chǔ)存至指定的來源存儲(chǔ)裝置。最后,輸出為fadd操作的運(yùn)算結(jié)果。
例如,fcmp_gt操作(=a>b)相當(dāng)于:
dest=src0x1.0+(-src2),
于指令解碼階段,指令解碼單元120可更將來源數(shù)據(jù)src2轉(zhuǎn)為-src2,并將轉(zhuǎn)換結(jié)果儲(chǔ)存至指定的來源存儲(chǔ)裝置。最后,輸出的符號(hào)位為fcmp_gt操作的運(yùn)算結(jié)果。
例如,min操作(=min(a,b))相當(dāng)于:
dest=src0x1.0+(-src2),
于指令解碼階段,指令解碼單元120可更將來源數(shù)據(jù)src2轉(zhuǎn)為-src2,并將轉(zhuǎn)換結(jié)果儲(chǔ)存至指定的來源存儲(chǔ)裝置。最后,依據(jù)計(jì)算后的符號(hào)位輸出來源數(shù)據(jù)src0或src2,作為min操作的運(yùn)算結(jié)果。
圖4是依據(jù)本發(fā)明實(shí)施例的算術(shù)邏輯組的第一類運(yùn)算通道的硬件架構(gòu)圖。第一類運(yùn)算通道可實(shí)施于運(yùn)算單元210,包含ex0;ex1以及wb階段的硬件,其中每階段的硬件通過延遲電路(delaycircuit)(以“d”表示)耦接至上一階段的硬件。運(yùn)算單元210可根據(jù)組控制器290的指示,運(yùn)行于pp模式或fp模式。ex0階段的硬件包含17比特乘法器411及10比特加法器413,ex1階段的硬件包含位移選擇器431、32比特加法器432、多任務(wù)器433及434、34比特位移器435、34比特加法器436及10比特選擇器437。
以下說明運(yùn)算單元210當(dāng)從組控制器290接收到pp模式的指示時(shí),運(yùn)行于pp模式的處理:于ex0階段,為完成src0xsrc1的計(jì)算,17比特乘法器411將pp數(shù)值src0的尾數(shù)(表示為src0_mant)乘以pp數(shù)值src1的尾數(shù)(表示為src1_mant)以產(chǎn)生32比特的結(jié)果,而10比特加法器413將pp數(shù)值src0的指數(shù)(表示為src0_exp)加上pp數(shù)值src1的指數(shù)(表示為src1_exp)以產(chǎn)生10比特的結(jié)果。于ex1階段,為完成(src0xsrc1)+src2的計(jì)算,10比特選擇器437比較pp數(shù)值src2的指數(shù)(表示為src2_exp)與10比特加法器413的輸出結(jié)果,并且輸出較大者作為指數(shù)的最終結(jié)果。于此須注意的是,于pp模式中,由于不需要合并其它運(yùn)算單元230、250及270的結(jié)果,位移選擇器431及32比特加法器會(huì)直接向下傳遞17比特乘法器的輸出。此外,10比特選擇器437更依據(jù)比較結(jié)果控制多任務(wù)器433及434,用以將17比特乘法器411的輸出及pp數(shù)值src2的尾數(shù)(表示為src2_mant)中的一者輸出至34比特位移器435,并且將另一者輸出至34比特加法器436。34比特加法器436將34比特位移器435的輸出加上多任務(wù)器434的輸出,用以產(chǎn)生尾數(shù)的最終結(jié)果。
wb階段的硬件包含歸一化單元(normalizationunit)450。為了讓運(yùn)算單元210可輸出pp數(shù)值的結(jié)果,指令解碼單元120發(fā)出訊號(hào)out_pp給34比特位移器451及10比特加法器453,使得34比特位移器451將34位加法器436的輸出(亦即是尾數(shù))舍棄7比特成為27比特,以及使得10比特加法器453將10比特選擇器437的輸出(亦即是指數(shù))舍棄1比特成為9比特。接著,比較器455、34比特位移器451及10比特加法器453形成一個(gè)回路,用以進(jìn)行浮點(diǎn)數(shù)的歸一化。比較器455持續(xù)比較34比特位移器451的輸出的最高位是否為1,直到34比特位移器451的輸出的最高位為1為止。于比較的每一回合,如果不是,比較器455輸出致能訊號(hào)en給34比特位移器451及10比特加法器453,使得34比特位移器451將27比特的結(jié)果左移1個(gè)比特,以及使得10比特加法器453將9比特的結(jié)果加上-1。合并器457合并1比特的符號(hào)位、16比特的尾數(shù)(34比特位移器451的最終輸出)及7比特的指數(shù)(10比特加法器453的最終輸出),并輸出合并結(jié)果(如圖3b所示)。合并結(jié)果可寫入目的地存儲(chǔ)裝置,或輸出至后處理單元。
由于fmad操作及如上所述的其它基本操作的結(jié)果常接著與0比較,編譯器可于fmad操作或如上所述的其它基本操作后加上一個(gè)后邏輯指令,例如:
alu-instrdest,src1,src0
+pxxxdstprf,dest.cmp0,[!]srcp0
其中,alu-instr代表fmad操作或如上所述的其它基本操作,src0及src1代表來源數(shù)據(jù),dest代表目的地?cái)?shù)據(jù),dest.cmp0代表目的地?cái)?shù)據(jù)與0的比較結(jié)果及[!]srcp0代表來源斷言寄存器里的數(shù)據(jù),作為后邏輯操作的一個(gè)來源操作數(shù),xxx代表指定的比較操作,羅列如下表:
為提升效能,運(yùn)算單元210可于wb階段加上后邏輯單元470,而后邏輯單元470包含比較器471。當(dāng)指令解碼單元120解譯到后邏輯指令時(shí),輸出3比特的比較操作碼pcmp_op給比較器471,用以驅(qū)動(dòng)比較器471依據(jù)比較操作碼進(jìn)行目的地?cái)?shù)據(jù)與零間的指定比較操作,并且輸出比較結(jié)果。于此須注意的是,此目的地?cái)?shù)據(jù)可為浮點(diǎn)數(shù)并且未進(jìn)行歸一化。
當(dāng)pcmp_op為0時(shí),比較器471直接輸出0。
當(dāng)pcmp_op為1時(shí),比較器471判斷運(yùn)算結(jié)果的符號(hào)位、34比特加法器436及10比特選擇器437的輸出。當(dāng)符號(hào)位為0且34比特加法器436及10比特選擇器437的輸出皆不為0時(shí),輸出1;否則,輸出0。
當(dāng)pcmp_op為2時(shí),比較器471判斷運(yùn)算結(jié)果的符號(hào)位、34比特加法器436及10比特選擇器437的輸出。當(dāng)符號(hào)位、34比特加法器436及10比特選擇器437的輸出皆為0時(shí),輸出1;否則,輸出0。
當(dāng)pcmp_op為3時(shí),比較器471只需判斷運(yùn)算結(jié)果的符號(hào)位。當(dāng)符號(hào)位為0時(shí),輸出1;否則,輸出0。
當(dāng)pcmp_op為4時(shí),比較器471只需判斷運(yùn)算結(jié)果的符號(hào)位。當(dāng)符號(hào)位為1時(shí),輸出1;否則,輸出0。
當(dāng)pcmp_op為5時(shí),比較器471判斷運(yùn)算結(jié)果的符號(hào)位、34比特加法器436及10比特選擇器437的輸出。當(dāng)符號(hào)位、34比特加法器436及10比特選擇器437的輸出中的至少一者不為0時(shí),輸出1;否則,輸出0。
當(dāng)pcmp_op為6時(shí),比較器471判斷運(yùn)算結(jié)果的符號(hào)位、34比特加法器436及10比特選擇器437的輸出。當(dāng)符號(hào)位、34比特加法器436及10比特選擇器437的輸出皆為0,或者符號(hào)位為1時(shí),輸出1;否則,輸出0。
當(dāng)pcmp_op為7時(shí),比較器471直接輸出1。
藉由后邏輯單元470,可于輸出fmad操作或如上所述的其它基本操作的運(yùn)算結(jié)果時(shí),同時(shí)輸出針對(duì)運(yùn)算結(jié)果的邏輯比較結(jié)果。
圖5是依據(jù)本發(fā)明實(shí)施例的算術(shù)邏輯組的第二類運(yùn)算通道的硬件架構(gòu)圖。第二類運(yùn)算通道可實(shí)施于運(yùn)算單元230、250及270中的每一者,包含ex0;ex1以及wb階段的硬件,其中每階段的硬件通過延遲電路(以“d”表示)耦接至上一階段的硬件。運(yùn)算單元230、250及270中的每一者可根據(jù)組控制器290的指示,運(yùn)行于pp模式或fp模式。ex0階段的硬件包含17比特乘法器511及9比特加法器513,ex1階段的硬件包含多任務(wù)器531及532、22比特位移器533、22比特加法器535及9比特選擇器537。
以下說明運(yùn)算單元230、250及270中的每一者當(dāng)從組控制器290接收到pp模式的指示時(shí),運(yùn)行于pp模式的處理:于ex0階段,為完成src0xsrc1的計(jì)算,17比特乘法器511將pp數(shù)值src0的尾數(shù)(表示為src0_mant)乘以pp數(shù)值src1的尾數(shù)(表示為src1_mant)以產(chǎn)生34比特的結(jié)果,而9比特加法器513將pp數(shù)值src0的指數(shù)(表示為src0_exp)加上pp數(shù)值src1的指數(shù)(表示為src1_exp)以產(chǎn)生9比特的結(jié)果。于此須注意的是,9比特加法器513只運(yùn)行于pp模式,并且,當(dāng)從組控制器290接收到運(yùn)行于fp模式的指示時(shí),9比特加法器513不運(yùn)行。于ex1階段,當(dāng)從組控制器290接收到運(yùn)行于pp模式的指示時(shí),解多任務(wù)器539將17比特乘法器511連接至多任務(wù)器531及532。為完成(src0xsrc1)+src2的計(jì)算,9比特選擇器537比較pp數(shù)值src2的指數(shù)(表示為src2_exp)與9比特加法器513的輸出結(jié)果,并且輸出較大者作為指數(shù)的最終結(jié)果。9比特選擇器537更依據(jù)比較結(jié)果控制多任務(wù)器531及532,用以將17比特乘法器511的輸出及pp數(shù)值src2的尾數(shù)(表示為src2_mant)中的一者輸出至22比特位移器533,并且將另一者輸出至22比特加法器535。22比特加法器535將22比特位移器533的輸出加上多任務(wù)器532的輸出,用以產(chǎn)生尾數(shù)的最終結(jié)果。
wb階段的硬件包含歸一化單元550。比較器555、22比特位移器551及9比特加法器553形成一個(gè)循環(huán),進(jìn)行歸一化。比較器555持續(xù)比較22比特位移器551的輸出的最高位是否為1,直到22比特位移器551的輸出的最高位為1為止。于比較的每一回合,如果不是,比較器555輸出訊號(hào)en給22比特位移器551及9比特加法器553,使得22比特位移器551將22比特的結(jié)果左移1個(gè)比特,以及使得9比特加法器553將9比特的結(jié)果加-1。合并器557合并1比特的符號(hào)位、16比特的尾數(shù)(22比特位移器551的最終輸出)及7比特的指數(shù)(9比特加法器553的最終輸出),并輸出合并結(jié)果(如圖3b所示)。合并結(jié)果可寫入目的地存儲(chǔ)裝置,或輸出至后處理單元。
為提升效能,運(yùn)算單元230、250及270中的每一者可于wb階段加上后邏輯單元570,而后邏輯單元570包含比較器571。比較器571的技術(shù)細(xì)節(jié)可參考如上所述比較器471的說明,為求簡潔不再贅述。
此外,運(yùn)算單元210、230、250及270可合并完成fp數(shù)值的fmad操作。當(dāng)運(yùn)行于fp模式,運(yùn)算單元230、250及270只計(jì)算src0xsrc1的尾數(shù)部分,運(yùn)算單元210合并運(yùn)算單元230、250及270的結(jié)果,并完成src0xsrc1+src2的剩余部分。
以下說明運(yùn)算單元230當(dāng)從組控制器290接收到fp模式的指示時(shí),運(yùn)行于fp模式的處理:于ex0階段,為完成src0xsrc1的尾數(shù)計(jì)算,17比特乘法器511將fp數(shù)值src0的尾數(shù)的高8比特(表示為src0_h8)乘以fp數(shù)值src1的尾數(shù)的低16比特(表示為src1_l16)。于ex1階段,解多任務(wù)器539將17比特乘法器511連接至運(yùn)算單元210中的位移選擇器431,用以輸出17比特乘法器511的計(jì)算結(jié)果至位移選擇器431。
以下說明運(yùn)算單元250當(dāng)從組控制器290接收到fp模式的指示時(shí),運(yùn)行于fp模式的處理:于ex0階段,為完成src0xsrc1的尾數(shù)計(jì)算,17比特乘法器511將fp數(shù)值src0的尾數(shù)的低16比特(表示為src0_l16)乘以fp數(shù)值src1的尾數(shù)的高8比特(表示為src1_h8)。于ex1階段,解多任務(wù)器539將17比特乘法器511連接至運(yùn)算單元210中的位移選擇器431,用以輸出17比特乘法器511的計(jì)算結(jié)果至位移選擇器431。
以下說明運(yùn)算單元270當(dāng)從組控制器290接收到fp模式的指示時(shí),運(yùn)行于fp模式的處理:于ex0階段,為完成src0xsrc1的尾數(shù)計(jì)算,17比特乘法器511將fp數(shù)值src0的尾數(shù)的高8比特(表示為src0_h8)乘以fp數(shù)值src1的尾數(shù)的高8比特(表示為src1_h8)。于ex1階段,解多任務(wù)器539將17比特乘法器511連接至運(yùn)算單元210中的位移選擇器431,用以輸出17比特乘法器511的計(jì)算結(jié)果至位移選擇器431。
以下說明運(yùn)算單元210當(dāng)從組控制器290接收到fp模式的指示時(shí),運(yùn)行于fp模式的處理:于ex0階段,為完成src0xsrc1的計(jì)算,17比特乘法器411將fp數(shù)值src0的尾數(shù)的低16比特(表示為src0_l16)乘以fp數(shù)值src1的尾數(shù)的低16比特(表示為src1_l16),而10比特加法器413將fp數(shù)值src0的指數(shù)(表示為src0_exp)加上fp數(shù)值src1的指數(shù)(表示為src1_exp)以產(chǎn)生10比特的結(jié)果。于ex1階段,為合并運(yùn)算單元210、230、250及270于ex0階段的src0xsrc1的尾數(shù)運(yùn)算結(jié)果,位移選擇器431將17比特乘法器411的運(yùn)算結(jié)果右移16比特并輸出至32比特加法器432,將運(yùn)算單元230的17比特乘法器511的運(yùn)算結(jié)果輸出至32比特加法器432,將運(yùn)算單元250的17比特乘法器511的運(yùn)算結(jié)果輸出至32比特加法器432,及將運(yùn)算單元270的17比特乘法器411的運(yùn)算結(jié)果左移16比特并輸出至32比特加法器432。32比特加法器432加總四個(gè)值以產(chǎn)生src0xsrc1的尾數(shù)運(yùn)算結(jié)果。為完成(src0xsrc1)+src2的計(jì)算,10比特選擇器437比較fp數(shù)值src2的指數(shù)(表示為src2_exp)與10比特加法器413的輸出結(jié)果,并且輸出較大者作為指數(shù)的最終結(jié)果。此外,10比特選擇器437更依據(jù)比較結(jié)果控制多任務(wù)器433及434,用以將32比特加法器432的輸出及fp數(shù)值src2的尾數(shù)(表示為src2_mant)中的一者輸出至34比特位移器435,并且將另一者輸出至34比特加法器436。34比特加法器436將34比特位移器435的輸出加上多任務(wù)器434的輸出,用以產(chǎn)生尾數(shù)的最終結(jié)果。
為了讓運(yùn)算單元210可輸出fp數(shù)值的結(jié)果,指令解碼單元120發(fā)出訊號(hào)out_fp給34比特位移器451及10比特加法器453,使得34比特位移器451保留并處理34位加法器436的原始輸出,以及使得10比特加法器453保留并處理10比特選擇器437的原始輸出。接著,比較器455、34比特位移器451及10比特加法器453形成一個(gè)循環(huán),進(jìn)行歸一化。于每一回合,比較器455比較34比特位移器451的輸出的最高位是否為1。如果不是,比較器455輸出致能訊號(hào)en給34比特位移器451及10比特加法器453,使得34比特位移器451將27比特的結(jié)果左移1個(gè)比特,以及使得10比特加法器453將9比特的結(jié)果加上-1。34比特位移器451及10比特加法器453的調(diào)整持續(xù)進(jìn)行到比較器455偵測到34比特位移器451的輸出的最高位為1為止。合并器457合并1比特的符號(hào)位、23比特的尾數(shù)(34比特位移器451的最終輸出)及7比特的指數(shù)(10比特加法器453的最終輸出),并輸出合并結(jié)果(如圖3a所示)。
由于比較器471于fp模式的運(yùn)作類似于pp模式,因此,可參考比較器471于pp模式的描述,為求簡潔不再贅述。
從一個(gè)面向來說,為了讓四個(gè)算術(shù)邏輯組200a至200d中的每一者可以并行執(zhí)行4組部分精度數(shù)據(jù)的運(yùn)算或執(zhí)行1組全精度數(shù)據(jù)的運(yùn)算。本發(fā)明的實(shí)施例提出一種全精度及部分精度數(shù)值的計(jì)算裝置,包含第一類運(yùn)算通道(如運(yùn)算單元210);及多個(gè)第二類型通道(如運(yùn)算單元230、250及270),耦接于第一類運(yùn)算通道。當(dāng)運(yùn)行于第一模式(例如,pp模式)時(shí),第一類運(yùn)算通道及第二類運(yùn)算通道中的每一者獨(dú)立完成一組第一類型數(shù)據(jù)(例如,pp數(shù)據(jù))的計(jì)算。當(dāng)運(yùn)行于第二模式(例如,fp模式)時(shí),第二類運(yùn)算通道的每一者計(jì)算一組第二類型數(shù)據(jù)(例如,fp數(shù)據(jù))的一部份以產(chǎn)生部分結(jié)果,并且第二類運(yùn)算通道合并第一類運(yùn)算通道輸出的部分結(jié)果并使用合并結(jié)果完成該組第二類型數(shù)據(jù)的計(jì)算。
由于數(shù)學(xué)運(yùn)算結(jié)果常接著與0比較,從另一個(gè)面向來說,本發(fā)明的實(shí)施例提出一種整合算術(shù)及邏輯處理的裝置,包含計(jì)算裝置(例如,包含圖4及圖5中ex0及ex1階段的裝置)及后邏輯單元470或570。計(jì)算裝置計(jì)算多個(gè)來源數(shù)據(jù)(例如,pp/fp數(shù)據(jù)src0、src1及src2)以產(chǎn)生第一目的地?cái)?shù)據(jù)并輸出第一目的地?cái)?shù)據(jù)(包含浮點(diǎn)數(shù)的符號(hào)位、尾數(shù)及指數(shù))。后邏輯單元,耦接至計(jì)算裝置,用以進(jìn)行第一目的地?cái)?shù)據(jù)與零之間的比較操作,以及輸出比較結(jié)果。
為了讓四個(gè)算術(shù)邏輯組200a至200d中的每一者可以輸出部分精度數(shù)據(jù)或全精度數(shù)據(jù)的運(yùn)算結(jié)果,從更另一個(gè)面向來說,本發(fā)明的實(shí)施例另提出一種整合算術(shù)及邏輯處理的裝置,包含計(jì)算裝置及歸一化單元。計(jì)算裝置計(jì)算多個(gè)來源數(shù)據(jù)以產(chǎn)生第一目的地?cái)?shù)據(jù)并輸出第一目的地?cái)?shù)據(jù)。歸一化單元,耦接至計(jì)算裝置,當(dāng)接收到輸出為第一類型數(shù)據(jù)的指示out_pp時(shí),將第一目的地?cái)?shù)據(jù)進(jìn)行歸一化以產(chǎn)生第一類型的第二目的地?cái)?shù)據(jù)(例如,pp數(shù)據(jù));當(dāng)接收到輸出為第二類型數(shù)據(jù)的指示out_fp時(shí),將第一目的地?cái)?shù)據(jù)進(jìn)行歸一化以產(chǎn)生第二類型的第二目的地?cái)?shù)據(jù)(例如,fp數(shù)據(jù))。
雖然圖2、4及5中包含了以上描述的組件,但不排除在不違反發(fā)明的精神下,使用更多其它的附加組件,已達(dá)成更佳的技術(shù)效果。此外,雖然附圖的處理步驟采用特定的順序來執(zhí)行,但是在不違反發(fā)明精神的情況下,熟習(xí)此技藝人士可以在達(dá)到相同效果的前提下,修改這些步驟間的順序,所以,本發(fā)明并不局限于僅使用如上所述的順序。
雖然本發(fā)明使用以上實(shí)施例進(jìn)行說明,但需要注意的是,這些描述并非用以限縮本發(fā)明。相反地,此發(fā)明涵蓋了熟習(xí)此技藝人士顯而易見的修改與相似設(shè)置。所以,申請(qǐng)權(quán)利要求范圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設(shè)置。
【符號(hào)說明】
id指令解碼階段;
df數(shù)據(jù)提取階段;
ex執(zhí)行階段;
ex0零級(jí)執(zhí)行階段;
ex1一級(jí)執(zhí)行階段;
wb回寫階段;
110指令請(qǐng)求;
120指令解碼單元;
121通用緩存器地址;
123常數(shù)緩存器地址;
130數(shù)據(jù)提取單元;
131通用緩存器地址;
133數(shù)據(jù);
135常數(shù);
140執(zhí)行單元;
141數(shù)據(jù)或常數(shù);
151解多任務(wù)器;
153算術(shù)單元;
155比較/邏輯單元;
157選擇/旁路單元;
160回寫單元;
171判斷單元;
173解多任務(wù)器;
181加載/儲(chǔ)存單元;
183取樣單元;
185特殊函數(shù)單元;
s210~s270方法步驟;
200a~200d算術(shù)邏輯組;
210(第一類)運(yùn)算單元;
230、250、270(第二類)運(yùn)算單元;
290組控制器;
310a、330a符號(hào)位;
310b、330b尾數(shù);
310c、330c指數(shù);
src0_mant、src1_mant、src2_mant來源數(shù)據(jù)的尾數(shù);
src0_exp、src1_exp、src2_exp來源數(shù)據(jù)的指數(shù);
sign符號(hào)位;
d延遲電路;
mul_lan1、mul_lan2、mul_lan3尾數(shù)的乘法部分結(jié)果;
out_fp/pp輸出模式;
en致能訊號(hào);
41117比特乘法器;
41310比特加法器;
431位移選擇器;
43232比特加法器;
433、434多任務(wù)器;
43534比特位移器;
43634比特加法器;
43710比特選擇器;
450歸一化單元;
45134比特位移器;
45310比特加法器;
455比較器;
457合并器;
470后邏輯單元;
471比較器;
51117比特乘法器;
5139比特加法器;
531、532解多任務(wù)器;
53322比特位移器;
53522比特加法器;
5379比特選擇器;
550歸一化單元;
55122比特位移器;
5539比特加法器;
555比較器;
557合并器;
570后邏輯單元;
571比較器。