本技術(shù)涉及數(shù)據(jù)處理的領(lǐng)域。已知提供了支持整數(shù)算法和浮點(diǎn)算法的數(shù)據(jù)處理系統(tǒng)。本公開的至少一些實(shí)施例提供了用于處理數(shù)據(jù)的裝置,該裝置包括:關(guān)于位有效性使得一個(gè)或多個(gè)輸入操作數(shù)中的任意輸入操作數(shù)與針對輸出存儲(chǔ)元件指定的可編程有效性參數(shù)配準(zhǔn)以提供一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù)的配準(zhǔn)電路;以及耦合到所述配準(zhǔn)電路的算術(shù)電路,該算術(shù)電路接收所述一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù),以對所述一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù)執(zhí)行算術(shù)運(yùn)算來生成結(jié)果值并且將所述結(jié)果值存儲(chǔ)到所述輸出存儲(chǔ)元件中,其中所述可編程有效性參數(shù)與配準(zhǔn)的結(jié)果值無關(guān)。本公開的至少一些實(shí)施例提供了用于處理數(shù)據(jù)的設(shè)備,該設(shè)備包括:用于關(guān)于位有效性使得一個(gè)或多個(gè)輸入操作數(shù)中的任意輸入操作數(shù)與針對輸出存儲(chǔ)元件指定的可編程有效性參數(shù)配準(zhǔn)以提供一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù)的配準(zhǔn)裝置;以及耦合到所述配準(zhǔn)裝置的算術(shù)裝置,該算術(shù)裝置用于接收所述一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù),以對所述一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù)執(zhí)行算術(shù)運(yùn)算來生成結(jié)果值并且將所述結(jié)果值存儲(chǔ)到所述輸出存儲(chǔ)元件中,其中所述可編程有效性參數(shù)與配準(zhǔn)的結(jié)果值無關(guān)。本公開的至少一些實(shí)施例提供了處理數(shù)據(jù)的方法,該方法包括:。關(guān)于位有效性使得一個(gè)或多個(gè)輸入操作數(shù)中的任意輸入操作數(shù)與針對輸出存儲(chǔ)元件指定的可編程有效性參數(shù)配準(zhǔn)以提供一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù);接收所述一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù);對所述一個(gè)或多個(gè)配準(zhǔn)的輸入操作數(shù)執(zhí)行算術(shù)運(yùn)算來生成結(jié)果值;以及將所述結(jié)果值存儲(chǔ)到所述輸出存儲(chǔ)元件中,其中所述可編程有效性參數(shù)與配準(zhǔn)的所述結(jié)果值無關(guān)?,F(xiàn)在將參考附圖僅通過示例的方式來描述示例實(shí)施例,其中:圖1概要地示出了選擇進(jìn)位加法器;圖2概要地示出了先行進(jìn)位加法器;圖3示出了使浮點(diǎn)數(shù)加到hpa數(shù)的方式;圖4示出了數(shù)字的示例hpa表示;圖5是在將hpa數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)時(shí)生成有效數(shù)字的示例;圖6示出了使用hpa算法使若干浮點(diǎn)值相加的示例,其中hpa數(shù)適合硬件大??;圖7示出了使用hpa算法使若干浮點(diǎn)值相加的示例,其中hpa數(shù)比硬件大小寬;圖8概要地示出了數(shù)據(jù)處理系統(tǒng);圖9概要地示出了用于表示將在數(shù)據(jù)處理系統(tǒng)內(nèi)被操縱的數(shù)字的不同格式;圖10概要地示出了雙精度浮點(diǎn)值和hpa值之間的示例關(guān)系;圖11概要地示出了用于使輸入操作數(shù)與結(jié)果hpa寄存器配準(zhǔn)的電路;圖12概要地示出了用于根據(jù)向量hpa數(shù)中的多個(gè)組分以及程序指令對該hpa數(shù)執(zhí)行處理運(yùn)算的電路,其中不同組分被并行地處理;圖13概要地示出了用于根據(jù)向量hpa數(shù)中的多個(gè)組分以及程序指令對該hpa數(shù)執(zhí)行處理運(yùn)算的電路,其中不同組分被串行地處理;圖14概要地示出了關(guān)于使用hpa數(shù)執(zhí)行的處理的例外指示生成;圖15示出了具有處理電路的裝置的示例,該處理電路用于基于可編程控制數(shù)據(jù)所指定的目標(biāo)有效性和/或目標(biāo)大小來生成結(jié)果;圖16示出了設(shè)置算術(shù)運(yùn)算的高有效性邊界和低有效性邊界的示例;圖17示出了高精度錨定(hpa)數(shù)據(jù)格式的示例;圖18示出了用于存儲(chǔ)元數(shù)據(jù)(包括錨定值)的元數(shù)據(jù)存儲(chǔ)元件的示例,元數(shù)據(jù)指示將被存儲(chǔ)在相應(yīng)的數(shù)據(jù)存儲(chǔ)元件中的數(shù)據(jù)值的目標(biāo)有效性;圖19示出了包括用于執(zhí)行并行處理線路的多個(gè)處理單元的處理電路的示例;圖20示出了用于使一系列浮點(diǎn)值相加的累加運(yùn)算的示例;圖21示出了將浮點(diǎn)值轉(zhuǎn)換為具有hpa數(shù)據(jù)格式的值的示例;以及圖22示出了將具有hpa數(shù)據(jù)格式的值轉(zhuǎn)換為浮點(diǎn)值的示例。這里公開了新的數(shù)據(jù)類型和新的指令,它們允許快速且正確地累加程序員可選的范圍內(nèi)的浮點(diǎn)(fp)數(shù)。對將容納大部分問題的適度范圍而言,這種累加比fp加法塊,且是結(jié)合的。結(jié)合加法允許問題被并行化,同時(shí)仍給出可重現(xiàn)且正確的結(jié)果,使得與現(xiàn)有硬件相比能夠加速例如100倍或更多倍。我們相信這些益處在高性能計(jì)算(hpc)領(lǐng)域是極為誘人的,對于許多非hpc應(yīng)用也是引人注目的。浮點(diǎn)(fp)算法的已知問題在于它是非結(jié)合的,這一事實(shí)使得和是或然性的:·即使在使3個(gè)數(shù)相加時(shí)程序員也需要為完全不同的結(jié)果而煩惱·程序員使用比他們所需要的更廣泛的格式以期望避免這些完全不同的結(jié)果·程序員不能方便地使代碼并行化,因?yàn)槌且試?yán)格相同的順序進(jìn)行計(jì)算否則和是不可再現(xiàn)的例如,在單精度中220+(-244+244)=220但是(220+-244)+244=0取決于運(yùn)算被執(zhí)行的順序,結(jié)果是一百萬或零。因?yàn)橹笖?shù)相差24所以這是一個(gè)極端的示例,但是如果指數(shù)相差1,或者即使全部指數(shù)都是相同的并且我們使得多個(gè)3項(xiàng)相加,那么我們也能夠得到不同的答案。c編程語言通過要求和被從左到右按順序地進(jìn)行評估而解決了再現(xiàn)性問題,但是這對正確性沒有任何幫助,并且使并行化變得不可能。對高性能計(jì)算(hpc)而言,這些問題是尤為突出的,其中程序可能需要使成千上萬項(xiàng)相加。程序員想要使這些問題并行化,但是缺乏再現(xiàn)性使得調(diào)試比通常情況更為困難。即使完美地對機(jī)器進(jìn)行重新編程,那些機(jī)器的不同配置也將產(chǎn)生不同的答案。浮點(diǎn)數(shù)浮點(diǎn)型(fp)是使用少量比特來逼近實(shí)數(shù)的有用的方式。ieee754-2008fp標(biāo)準(zhǔn)處理針對fp數(shù)的多種不同格式,但是其中三個(gè)為二進(jìn)制64(也稱作雙精度,或dp)、二進(jìn)制32(也稱作單精度,或sp)、以及二進(jìn)制16(也稱作半精度,或hp)。數(shù)字64、32和16指的是每種格式所需的比特?cái)?shù)。表示fp數(shù)十分類似于科學(xué)課上所教導(dǎo)的“科學(xué)記數(shù)法”,其中不寫負(fù)二百萬而是寫作-2.0×106。該數(shù)的各部分為:符號(在此情形下為負(fù)號)、有效數(shù)字(2.0)、指數(shù)的基數(shù)(10)、以及指數(shù)(6)。全部這些部分在fp數(shù)中有類似物,但是存在差異,最主要的差異是這些組成部分被存儲(chǔ)為二進(jìn)制數(shù),并且指數(shù)的基數(shù)總是2。更確切地說,fp數(shù)包括符號位、一些有偏倚的指數(shù)位、以及一些小數(shù)位。具體地,dp、sp和hp格式包含以下位:格式符號指數(shù)小數(shù)指數(shù)偏倚dp[63:0]6362:52(11位)51:0(52位)1023sp[31:0]3130:23(8位)22:0(23位)127hp[15:0]1514:10(5位)9:0(10位)15對于負(fù)數(shù)符號是1,對于正數(shù)符號是0。每個(gè)數(shù)包括零在內(nèi)都有符號。指數(shù)是偏倚的,這表示真正的指數(shù)不同于該數(shù)字中所存儲(chǔ)的指數(shù)。例如,偏倚的sp指數(shù)位8比特長且范圍為從0到255。指數(shù)0和255是特殊情形,但是全部其他指數(shù)具有偏倚127,這表示真正的指數(shù)比偏倚的指數(shù)小127。最小的偏倚的指數(shù)是1,其對應(yīng)于真正的指數(shù)-126。最大的偏倚的指數(shù)是254,其對應(yīng)于真正的指數(shù)127。hp和dp指數(shù)利用上表中所指示的偏倚以相同的方式起作用。sp指數(shù)255(或dp指數(shù)2047或hp指數(shù)31)被預(yù)留用于無窮大一級稱作nan的特殊符號(不是數(shù)字)。無窮大(可以是正的或負(fù)的)具有零小數(shù)。具有指數(shù)255和非零小數(shù)的任意數(shù)字是nan。無窮大提供了飽和值,所以它實(shí)際上表示類似于“該計(jì)算生成了大于以此格式能夠表示的最大數(shù)字的數(shù)字”的事情。對于并非用數(shù)學(xué)方法在實(shí)數(shù)上定義的運(yùn)算(例如,除以零或取負(fù)數(shù)的平方根)返回nan。在任意格式中,指數(shù)零被預(yù)留用于次正規(guī)數(shù)和零。正規(guī)數(shù)表示如下值:-1符號×1.小數(shù)×2e其中e是從偏移的指數(shù)計(jì)算得出的真實(shí)指數(shù)。項(xiàng)1.小數(shù)被稱作有效數(shù)字,并且1不被存儲(chǔ)為fp數(shù)的一部分,而是從指數(shù)推導(dǎo)出的。除零和最大指數(shù)之外的全部指數(shù)指示1.小數(shù)形式的有效數(shù)字。指數(shù)零指示0形式的有效數(shù)字,并且真正的指數(shù)等于1-給定格式的偏倚。這樣的數(shù)字被稱為次正規(guī)數(shù)(歷史上這些數(shù)字被稱為非正規(guī)數(shù),但是現(xiàn)代用法偏好術(shù)語次正規(guī)數(shù))。具有等于零的指數(shù)部分和小數(shù)部分的數(shù)字是零。下表具有hp格式的一些示例數(shù)字。這些條目是二進(jìn)制的,其中添加了字符“_”以增加可讀性。注意,次正規(guī)條目(該表的低第4行,具有零指數(shù))與上一行中的正規(guī)條目相比產(chǎn)生了不同的有效數(shù)字。符號5位指數(shù)10位小數(shù)11位有效數(shù)字值00111100_0000_0000100_0000_00001.0×2010111010_0000_0000110_0000_0000-1.1×2-100000110_0000_0000110_0000_00001.1×2-1400000010_0000_0000010_0000_00000.1×2-1411111100_0000_0000-無窮大01111100_1111_0011nanfp實(shí)現(xiàn)方式的大部分復(fù)雜度是由次正規(guī)數(shù)帶來的,因此經(jīng)常通過微代碼或軟件來處理次正規(guī)數(shù)。一些處理器在硬件中處理次正規(guī)數(shù),與軟件或微代碼實(shí)現(xiàn)方式相比使這些運(yùn)算加速了10到100倍。整數(shù)、定點(diǎn)型、浮點(diǎn)型處理符號的fp方式被稱為符號數(shù)值,并且它不同于整數(shù)被存儲(chǔ)在計(jì)算機(jī)中的常規(guī)方式(二進(jìn)制補(bǔ)碼)。在符號數(shù)值表示中,同一數(shù)字的正版本和負(fù)版本的不同之處僅在于符號位。由符號位和3個(gè)有效數(shù)字位構(gòu)成的4位符號數(shù)值整數(shù)將如下來表示正一或負(fù)一:+1=0001-1=1001在二進(jìn)制補(bǔ)碼表示中,n位整數(shù)i由二進(jìn)制n+1位值2n+i的低階n位來表示,所以4位二進(jìn)制補(bǔ)碼整數(shù)將如下來表示正一或負(fù)一:+1=0001-1=1111二進(jìn)制補(bǔ)碼格式在實(shí)踐中通用于有符號整數(shù),因?yàn)樗喕擞?jì)算機(jī)算法。定點(diǎn)數(shù)看起來與整數(shù)一模一樣,但事實(shí)上表示具有某些小數(shù)位的值。傳感器數(shù)據(jù)經(jīng)常是定點(diǎn)格式的,并且存在在廣泛采用fp之前編寫的大量定點(diǎn)軟件。以定點(diǎn)數(shù)進(jìn)行工作是十分冗長乏味的,因?yàn)槌绦騿T不得不跟蹤“二進(jìn)制點(diǎn)”(即,數(shù)字的整數(shù)部分和小數(shù)部分的分隔符),并且還不得不不斷地對數(shù)字進(jìn)行移位以保持這些位在正確的地方。fp數(shù)不具有這種困難,因此能夠在定點(diǎn)數(shù)和fp數(shù)之間轉(zhuǎn)換是可取的。能夠進(jìn)行這種轉(zhuǎn)換還意味著我們能夠繼續(xù)使用定點(diǎn)軟件和數(shù)據(jù),但是在編寫新軟件時(shí)不再限于定點(diǎn)型。舍入fp數(shù)ieee-754標(biāo)準(zhǔn)要求大部分fp運(yùn)算就像該運(yùn)算是以未舍入的范圍和精度實(shí)現(xiàn)的那樣被計(jì)算,然后進(jìn)行舍入以適應(yīng)于fp數(shù)。如果計(jì)算嚴(yán)格符合fp數(shù),則該值總是被返回,但是計(jì)算結(jié)果經(jīng)常是介于兩個(gè)連續(xù)浮點(diǎn)數(shù)之間的值。舍入是選取兩個(gè)連續(xù)數(shù)字中哪個(gè)數(shù)字應(yīng)當(dāng)被返回的過程。存在多種舍入方式,稱為舍入模式;其中的六個(gè)如下表所示:該定義并沒有告訴我們?nèi)绾我匀魏吻袑?shí)可行的方式進(jìn)行舍入。一種常用的實(shí)現(xiàn)方式是進(jìn)行運(yùn)算,關(guān)注截?cái)嘀?即,滿足fp格式的值)以及全部剩余位,并且如果某些條件成立則調(diào)整截?cái)嘀?。這些計(jì)算全部都基于:l-(最低)截?cái)嘀档淖畹陀行籫-(防護(hù))下一個(gè)最高有效位(即,第一位未被包括在截?cái)嘀?s-(粘滯)對并非截?cái)嗟囊徊糠值娜渴S辔坏倪壿嫽蛟诮o定這三個(gè)值以及截?cái)嘀禃r(shí),我們總能根據(jù)下表計(jì)算出正確舍入的值:模式改變到截?cái)嘀祌ne如果(l&g)|(g&s)則增大rna如果g則增大rz無rp如果正的&(g|s)則增大rm如果負(fù)的&(g|s)則增大rx如果g|s則設(shè)置l例如,考慮使兩個(gè)4為有效數(shù)字相乘,然后舍入到4位有效數(shù)字。sig1=1011(十進(jìn)制11)sig2=0111(十進(jìn)制7)相乘產(chǎn)生sig1×sig2=1001_101(十進(jìn)制77)l_gss截?cái)嗟?位結(jié)果的最低有效位被標(biāo)注為l,下一位是g,并且s是被標(biāo)注為s的剩余位的邏輯或(即,s=0|1=1)。為進(jìn)行舍入,我們根據(jù)舍入模式以及上表的計(jì)算來調(diào)整4位結(jié)果(1001)。所以。例如,在rna舍入中,g被設(shè)置為使得我們得到1001+1=1010。對于rx舍入,g|s為真,所以我們將l設(shè)置為1(因?yàn)樗呀?jīng)是1了,所以在此情形下沒有改變)并返回1001。舍入整數(shù)和定點(diǎn)數(shù)如果我們將fp數(shù)轉(zhuǎn)換為整數(shù)或定點(diǎn)型,我們也要進(jìn)行舍入。該概念與fp舍入基本相同。恰好為整數(shù)的fp數(shù)總是舍入到該整數(shù)。全部其他fp數(shù)位于兩個(gè)連續(xù)整數(shù)之間,并且舍入決定返回哪個(gè)整數(shù)。不幸地是,用于整數(shù)的輸入邏輯有點(diǎn)難,這是因?yàn)槎M(jìn)制補(bǔ)碼和符號數(shù)值形式之間的差異。增大符號數(shù)值形式的數(shù)總是增大數(shù)值,所以增大的數(shù)離零更遠(yuǎn)。對于正的二進(jìn)制補(bǔ)碼形式的數(shù)會(huì)發(fā)生相同的事情,但是負(fù)的二進(jìn)制補(bǔ)碼形式的數(shù)在增大時(shí)變得更接近零。這意味著舍入邏輯不得不基于整數(shù)是正的還是負(fù)的而改變。這還意味著我們不得不仔細(xì)選取基值(將增大或不增大的值)。對于正整數(shù),該值僅是截?cái)嗟膄p有效數(shù)字,所以1.37將具有基值1以及1或2的結(jié)果。對于負(fù)整數(shù),我們同樣截?cái)嘤行?shù)字并且取該結(jié)果的二進(jìn)制反碼(二進(jìn)制反碼是全部位被反相的原始數(shù)字),-1.37被截?cái)嗟?并然后反相,給出基值-2。那么一切都解決了,因?yàn)槲覀兿M覀兊慕Y(jié)果為-2或(當(dāng)增大時(shí))-1。為使事情更復(fù)雜,我們的轉(zhuǎn)換方法需要一些計(jì)算來找到針對負(fù)整數(shù)的l、g和s。正確的舍入將需要我們完成二進(jìn)制補(bǔ)碼處理(反相并加1)并且然后計(jì)算l、g和s,但是與僅進(jìn)行反相相比加1是慢的。理想地,我們想要從原始移位的輸入來計(jì)算實(shí)際的l、g和s(即,從我們關(guān)于符號做任何事情之前的輸入。所以浮點(diǎn)數(shù)1.37或-1.37都將右移到整數(shù)1)。設(shè)l0、g0和s0為反相前的最低有效位(lsb)、防護(hù)以及粘滯,并且設(shè)li、gi和si為反相后的lsb、防護(hù)以及粘滯,最后設(shè)l、g和s為反相且加1后的lsb防護(hù)以及粘滯。如果s0是零,則對si有影響的位全是一,因此(通過向那些si位加1獲得的)s也是零。如果s0非零,則si不全是一,因此s非零。所以在所有情形下s0=s。如果g0是零,則gi是1,且除了存在來自s位的進(jìn)位的情形(僅當(dāng)s0是零時(shí)才會(huì)發(fā)生這種情形)外g也是一。如果g0是一,則gi是零,且除了存在來自s位的進(jìn)位的情形(僅當(dāng)s0是零時(shí)才會(huì)發(fā)生這種情形)外g也是一。所以g=g0^s0。通過非常類似的邏輯,l=l0^(g0|s0)。現(xiàn)在有了針對正整數(shù)和負(fù)整數(shù)的l、g和s,我們能夠給出我們的舍入規(guī)則:模式改變到正值改變到負(fù)值rne如果(l&g)|(g&s)則增大如果(l&g)|(g&s)則增大rna如果g則增大如果(g&s)則增大rz無如果(g|s)則增大rp如果(g|s)則增大如果(g|s)則增大rm無無rx如果g|s則設(shè)置l如果g|s則設(shè)置l定點(diǎn)數(shù)舍入的方式與整數(shù)一模一樣。針對(到整數(shù)或定點(diǎn)型)無符號轉(zhuǎn)換的規(guī)則與針對正轉(zhuǎn)換的規(guī)則相同。注入舍入進(jìn)行舍入的更快速的方式是注入舍入常數(shù)作為有效數(shù)字加法的一部分,有效數(shù)字加法幾乎是每個(gè)fp運(yùn)算的一部分。為看看這是如果起作用的,考慮將以美元和美分計(jì)的數(shù)字相加,然后舍入到美元。如果我們加$1.27+$2.35$3.62我們看到和更接近$4而不是$3,所以無論哪個(gè)舍入到最近模式都應(yīng)返回$4。如果我們用二進(jìn)制來表示該數(shù),則我們能夠使用上一節(jié)的l、g、s方法獲得相同的結(jié)果。但是,假設(shè)我們僅加五十美分,然后截?cái)嘟Y(jié)果?$1.27+$2.35+$0.50(舍入注入)$4.12如果我們僅返回來自我們的和($4.12)的美元量($4),則我們已經(jīng)使用rna舍入模式正確地進(jìn)行舍入。如果我們添加$0.99而不是$0.50,則我們將使用rp舍入來正確的進(jìn)行舍入。rne略微復(fù)雜些:我們添加$0.50,截?cái)?,然后查看剩余的美分。如果美分余?shù)非零,則階段的結(jié)果是正確的。如果剩余的為零美分,則我們在注入之前恰好在兩個(gè)美元量之間,所以我們選取偶數(shù)美元量。對于二進(jìn)制fp,這相當(dāng)于將美元量的最低有效位設(shè)置為零。使三個(gè)數(shù)相加僅比使兩個(gè)數(shù)相加略微慢點(diǎn),因此與我們使兩個(gè)有效數(shù)字相加、檢查l、g和s、然后根據(jù)舍入模式來增大我們的結(jié)果相比,我們通過使用注入舍入更快地獲得了舍入結(jié)果。實(shí)現(xiàn)注入舍入對于fp,舍入注入是三個(gè)不同值之一,這些值取決于舍入模式和(有時(shí))結(jié)果的符號。rna和rne都要求我們在g位置注入1(這就像在美元和美分的示例中加$0.50)。rp和rm舍入取決于符號以及模式。rp向上舍入正結(jié)果(朝正無窮增大有效數(shù)字的大小)但截?cái)嘭?fù)結(jié)果(選取更接近正無窮的有效數(shù)字)。類似地,rm向上舍入負(fù)結(jié)果(朝負(fù)無窮增大有效數(shù)字的大小)但截?cái)嗾Y(jié)果(選取更接近負(fù)無窮的有效數(shù)字)。因此,我們將rm和rp拆分為兩種情形:當(dāng)符號匹配舍入方向時(shí)向上舍入(ru),并且當(dāng)符號與舍入方向不同時(shí)截?cái)?rz)。對于ru情形,我們在g位位置處以及邏輯上對s有影響的每個(gè)位置處注入1(這就像在美元和美分的示例中加$0.99)。對于rz和rx模式,以及對于精簡為rz模式的rp和rm模式,我們注入零。對于大多數(shù)舍入模式,添加舍入注入并然后截?cái)嘟o出了正確舍入的結(jié)果。兩個(gè)例外是rne和rx,它們要求在添加之后檢查g和s。對于rne,如果g和s都為零,則我們將l設(shè)置為0。對于rx,如果g或s非零,則我們將l設(shè)置為1。fp數(shù)不是實(shí)數(shù)很容易認(rèn)為fp數(shù)就像實(shí)數(shù)一樣,但是它們是根本不同的,即使是對于最基本的屬性:1.它們是不結(jié)合的。例如,在sp中,我們使3和數(shù)相加并返回1百萬或零,可能不會(huì)有什么人看作是舍入誤差:(245+-245)+220=220245+(-245+220)=02.它們不服從分配率。同樣是在sp中:3,000,001*(4.00001+5.00001)=0x4bcdfe83(3,000,001*4.00001)+(3,000,001*5.00001)=0x4bcdfe82并且在存在上溢時(shí)情況更為糟糕:250*(278-277)=2127(250*278)-(250*277)=無窮大3.在一些實(shí)現(xiàn)方式中,它們甚至不可交換,除非是默認(rèn)nan模式(將全部nan轉(zhuǎn)換為單一nan的模式),因?yàn)橐话愣?,nana+nanb?。絥anb+nana。數(shù)值加和乘是可交換的。4.因?yàn)閕eeenan規(guī)則,不存在乘法單位元和加法單位元。一和零作為針對數(shù)值值的單位元??紤]fp數(shù)的一種有用的方式是將它們看作非常長的定點(diǎn)數(shù),其中至多有若干(對于dp是53個(gè))連續(xù)位能夠是非零的。例如,非無窮dp數(shù)可以使得有效數(shù)字的第一位在2046個(gè)位置中的任意位置,并且第一位后面跟著52個(gè)其他有效數(shù)字位,并且由符號位,所以有限的dp數(shù)可以被表示為2046+52+1=2099位定點(diǎn)數(shù)。以此方式來看,這變得非常明顯,使兩個(gè)fp數(shù)相加一般不會(huì)得出另一fp數(shù):不得不對加法的結(jié)果進(jìn)行舍入以使得它成為fp數(shù)。高精度錨定數(shù)高精度錨定(hpa)數(shù)是由長二進(jìn)制補(bǔ)碼整數(shù)i(通常為128位或更多)和小錨定整數(shù)a構(gòu)成的對(i,a),其中a表示i的位的權(quán)重(通常通過指定i的最小位的指數(shù)值)。錨定整數(shù)a可被看作是提供可編程有效性參數(shù)/值。錨定整數(shù)a可以形成hpa數(shù)的元數(shù)據(jù)的一部分,該元數(shù)據(jù)可以包括額外的信息,比如,例外信息:無窮大、符號、nan。該對在某種程度上類似于fp數(shù)的有效數(shù)字和指數(shù)值,但是不同之處在于:長整數(shù)i不是正規(guī)化的且經(jīng)常比fp有效數(shù)字大得多,并且錨定值a對于到和的全部輸入可以是固定的。使fp數(shù)相加使得指數(shù)改變,但是使hpa數(shù)相加不會(huì)改變錨定值。作為簡單的示例,考慮由10位i和錨定值-4構(gòu)成的表示。表1中給出了此格式的一些值:表1:示例hpa數(shù)(i,-4)當(dāng)我們使兩個(gè)這樣的數(shù)(比方說,0.5和1.5)相加時(shí),錨定值不改變,通過只使i部分相加而便利地給出了和。因?yàn)椋琱pa求和只是二進(jìn)制補(bǔ)碼加法,所以hpa是結(jié)合的。實(shí)現(xiàn)可靠的hpa累加器的一種方式采用下述:1.限制所需要的數(shù)的范圍以使得hpa累加器不必太龐大的方式。2.迅速地使大二進(jìn)制補(bǔ)碼數(shù)相加的方式。3.從fp轉(zhuǎn)換到hpa的快速單元,以及4.從hpa轉(zhuǎn)換到fp的單元。在下面的章節(jié)中我們將處理這些要求中的每個(gè)要求。限制范圍fp數(shù)具有大的范圍。雙精度(dp)數(shù)可以小于2-1000且大于21000,但是大多數(shù)累加不跨過整個(gè)范圍。實(shí)際上,難以想象將有意義地累加整個(gè)該范圍內(nèi)的值的這種問題。亞原子問題可以累加非常小的值,天文學(xué)計(jì)算可以累加非常大的值,但是將質(zhì)子的寬度加到星系之間的距離上一般是沒有意義的。即使對于高精度計(jì)算而言,大部分累加都是在有限的范圍內(nèi)發(fā)生的。許多程序員使用fp時(shí)為了方便而不是fp的范圍。音頻編解碼器可以使用fp,且音頻數(shù)據(jù)無論在頻率方面還是在音量方面都具有有限的范圍。以fp進(jìn)行編程更為簡單,這對程序員而言是有吸引力的。如果程序員確定特定求和的全部數(shù)據(jù)具有小于260的大小,并且大小低于2-50的值將不會(huì)以任何有意義的方式影響求和,則使用具有128位i的hpa格式(i,-50)使數(shù)據(jù)相加,則累加是結(jié)合的,并且可以以任意順序是這些數(shù)相加。使大數(shù)相加我們提出將64位整數(shù)的向量看作是一個(gè)大整數(shù)。例如,256位整數(shù)將包括四個(gè)64位整數(shù)。給出兩個(gè)這樣的向量,我們對64位simd加法器(如arm有限公司的neonsimd引擎)做出適度的改變以計(jì)算256位和a+b。通過使低階的64位相加,然后是接下來64位連同低階加法的進(jìn)位等來完成加法。在實(shí)踐中,這可以在十分大的simd單元的單次循環(huán)中實(shí)現(xiàn)-1024位加法器可能是切實(shí)可行的。針對適度的大小(比方說多達(dá)256位)的一種方式是構(gòu)建如圖1中的選擇進(jìn)位加法器。每個(gè)線路i計(jì)算ai+bi和ai+bi+1,線路i-1的進(jìn)位被用于在兩個(gè)和之間做出選擇。我們認(rèn)為這能夠在我們目前的cpu的單次循環(huán)中容易地計(jì)算出來。針對更寬的simo單元(比方說多達(dá)1024位),類似于圖2中那個(gè)的提前進(jìn)位加法器可以保持單次循環(huán)性能。與前面相同,每個(gè)線路i計(jì)算ai+bi和ai+bi+1,但是該線路還計(jì)算其和是否為全一(pi),即線路i中的和是否將向線路i+1傳遞輸入進(jìn)位。對于近期更可能實(shí)現(xiàn)的simd寬度,比方說128位或256位,處理器將需要保持跟蹤向量進(jìn)位輸出和向量進(jìn)位輸入。1024位加法能夠在256位實(shí)現(xiàn)方式的4此循環(huán)中完成。將以常規(guī)方式來進(jìn)行減法,每個(gè)線路i將ai-bi作為進(jìn)行計(jì)算,向低階向量上的低階線路進(jìn)位輸入。我們提出四個(gè)新的指令來完成長加法和減法:1.longaddvd,vm,vnvd=vm+vn,將每個(gè)simd向量看作是單一長整數(shù)。該指令還產(chǎn)生進(jìn)位輸出c,其中如果存在來自和的高階線路的進(jìn)位輸出則c=1,否則c=0。2.longaddcvd,vm,vnvd=vm+vn+c,將每個(gè)simd向量看作是單一長整數(shù)。先前產(chǎn)生的進(jìn)位輸出c被加到該和,并且生成新的進(jìn)位輸出。3.longsubvd,vm,vnvd=vm-vn=vm+~vn+1將每個(gè)simd向量看作是單一長整數(shù)。該指令還產(chǎn)生進(jìn)位輸出c,其中如果存在來自和的高階線路的進(jìn)位輸出則c=1,否則c=0。4.longsubcvd,vm,vnvd=vm-vn+c=vm+~vn+1+c,將每個(gè)simd向量看作是單一長整數(shù)。先前產(chǎn)生的進(jìn)位輸出c被加到該和,并且生成新的進(jìn)位輸出。在實(shí)踐中,將如下使用這些指令。設(shè)想我們具有256位simd實(shí)現(xiàn)方式,并且我們想要使1024位向量x和y相加。在c(語言)中,這些向量將被宣稱為:長長x[15:0],y[15:0];為了不在加載/存儲(chǔ)語義上停滯不前,假設(shè)這些向量已經(jīng)在寄存器文件中。那么,1024位加法和減法看起來是下面這樣的://v0包含x[3:0],v1包含x[7:4],//v2包含x[11:8],v3包含x[15:12]//v4包含y[3:0],v5包含y[7:4],//v6包含y[11:8],v7包含y[15:12]//長加法以使得x[15:0]+y[15:0]//在(v13,v12,v11,v10)中l(wèi)ongaddv10,v0,v4;longaddcv11,v1,v5;longaddcv12,v3,v6;longaddcv13,v4,v7;//長減法以使得x[15:0]-y[15:0]//在(v23,v22,v21,v20)中l(wèi)ongsubv20,v0,v4;longsubcv21,v1,v5;longsubcv22,v3,v6;longsubcv23,v4,v7;給出256位實(shí)現(xiàn)方式,1024位加法和減法能夠各自占4個(gè)循環(huán)。對于除fp累加之外的其他事情(包括加密應(yīng)用在內(nèi)),這樣的能力將是有用的。fp到hpa的轉(zhuǎn)換、加法、減法hpa數(shù)是對(i,a),其中i是長二進(jìn)制補(bǔ)碼整數(shù)且a是給出該整數(shù)的最低有效位的權(quán)重(從而給出該整數(shù)的所有位的權(quán)重)的錨定值。我們的長整數(shù)將在simd單元上進(jìn)行處理,所以讓我們更詳細(xì)一點(diǎn)描述i和a。假設(shè)我么有256位simd單元。那么,i的低階256位被拆分為四個(gè)64位的部分vi[3:0]。將錨定值也分為四部分將是方便的,va[3:0],其中va[0]=a且對于i>0,va[i]=va[i-1]+64。這里我們尚未真正改變?nèi)魏螙|西,我們只不過是采用了更方便的simd表示,其中hpa數(shù)(i,a)的低階256位被表示為(vi,va)。圖3示出了將fp數(shù)f加到hpa數(shù)(vi,va)的有效方式。simd單元的每個(gè)線路具有特定于該線路的(vi,va)值,即,線路j具有vi[j]和va[j]。每個(gè)線路還接收f的副本。每個(gè)線路將f的指數(shù)與其錨定值va[j]進(jìn)行比較,并且向該線路填充f的有效數(shù)字的適當(dāng)位。至多有兩個(gè)線路將包含有效數(shù)字位。每個(gè)線路獨(dú)立地計(jì)算它的64位轉(zhuǎn)換值,使得所產(chǎn)生的256位整數(shù)包括四個(gè)64位線路值。該256位值然后被加到vi,可能會(huì)有進(jìn)位輸入值cin,并且結(jié)果是表示(vi,va)+f的新的256位值,連同進(jìn)位輸出值cout。注意到,將這兩個(gè)256位值作為整數(shù)相加是有意義的,因?yàn)檫@兩個(gè)值具有完全相同的錨定值。假設(shè)我們具有128位simd單元,并且我們想用-50的錨定值來轉(zhuǎn)換這些值。這意味著128位i的最低階的位對應(yīng)于2-50,下一位對應(yīng)于2-49,以此類推(參見圖4)。vi[0]的高階位對應(yīng)于213而vi[1]的低階位對應(yīng)于214。所以,值為214+213=24,576的hpa數(shù)將具有這兩個(gè)位集。i的位127(vi[1]的高階位)是符號位。替代的實(shí)施例可以使用無符號hpa格式,其中由hpa數(shù)的vi部分表示的值時(shí)無符號的。在此情形下,i的位127將具有值2^(127+a),其中a是錨定值。針對到hpa的fp轉(zhuǎn)換,每個(gè)線路檢查f的真指數(shù),然后將其與線路特定的錨定值進(jìn)行比較。同一錨定值(-50)被用于全部示例,通過參考圖4將易于領(lǐng)會(huì)這些示例。示例1假設(shè)我們想要將dp數(shù)f=1.0-ulp=3fef_ffff_ffff_ffff轉(zhuǎn)換為hpa。偏倚的指數(shù)是3fe,真指數(shù)是-1。且有效數(shù)字是53個(gè)一。最高的線路看到指數(shù)太低(該線路的最小權(quán)重是14),所以它用零充滿它的位。最低的線路將位[63:50]設(shè)置為零,并將位[49:0]設(shè)置為一。有效數(shù)字中剩余3個(gè)一(對應(yīng)于值2-51+2-52+2-53),但是在轉(zhuǎn)換中這些值將被忽略因?yàn)樗麄兊臋?quán)重小于錨定值-50??蛇x地實(shí)現(xiàn)方式可以對經(jīng)轉(zhuǎn)換的值進(jìn)行舍入,但是現(xiàn)在我們假設(shè)進(jìn)行截?cái)?。示?f=220-ulp=412f_ffff_ffff_ffff。真指數(shù)是19,所以位[127:70]是一,位[16:0]是零。該數(shù)完全符合,所以舍入是不相關(guān)的。需指出的是,每個(gè)線路仍獨(dú)立地對其自己的64位發(fā)揮作用。示例3f=-220=c130_0000_0000_0000。真指數(shù)是20,但是現(xiàn)在我們不得不考慮符號。一種方法是像對整數(shù)那樣地來進(jìn)行轉(zhuǎn)換,但是返回在每個(gè)線路中計(jì)算的值的二進(jìn)制反碼,然后向128位值加一。在此情形下,位70在二進(jìn)制反碼前是一設(shè)置位,所以它在二進(jìn)制反碼后是一個(gè)零位。將1加到128位值,得到位[127:70]被設(shè)置為一,并且位[69:0]被設(shè)置為零。示例4f=280=44f0_0000_0000_0000。真指數(shù)是80,但是我們的最大權(quán)重是76,所以我們設(shè)置上溢標(biāo)識。我提議在此情形下我們返回零,或者可能在高階線路中返回最大值并且在其他地方返回零(因?yàn)榈碗A線路不知道上溢,所以我們不能按照整數(shù)轉(zhuǎn)換的示例并返回最大整數(shù))。這是重大錯(cuò)誤,所以在任何情形下結(jié)果都會(huì)是無意義的。示例5f=無窮大或nan。返回零,設(shè)置ofc(無窮大)或ioc(nan)。每個(gè)線路以相同的方式進(jìn)行轉(zhuǎn)換。一種方式是僅將有效數(shù)字放在線路的64位的右側(cè),然后使有效數(shù)字左移值左移(lshift)=e-偏椅-va[i]+1。注意到,e′-偏倚是真指數(shù)e,并且如果lshift值是負(fù)的或零,則不進(jìn)行移位。概念上,到移位器的輸入是64+53=117位值,包括64個(gè)零,后面是有效數(shù)字(在實(shí)踐中,輸入中不需要這64個(gè)零)。移位器的輸出是該線路的64位值。有意義的移位距離(即,能夠?qū)⒂行?shù)字位放入線路內(nèi)的移位距離)的范圍在1和64+52=116之間。該范圍外的左移值不需要進(jìn)行任何移位,因?yàn)樗鼈儗⒖偸欠祷亓?。對于示?,e=-1,所以上面的線路具有l(wèi)shift[1]=-1-14+1=-14(負(fù)的,所以不移位,并且線路包括全零),下面的線路具有l(wèi)shift[0]=-1-(-50)+1=50,所以該線路的最低的50位包括有效數(shù)字的高階50位。對于示例2,e=19,所以lshift[1]=19-14+1=6(有效數(shù)字的最高的6位被移入),并且lshift[0]=19-(-50)+1=70。注意到,有效數(shù)字的最高的6位被移動(dòng)超過了線路0的64位,所以對該線路而言被丟棄了。對于示例3,e=20,所以lshift[1]=7且lshift[0]=71。因?yàn)檩斎胧秦?fù)的,所以每個(gè)線路返回它的移位值的二進(jìn)制反碼(對超出范圍的移位為全一)。向128位加法器的進(jìn)位輸入被設(shè)置以針對轉(zhuǎn)換或加法(hpa+fp)完成二進(jìn)制補(bǔ)碼運(yùn)算。對于減法(hpa-fp),轉(zhuǎn)換應(yīng)當(dāng)將fp數(shù)看作是正的并將運(yùn)算改變?yōu)榧臃?。針對dp數(shù),我們提出了3個(gè)新的指令:1.addo_hpa_dpvi,va,f帶有上溢的加法:使用va中的錨定值將f轉(zhuǎn)換為hpa,然后加到vi。如果f的位大于vi中最大權(quán)重位,或者如果和引起(整數(shù))上溢,則設(shè)置上溢標(biāo)志。注意到,在此示例中,只有vi的高階線路可以設(shè)置上溢標(biāo)志,所以實(shí)現(xiàn)方式將該線路與其他低階線路進(jìn)行區(qū)分。2.subo_hpa_dpvi,va,f帶有上溢的減法:使用va中的錨定值將f轉(zhuǎn)換為hpa,然后從vi中減去。如果f的位大于vi中最大權(quán)重位,或者如果差引起(整數(shù))上溢,則設(shè)置上溢標(biāo)志。注意到,在此示例中,只有vi的高階線路可以設(shè)置上溢標(biāo)志,所以實(shí)現(xiàn)方式將該線路與低階線路進(jìn)行區(qū)分。3.cvto_hpa_dpvi,va,f帶有上溢的轉(zhuǎn)換:使用va中的錨定值將f轉(zhuǎn)換為hpa。如果f的位大于vi中最大權(quán)重位,則設(shè)置上溢標(biāo)志。同樣地,在此示例中,只有vi的高階線路可以設(shè)置上溢標(biāo)志,所以實(shí)現(xiàn)方式將該線路與低階線路進(jìn)行區(qū)分。注意到,至少在一些示例實(shí)施例中,如果向量長度符合simd實(shí)現(xiàn)方式,則可以在兩個(gè)完全管線式的周期中實(shí)現(xiàn)這些操作。對于比simd實(shí)現(xiàn)方式寬的向量,轉(zhuǎn)換和加法是按從低階部分到高階部分分片實(shí)現(xiàn)的。正如在上述長加法和減法指令中,高階部分處理由低階部分生成的進(jìn)位標(biāo)志,從而還存在那樣做的指令的版本:1.addco_hpa_dpvi,va,f帶有上溢的加法:使用va中的錨定值將f轉(zhuǎn)換為hpa,然后加到vi。如果進(jìn)位標(biāo)志為高,則向hpa數(shù)的整數(shù)部分加1。如果f的位大于vi中最大權(quán)重位,或者如果和引起(整數(shù))上溢,則設(shè)置上溢標(biāo)志。2.subco_hpa_dpvi,va,f帶有進(jìn)位和上溢的減法:使用va中的錨定值將f轉(zhuǎn)換為hpa,然后從vi中減去。如果進(jìn)位標(biāo)志為高,則向hpa數(shù)的整數(shù)部分加1。如果f的位大于vi中最大權(quán)重位,或者如果差引起(整數(shù))上溢,則設(shè)置上溢標(biāo)志。3.cvtco_hpa_dpvi,va,f帶有進(jìn)位和上溢的轉(zhuǎn)換:使用va中的錨定值將f轉(zhuǎn)換為hpa。如果進(jìn)位標(biāo)志為高,則向hpa數(shù)的整數(shù)部分加1。如果f的位大于vi中最大權(quán)重位,則設(shè)置上溢標(biāo)志。還存在指令的非上溢版本,從而運(yùn)算的低階部分不設(shè)置上溢標(biāo)志。1.add_hpa_dpvi,va,f2.sub_hpa_dpvi,va,f3.cvt_hpa_dpvi,va,f4.addc_hpa_dpvi,va,f5.subc_hpa_dpvi,va,f6.cvtc_hpa_dpvi,va,f對于sp數(shù)存在類似的指令。轉(zhuǎn)換指令并非絕對必要的,因?yàn)樵趆pa數(shù)的整數(shù)部分全為零時(shí)它們等價(jià)于加指令。假設(shè)hpa數(shù)被實(shí)現(xiàn)為128位向量。下面的示例示出了如何能夠使用這些指令。示例6hpa數(shù)符合128位值。則將dp數(shù)d0加到hpa數(shù)(v0,v10)是簡單的。addo_hpa_dpv0,v10,d0因?yàn)闆]有高階項(xiàng),所以不需要進(jìn)位,但是上溢檢測是重要的。示例7hpa數(shù)是256位寬,但是硬件一次處理128位。hpa數(shù)被拆分為低階部分(v0,v10)和高階部分(v1,v11)?,F(xiàn)在加dp數(shù)d0是add_hpa_dpv0,v10,d0addco_hpa_dpv1,v11,d0注意到,兩個(gè)指令接收相同的dp數(shù)d0。這是必要的,因?yàn)槲覀儾恢纃0的有效數(shù)字的位可能在哪里,在(v0,v10)內(nèi)、在(v1,v11)內(nèi),還是跨兩個(gè)向量分布。低階部分在不需要進(jìn)行上溢檢測的情況下被求和,因?yàn)樯弦绯鲚^低位并不是問題。高階部分不得不處理來自低階部分的進(jìn)位,它還要檢測上溢,因?yàn)樯弦绯鲚^高位總是有問題。示例8hpa數(shù)是384位寬,但是硬件一次處理128位。hpa數(shù)被拆分為低階部分(v0,v10)、中間部分(v1,v11)和高階部分(v2,v12)。add_hpa_dpv0,v10,d0addc_hpa_dpv1,v11,d0addco_hpa_dpv2,v12,d0注意到,出于與示例中給出的相同原因,全部三個(gè)指令接收相同的dp數(shù)d0。低階部分和中間部分在不需要進(jìn)行上溢檢測的情況下被求和,因?yàn)樯弦绯鲞@些部分并不是問題。中間部分需要處理來自低階部分的進(jìn)位。高階部分不得不處理來自中間部分的進(jìn)位,它還要檢測上溢,因?yàn)樯弦绯鲚^高位總是有問題。示例9hpa數(shù)符合128位值。則hpa數(shù)(v0,v10)減去dp數(shù)d0是簡單的。subo_hpa_dpv0,v10,d0因?yàn)闆]有高階項(xiàng),所以不需要進(jìn)位,但是上溢檢測是重要的。以常規(guī)的方式來進(jìn)行減法,將d0已經(jīng)被轉(zhuǎn)化為的128位的項(xiàng)反相,然后加1。示例10hpa數(shù)是384位寬的,但是硬件一次處理128位。hpa數(shù)被拆分為低階部分(v0,v10)、中間部分(v1,v11)和高階部分(v2,v12)。sub_hpa_dpv0,v10,d0subc_hpa_dpv1,v11,d0subco_hpa_dpv2,v12,d0注意到,出于與示例中給出的相同原因,全部三個(gè)指令接收相同的dp數(shù)d0。在該示例中,在所有情形下,將減去的數(shù)被反相(二進(jìn)制反碼),但是在該示例中,用于完成二進(jìn)制補(bǔ)碼運(yùn)算的借位僅是針對低階指令sub_hpa_dp生成的。在該示例中,用于完成二進(jìn)制補(bǔ)碼運(yùn)算的借位僅針對減法運(yùn)算的無進(jìn)位版本sub_hpa_dp和subo_hpa_dp進(jìn)行設(shè)置。在這點(diǎn)上,指令與示例3中的加法完全一樣地進(jìn)行。將hpa轉(zhuǎn)換為fp如上,我們將考慮同樣具有向量表示(vi,va)的hpa數(shù)(i,a),其中vi是64位整數(shù)的向量且va是權(quán)重的向量,va[0]=a且對于i>0va[i]=va[i-1]+64。為了轉(zhuǎn)換到fp,我們需要記錄vi的符號,在vi中找到第一無符號位,從它以及格式指定數(shù)目的后面的位(對dp為52,對sp為23)構(gòu)造出有效數(shù)字,對有效數(shù)字進(jìn)行舍入,以及從第一位和相應(yīng)的權(quán)重構(gòu)造適當(dāng)?shù)闹笖?shù)。為簡單起見,假設(shè)我們正在將(i,a)轉(zhuǎn)換為dp(53位有效數(shù)字)。更具體地,轉(zhuǎn)換步驟為:1.符號位是i的高階位。如果將hpa數(shù)設(shè)置為負(fù)的,且是否定的,則它是正數(shù)。一種這樣做的方式是從零減去hpa數(shù)的整數(shù)部分。初始符號被記住,因?yàn)樾枰盟鼇順?gòu)造fp數(shù),但是該轉(zhuǎn)換的其余部分假設(shè)它正在轉(zhuǎn)換的值是非負(fù)的。2.從高階線路開始,每個(gè)線路進(jìn)行計(jì)數(shù)前導(dǎo)零運(yùn)算(clz)以確定線路中的第一個(gè)一之前的零的數(shù)目。如果存在一,在該數(shù)目(前導(dǎo)零計(jì)數(shù)(lzc))的范圍為0到63。如果找到一,則線路返回以該位位置開始的有效數(shù)字的k=min(64-lzc,53)位,并且如果64-lzc>53,則返回有到效數(shù)字的右側(cè)的下一位(g),并且如果64-lzc>54,則返回到g的右側(cè)的全部位的邏輯或(s)。來自線路j的該信息全部隨關(guān)于從線路j-1的高階位取多少位有效數(shù)字的計(jì)數(shù)53-k一起被傳遞到下一線路j-1。圖5示出了如何針對各種lzc從兩個(gè)相鄰線路構(gòu)造有效數(shù)字。如果在線路j中找到第一個(gè),那么我們可以使用該線路的錨定值來計(jì)算(未經(jīng)偏移的)指數(shù)e=va[j]+63-lzc。3.符號、指數(shù)、有效數(shù)字、g和s被向右傳遞直到它們到達(dá)低階線路為止。每個(gè)中間線路(包括低階電路)利用其全部位的邏輯或來更新s。低階線路構(gòu)造dp數(shù)并根據(jù)任意已經(jīng)指定的舍入模式來對其進(jìn)行舍入。hpa到fp的轉(zhuǎn)換比fp到hpa的轉(zhuǎn)換略慢些。如果按所描述的方式實(shí)現(xiàn),則128位hpa數(shù)將需要3個(gè)循環(huán)來構(gòu)造fp輸出:1個(gè)循環(huán)使得hpa數(shù)成為正的,一個(gè)循環(huán)處理高階線路,還有一個(gè)循環(huán)處理低階線路并產(chǎn)生舍入的結(jié)果。這不太可能成為問題,因?yàn)獒槍γ看卫奂哟嬖谝粋€(gè)這樣的轉(zhuǎn)換。針對較大的實(shí)現(xiàn)方式,比方說256位或512位向量,我們可能希望使用更加并行的途徑,其中針對每個(gè)線路lzc和線路結(jié)果完全被一次計(jì)算,并且其中各個(gè)線路結(jié)果被以二進(jìn)制方式進(jìn)行組合。積的和可以對上述構(gòu)造進(jìn)行擴(kuò)展以處理積的和。如果我們想要使經(jīng)舍入的乘積相加則不需要進(jìn)行任何改變:就像我們對任意其他fp數(shù)所做的那樣,我們只是乘然后使這些乘積相加。為了累加未經(jīng)舍入的全長度乘積,我們將需要新的指令。1.madd_hpa_dpvi,va,dn,dk乘-累加:在不進(jìn)行舍入的情況下計(jì)算dn*dk(即,保留全部106位有效數(shù)字乘積),然后使用va中的錨定值將乘積轉(zhuǎn)換為hpa,然后將經(jīng)轉(zhuǎn)換的乘積加到vi。2.maddo_hpa_dpvi,va,dn,dk與madd_hpa_dp相同,但是如果轉(zhuǎn)換或加法引起上溢(在該示例中僅有高階線路),則設(shè)置上溢標(biāo)志。3.maddc_hpa_dpvi,va,dn,dk與madd_hpa_dp相同,但是還對進(jìn)位作出響應(yīng)。4.maddco_hpa_dpvi,va,dn,dk與madd_hpa_dp相同,但是還對進(jìn)位作出響應(yīng),并且如果轉(zhuǎn)換或加法引起上溢(在該示例中僅有高階線路),則設(shè)置上溢標(biāo)志。我們預(yù)期在至少一些示例十四回率中,這些指令將占用5次循環(huán):三個(gè)循環(huán)用于乘法,一個(gè)用于到hpa的轉(zhuǎn)換,還有一個(gè)用于hpa加法。轉(zhuǎn)換與上述基本相同,但是具有能夠跨三個(gè)64位線路的更寬的有效數(shù)字。不向每個(gè)線路廣播單dp數(shù),而是向每個(gè)線路廣播雙長度dp乘積。乘法和轉(zhuǎn)換到hpa指令僅是vi=0的madd指令。當(dāng)然會(huì)存在sp變體,以及可能的乘法-減法變體。這些指令仍是完全管線化的,并且能夠在每次循環(huán)中被發(fā)布,所以如果hpa數(shù)符合硬件長度的寄存器,則n個(gè)乘積的加和將需要n+4次循環(huán)。高精度輸入,以及使hpa數(shù)乘以標(biāo)量值對于需要高內(nèi)在精度的應(yīng)用,比如,多項(xiàng)式近似、或泰勒級數(shù)、或針對初等函數(shù)的范圍縮減,在hpa數(shù)中包括比fp輸入中所能表示的更高的精度可能是有用的。例如,我們可能想要使得常數(shù)1/π被表示為128位或更高的精度。通過計(jì)算想要的值并將其與正確的錨定值一起存儲(chǔ)為長整型(在64位向量部分中),這是容易實(shí)現(xiàn)的。所產(chǎn)生的hpa數(shù)能夠像任意其他hpa數(shù)一樣地被使用。我們可能希望使hpa數(shù)(i,a)乘以fp數(shù)f。如果f具有有效數(shù)字s和真指數(shù)e,則結(jié)果是hpa數(shù)(i*s,a+e)。如果(i,a)由向量(vi,va)來表示,則一種這樣做的方式是經(jīng)由向量通過具有高部分和低部分的標(biāo)量乘法。mul_vec_scalar_lowvd,vi,s使vi的64位組分中的每個(gè)乘以標(biāo)量64位s,每個(gè)線路在vd的相應(yīng)部分中返回乘積的低64位。mul_vec_scalar_highvd,vi,s使vi的64位組分中的每個(gè)乘以標(biāo)量64位s,每個(gè)線路在vd的相應(yīng)部分中返回乘積的高64位。高部分然后被移位以使得它能夠被加到低部分。可以通過使a和e相加的單獨(dú)指令,或者通過將e加到va中的每個(gè)條目的向量標(biāo)量加法來調(diào)整錨定值。與初始的(i,a)相比,乘積(i*s,a+e)的整數(shù)部分有更多位,所以具有轉(zhuǎn)換回初始精度以調(diào)整結(jié)果錨定值的指令可能是有用的。應(yīng)用該部分使用樣本應(yīng)用來在一些示例實(shí)施例中展示hpa的性能和能量益處中的一些益處。應(yīng)用1使用hpa加n個(gè)fp項(xiàng),其中hpa數(shù)符合硬件大小(例如,128位simd上的128位hpa)。轉(zhuǎn)換和加指令具有2個(gè)循環(huán)的延時(shí),并且被完全管線化,其吞吐量為每循環(huán)1hpa加法。圖6示出了4個(gè)fp數(shù)到hpa數(shù)(vi,va)的加法。指令從頂部向底部進(jìn)行,循環(huán)從左向右讀,所以在循環(huán)1中,第一加指令正執(zhí)行fp到hpa轉(zhuǎn)換(表中的c),并且在循環(huán)2中,來自第一加指令的經(jīng)轉(zhuǎn)換的值被加上(表中的a),同時(shí)第二加指令正執(zhí)行期fp到hpa轉(zhuǎn)換(c)。一般而言,我們在n+1次循環(huán)中加n個(gè)值,算法是結(jié)合且(到程序員所指定的精度)正確的。相反,根據(jù)c規(guī)則進(jìn)行的標(biāo)準(zhǔn)fp加法將需要a×n次循環(huán),其中a是fp加法的延時(shí),所以在arm最快的fpu上為3n次循環(huán)。這甚至還低估了hpa的優(yōu)點(diǎn)。arm的“大”核具有兩個(gè)128位simd整數(shù)管線,因?yàn)閔pa加法是結(jié)合的,所以我們能夠輕易地使用兩個(gè)累加器,在約n/2次循環(huán)中累加n個(gè)fp數(shù),然后使兩個(gè)累加器值相加類得到最終的和。這表示在arm核上的hpa累加比在同一核上的fp累加快6倍。應(yīng)用2使用hpa加n個(gè)fp項(xiàng),其中hpa數(shù)比simd硬件大小寬(例如,128位simd上的256位hpa)。轉(zhuǎn)換和加指令仍具有相同的延時(shí),但是針對每個(gè)hpa值需要兩次轉(zhuǎn)換和加。圖7示出了2個(gè)fp數(shù)到hpa數(shù)(vi,va)的加法。vi和va被拆分成高部分和低部分,并且每個(gè)fp數(shù)首先被加到低部分,然后與低部分的進(jìn)位輸出一起被加到高部分。以此方式加n項(xiàng)需要2n+1次循環(huán),仍比fp累加快。如應(yīng)用1中所示,我們也能夠通過使用第二個(gè)simd單元來使這種延時(shí)減半。應(yīng)用3fpamr編解碼器。該編解碼器將其大部分處理時(shí)間花在簡單的子例程dotproduct40上,該子例程使用dp使40個(gè)sp乘積相加,然后轉(zhuǎn)換回sp。該子例程明顯地使用dp進(jìn)行累加,因?yàn)樵趕p中舍入誤差是或然性的。在arm最快的fpu上,該例程將占用最少126次循環(huán):40個(gè)sp乘法,40個(gè)sp到dp轉(zhuǎn)換,39個(gè)dp加法,加上一個(gè)轉(zhuǎn)換回sp。因?yàn)閏的排序規(guī)則,dp加法單獨(dú)就需要39×3=117次循環(huán)。如果我們使用hpa來做相同的事情,能夠在一個(gè)simd單元上的47次循環(huán)中實(shí)現(xiàn)dotproduct40:40個(gè)hpa乘法-加法,以及一個(gè)hpa到sp轉(zhuǎn)換。如應(yīng)用1中所示,我們也能夠通過使用第二個(gè)simd單元來使這種延時(shí)減半。除了更快之外,hpa解決方案使用顯著減少的控制邏輯(約指令的1/3,節(jié)省了大量的提取、解碼、發(fā)布和退出資源),所以它將有可能需要更少的功率。它必然將需要更少的能量。應(yīng)用4密度矩陣乘法,最簡單的算法。這是一系列點(diǎn)積,每行乘以每列。hpa乘法-加法能夠在任意數(shù)目的處理器上以可再現(xiàn)(且正確!)的方式來這樣做。在單一處理器上加速同樣可以是三或六的因數(shù),由于使用并行化的能力,大得多的加速是可能的。例外因?yàn)閔pa的縮小的范圍,更可能存在超出范圍的數(shù)。我們需要提供工具和儀器來允許程序員建立正確的邊界,但是我們尤其需要在邊界被侵犯時(shí)提供信息。我們提出使用下溢、不準(zhǔn)確以及上溢例外(無論是fp所使用的相同的例外或者新的hpa特定的例外)來指示邊界問題。設(shè)想我么有256位hpa數(shù)(i,a)。存在兩個(gè)邊界,在低端的a和在高端的a+254。具有權(quán)重小于2a的位的任意fp數(shù)將會(huì)丟失一些關(guān)于轉(zhuǎn)換的信息。這通常不是問題,因?yàn)橥ㄟ^選取權(quán)重a,程序員已經(jīng)指示小于2a的值是不重要的。雖然如此,我們?nèi)孕枰獦?biāo)志這些位已經(jīng)丟失的事實(shí)。一種這樣做的方式是當(dāng)?shù)絟pa的轉(zhuǎn)換丟棄了在低端的一些位時(shí)設(shè)置不準(zhǔn)確標(biāo)志,并且當(dāng)整個(gè)fp輸入被丟棄時(shí)設(shè)置下溢標(biāo)志。在此示例中,這些計(jì)算僅應(yīng)用于針對無進(jìn)位指令的低階線路,所以實(shí)現(xiàn)方式應(yīng)當(dāng)能夠區(qū)分該線路。對大小大于2a+254的數(shù)的轉(zhuǎn)換設(shè)置了上溢例外,并且這總是要求程序使用不同的錨定值重新計(jì)算的嚴(yán)重問題。對于整數(shù)加法器中的上溢發(fā)生了相同的例外,解決方案同樣是使用不同錨定值重新計(jì)算。hpa程序應(yīng)當(dāng)核查上溢標(biāo)志以查看程序的結(jié)果是否是有意義的。大多數(shù)累加使用fp數(shù)的范圍的一小部分,所以它們能夠使用hpa數(shù)更快速且正確地進(jìn)行計(jì)算。hpa累加是可再現(xiàn)且可并行化的,并且在確定數(shù)據(jù)界限后對程序員而言沒有明顯比fp難。當(dāng)然,在fp缺乏結(jié)核性引起問題的情形下,對程序員而言hpa要簡單得多。很少有人被訓(xùn)練以分析fp給出不好的結(jié)果的情況。一種頻繁的響應(yīng)是使用更寬的fp格式來重新編碼,但是對于任意比dp大的數(shù)這樣做的性能并不好。使用hpa給出了更好的性能并且擺脫了舍入問題的最大害處。hpa還易于實(shí)現(xiàn),只需要對arm的simd單元進(jìn)行適當(dāng)?shù)母淖?。雖然這些改變向simd單元本身添加了少量的面積和功率,但是在核心級,功率,特別是能量,將會(huì)更低。執(zhí)行單元不是無序的機(jī)器中耗費(fèi)能量最多的地方,并且使得累加更快允許我們關(guān)閉耗費(fèi)能量的控制邏輯。圖8概要地示出了用于在程序指令的控制下執(zhí)行數(shù)據(jù)處理操作的數(shù)據(jù)處理裝置2。數(shù)據(jù)處理裝置2包括存儲(chǔ)器4,存儲(chǔ)器4存儲(chǔ)程序指令6和將要操縱的數(shù)據(jù)8。處理器核10被耦合到存儲(chǔ)器4并且包括寄存器組12、處理電路14、指令提取單元16、指令管線單元18和指令解碼器20。將認(rèn)識到,在實(shí)踐中,數(shù)據(jù)處理系統(tǒng)2可以包括許多另外的元件,圖8中表示被簡化了以輔助理解。在操作中,程序指令6被指令提取單元16從存儲(chǔ)器4提取,并提供給指令管線18。當(dāng)程序指令達(dá)到指令管線18內(nèi)的適當(dāng)級時(shí)它們被指令解碼器20解碼,并生成控制信號,這些控制信號用于控制寄存器組12和處理電路14的操作以執(zhí)行解碼的程序指令所指定的(一個(gè)或多個(gè))處理操作。多個(gè)輸入操作數(shù)可被從寄存器組讀取,并提供給處理電路14,這些輸入操作數(shù)在處理電路14中被操縱,然后結(jié)果值被寫回到寄存器組12中。寄存器組12可以具有各種不同的形式。將被操縱的操作數(shù)可以例如包括浮點(diǎn)操作數(shù)、定點(diǎn)操作數(shù)、整數(shù)操作數(shù)和hpa數(shù)操作數(shù)(如后面將描述的)。取決于寄存器組12的配置,寄存器組12可以用來存儲(chǔ)這些類型的操作數(shù)的混合體。操作數(shù)可以具有不同的精確度,這可以由它們的格式預(yù)定義,或者可以使用與寄存器相關(guān)聯(lián)的元數(shù)據(jù)來可編程地指定,如將在后面關(guān)于hpa數(shù)操作數(shù)進(jìn)行描述的。圖9概要地示出了浮點(diǎn)操作數(shù)。浮點(diǎn)操作數(shù)一般由符號、指數(shù)和有效數(shù)字構(gòu)成。浮點(diǎn)操作數(shù)可以表示具有它們的指數(shù)值所指示的廣泛的大小的值。數(shù)字可被表示的精度受到有效數(shù)字的大小的限制。浮點(diǎn)運(yùn)算通常比整數(shù)算法實(shí)現(xiàn)起來更為復(fù)雜和緩慢。圖9還示出了64位整數(shù)操作數(shù)。這樣的整數(shù)操作數(shù)針對無符號整數(shù)可以表示在0到(264-1)范圍內(nèi)的數(shù),針對有符號整數(shù)可以表示在-263到263-1范圍內(nèi)的數(shù)。整數(shù)算法通常是快速的且消耗比較少的能量來執(zhí)行,但是或遭受如下缺點(diǎn):與可以由浮點(diǎn)值表示的數(shù)的范圍相比,可以指定值的比較有限的范圍內(nèi)的數(shù)。圖9還示出了包括各自包括64位整數(shù)的多個(gè)組分(在該示例中為3個(gè))的向量的hpa數(shù)。hpa數(shù)具有與之相關(guān)聯(lián)的元數(shù)據(jù)。元數(shù)據(jù)包括指示形成hpa數(shù)的一部分的組分的位的可編程有效性的錨定值。(一個(gè)或多個(gè))錨定值直接或間接指定位有效性的下邊界和位有效性的上邊界。下面使用的術(shù)語元數(shù)據(jù)可被認(rèn)為是對應(yīng)于包括指定hpa數(shù)的位有效性的的(一個(gè)或多個(gè))錨定值。不同組分一起指定連續(xù)地張成該位有效性的范圍的位值。取決于位有效性的下邊界和位有效性的上邊界的位置,位有效性的范圍可以位有效性的范圍包括二進(jìn)制點(diǎn)位置。二進(jìn)制點(diǎn)位置可以位于針對特定hpa值指定的范圍外也是可能的。(一個(gè)或多個(gè))錨定值可以被提供,以使得它們能夠表示從與浮點(diǎn)值(例如,雙精度fp值)所能表示的最小有效性相對應(yīng)的位有效性的下邊界向上擴(kuò)展到與該浮點(diǎn)值所能表示的最高位有效性相對應(yīng)的位有效性的上邊界的位有效性的范圍。形成hpa數(shù)的組分的數(shù)目在不同實(shí)現(xiàn)方式之間可以不同。組分的大小在一些實(shí)施例中可以是固定的,但是在其他實(shí)施例中可以是變化的。位有效性范圍的總寬度在一些實(shí)施例中可以被局限為以固定組分大小為單位進(jìn)行改變(例如,對于64位的組分,位有效性的范圍可以具有如下寬度,例如,64、128、192、256……)。還可能是位有效性的范圍的寬度能夠以一位寬為步長連續(xù)地變化。如先前所提到的,(一個(gè)或多個(gè))錨定值(在元數(shù)據(jù)內(nèi))可以以各種不同的方式來指定可編程位有效性。一個(gè)示例是指定每個(gè)向量組分的下邊界位有效性。因此,每個(gè)向量組分可以包括在位有效性的總范圍內(nèi)的該值的有效性位的它的部分的整數(shù)值以及表示(錨定)該組分內(nèi)的最低位的有效性的元數(shù)據(jù)。另一選項(xiàng)是(一個(gè)或多個(gè))錨定值指定整個(gè)hpa數(shù)的位有效性的下邊界以及位有效性的范圍的總寬度。另一選項(xiàng)是(一個(gè)或多個(gè))錨定值可以包括指定位有效性的范圍的下邊界和上邊界的數(shù)據(jù)。其他變體也是可能的,比如,(一個(gè)或多個(gè))錨定值包括位有效性的范圍的下邊界以及組分的數(shù)目,其中哪些組分以指示固定寬度的組分。圖10概要地示出了以雙精度浮點(diǎn)型可表示的值的大小和hpa數(shù)的有效性范圍之間的關(guān)系。在雙精度浮點(diǎn)數(shù)的情形下,可以指定的位值的大小從近似2-1022擴(kuò)展到2+1023(未計(jì)入次正規(guī)數(shù))。表示20的二進(jìn)制值大約位于該范圍的中間。如所示,hpa數(shù)具有可編程位有效性范圍,其可被看作是使用浮點(diǎn)值可表示的位有效性的范圍內(nèi)的位有效性的窗口。該可編程位有效性可以由下邊界和上邊界來指定,并且取決于下邊界和上邊界的值,可被認(rèn)為是沿著浮點(diǎn)值所提供的位有效性的范圍滑動(dòng)。窗口的寬度以及其起始點(diǎn)和結(jié)束點(diǎn)可以由指定位有效性的的可編程元數(shù)據(jù)(包括(一個(gè)或多個(gè))錨定值)的適當(dāng)?shù)闹祦碇付?。因此,hpa數(shù)可以具有程序員所選擇的形式以匹配將要執(zhí)行的計(jì)算。圖11概要地示出了可以形成圖1的處理電路14的一部分的電路22。電路22包括配準(zhǔn)電路24、26,它們用于根據(jù)針對結(jié)果寄存器28指定并被存儲(chǔ)在與結(jié)果寄存器28相關(guān)聯(lián)的元數(shù)據(jù)存儲(chǔ)裝置30(其存儲(chǔ)(一個(gè)或多個(gè))錨定值)內(nèi)的可編程有效性值對輸入操作數(shù)執(zhí)行配準(zhǔn)操作。輸入操作數(shù)(可以是浮點(diǎn)數(shù)、定點(diǎn)數(shù)、整數(shù)值、hpa數(shù)、或它們的混合)被配準(zhǔn)以使得它們的整數(shù)位的值在將被存儲(chǔ)在結(jié)果寄存器2內(nèi)的結(jié)果值被確定之前被與針對結(jié)果寄存器28所指定的位有效性配準(zhǔn)。配準(zhǔn)電路24、26生成配準(zhǔn)的輸入操作數(shù),這些輸入操作數(shù)被提供給算術(shù)電路32。算術(shù)電路32可以是例如整數(shù)加法器或整數(shù)乘法器,它們將配準(zhǔn)的輸入操作數(shù)看作整數(shù)值并且相應(yīng)地對這些配準(zhǔn)的輸入操作數(shù)執(zhí)行相對快速且低能量的算術(shù)運(yùn)算。由算術(shù)電路32生成的結(jié)果值已經(jīng)被配準(zhǔn)到結(jié)果寄存器28的可編程有效性,并且在結(jié)果寄存器28內(nèi)被存儲(chǔ)為hpa數(shù)。在被提供給配準(zhǔn)電路24、26的輸入操作數(shù)中有一個(gè)或多個(gè)數(shù)浮點(diǎn)值的情形下,則配準(zhǔn)電路24、26還在確定浮點(diǎn)值的有效數(shù)字應(yīng)當(dāng)如何被配準(zhǔn)以匹配針對結(jié)果寄存器28所指定的位有效性時(shí)對浮點(diǎn)值的指數(shù)值作出響應(yīng)。將認(rèn)識到,元數(shù)據(jù)存儲(chǔ)裝置30內(nèi)所存儲(chǔ)的可編程位有效性參數(shù)((一個(gè)或多個(gè))錨定值)是與算術(shù)電路32所生成的配準(zhǔn)的結(jié)果值無關(guān)的;不執(zhí)行hpa數(shù)的正規(guī)化。因此,關(guān)于墜hpa數(shù)所執(zhí)行的處理,上溢、下溢以及其他例外情況是可能的,如稍后將在下面討論的。在圖11的示例中,可編程位有效性參數(shù)((一個(gè)或多個(gè))錨定值)在處理被執(zhí)行之前被存儲(chǔ)在元數(shù)據(jù)存儲(chǔ)裝置30內(nèi)。在其他實(shí)施例中,還可能是,如果輸入操作數(shù)是hpa數(shù),則針對結(jié)果寄存器28的可編程有效性參數(shù)可以取自與這些輸入操作數(shù)中的一個(gè)或多個(gè)相關(guān)聯(lián)的可編程有效性參數(shù),例如,任意hpa輸入操作數(shù)的可編程有效性參數(shù)中最大的可編程有效性參數(shù)可被選取并用作針對結(jié)果寄存器28的可編程有效性參數(shù)。圖12概要地示出了在一些示例實(shí)施例中可以形成圖1的處理電路14的一部分的電路。電路34對向量形式的hpa數(shù)執(zhí)行處理,該向量包括存儲(chǔ)于相應(yīng)的向量存儲(chǔ)元件36、38、40、42內(nèi)的多個(gè)組分。元數(shù)據(jù)存儲(chǔ)元件44(例如,元數(shù)據(jù)寄存器)用于存儲(chǔ)至少包括形成特定向量hpa數(shù)的組分的數(shù)目的元數(shù)據(jù)。向量的最低有效性組分被存儲(chǔ)在向量存儲(chǔ)元件42內(nèi),較高階的有效性組分根據(jù)需要被存儲(chǔ)在向量存儲(chǔ)元件40、38、36內(nèi)。電路34還包括與向量hpa數(shù)的各個(gè)組分相關(guān)聯(lián)的處理電路46、48、50、52,它們可被安排為執(zhí)行諸如由正被執(zhí)行的程序指令指定的加法、減法和乘法之類的運(yùn)算。在實(shí)踐中,由處理電路46、48、50和52執(zhí)行的處理取決于有多少組分包括向量hpa數(shù)值和正被執(zhí)行的程序指令。具體地,當(dāng)向量hpa數(shù)包括多個(gè)組分時(shí),那么進(jìn)位輸出值被從最低有效位端開始在處理電路46、48、50、52的不同部分之間傳遞。在圖12中所示的示例中,示出了四個(gè)單獨(dú)的處理電路。如果向量hpa數(shù)包括四個(gè)組分,則這四個(gè)線路全部可被并行地使用。還可能是,如果hpa數(shù)包括兩個(gè)組分,則兩個(gè)這樣的雙組分hpa數(shù)可在圖12的電路內(nèi)被并行處理,其中不在處理電路50和48的組分之間執(zhí)行進(jìn)位。圖13示出了圖12的電路的變體。在圖13的電路54中,向量hpa數(shù)值同樣服從于程序指令所指定的處理。在此情形下,取決于程序指令和指示向量hpa數(shù)內(nèi)的組分的數(shù)目的元數(shù)據(jù),處理電路58是由微操作生成電路60所生成的微操作指令控制的。具體地,如果四對組分需要相加以在兩個(gè)四組分hpa數(shù)之間執(zhí)行加法,則由處理電路58串行地執(zhí)行這四個(gè)加法。這些加法中的第一個(gè)不具有進(jìn)位輸入,并且可以由微操作指令add來表示。接下來的三個(gè)加法接收來自先前的加法的進(jìn)位輸入,并且可由微操作指令addc來指定。最終結(jié)果向量hpa數(shù)被寫入到結(jié)果寄存器62內(nèi)。圖14概要地示出了可以形成圖1的處理電路14的一部分的電路64。電路64類似于圖11的電路,但是在此情形下,還包括例外生成電路66。例外生成電路66對來自配準(zhǔn)電路68、70和處理電路72的輸入作出響應(yīng)以標(biāo)識各種例外情況的發(fā)生。這些例外情況可以包括如下一個(gè)或多個(gè)情況:輸入操作數(shù)之一是次正規(guī)浮點(diǎn)數(shù);在格式之間對數(shù)的轉(zhuǎn)換已經(jīng)是不準(zhǔn)確的;所生成的結(jié)果值使得結(jié)果寄存器74的可編程有效性范圍下溢,輸入操作數(shù)具有無限大的值;不是數(shù)字;或者正被轉(zhuǎn)換為無符號的目標(biāo)值的是有符號值。將認(rèn)識到,可能有各種其他形式的例外指示。這些例外當(dāng)發(fā)生時(shí)可被記錄在全局例外存儲(chǔ)裝置76內(nèi)。替代地,例外可以與各個(gè)hpa數(shù)相關(guān)聯(lián),并形成與那些hpa值相關(guān)聯(lián)的元數(shù)據(jù)的一部分。其他布局也是可能的。本公開的至少一些實(shí)施例包括用于處理針對表示浮點(diǎn)(fp)值的hpa數(shù)的轉(zhuǎn)換和算術(shù)例外的方法。一些實(shí)施例的目標(biāo)可以是產(chǎn)生與當(dāng)使fp數(shù)相加時(shí)(例如,+無窮大被加到-無窮大返回nan和無效的運(yùn)算例外ioc)將產(chǎn)生的相同例外(除不準(zhǔn)確外),以及給程序員檢測錨定向量所指定的有效性是否太小所需要的信息。使用hpa數(shù)據(jù)類型來表示全寬度或部分寬度的浮點(diǎn)值給ieee754例外處理帶來了問題。表2包括針對fp例外的條目(除dzc外)(除以零,在除法期間發(fā)生的例外,不轉(zhuǎn)換),以及針對無窮大、nan和符號的元數(shù)據(jù)條目。這些例外可以被立即記錄在全局例外字段中,或者在hpa數(shù)據(jù)類型已經(jīng)被轉(zhuǎn)換為標(biāo)準(zhǔn)fp數(shù)據(jù)類型(sp或dp)后被記錄在全局例外字段中,或者從來不被記錄在該全局字段中。它們可以或者可以不被合并在針對數(shù)據(jù)類型的元數(shù)據(jù)中。一些是非標(biāo)準(zhǔn)的例外,而其他的是ieee754所規(guī)定的。表2的fp->int和int->fp列示出了在fp和64位或32位整數(shù)之間的ieee-754轉(zhuǎn)換期間會(huì)發(fā)生什么。包括這些以提供關(guān)于ieee-754行為的指導(dǎo)。最后三列示出了對于涉及hpa值的轉(zhuǎn)換和加法哪些例外是可能的,以及這些運(yùn)算能夠如何處理無窮大和nan。如果hpa數(shù)向量足夠大以精確地表示fp類型,則大部分例外將不會(huì)發(fā)生。針對每個(gè)有限的fp數(shù)存在唯一的hpa數(shù),所以對于到hpa數(shù)的轉(zhuǎn)換,上溢和下溢應(yīng)當(dāng)不會(huì)發(fā)生,甚至不準(zhǔn)確應(yīng)當(dāng)也不會(huì)發(fā)生。加法和減法不會(huì)引起下溢,并且它們是精確的,所以不應(yīng)當(dāng)出現(xiàn)任何例外。最后,如果使用全hpa精確度,則轉(zhuǎn)換回fp應(yīng)當(dāng)不會(huì)下溢。對于加法和轉(zhuǎn)換回fp都會(huì)發(fā)生上溢。簡單地將最大正fp數(shù)的hpa等價(jià)物加到它自身將或給出可能使加法上溢的結(jié)果(取決于我們對hpa數(shù)給定的位數(shù)),并且它將使轉(zhuǎn)換回fp上溢。如果使用更小的向量(程序員處于性能的原因而將想要做的一些事情),則更多的例外變得可能。此外,這些例外變得對程序員而言是有意義的,因?yàn)檫@種算法的一個(gè)可能的目的是再現(xiàn)性和準(zhǔn)確性。一般而言,看到,上溢、下溢或不準(zhǔn)確指示存儲(chǔ)hpa數(shù)需要較大的向量。表2是處理/生成例外指示的一個(gè)實(shí)施例的示例;例外位的其他定義和其他情形可以是可能的。列“fp->int”是標(biāo)準(zhǔn)浮點(diǎn)數(shù)據(jù)類型(例如,sp和dp)到標(biāo)準(zhǔn)整數(shù)格式(全精度或任意精度)的轉(zhuǎn)換;“int->fp”是逆轉(zhuǎn)換;“fp->ahp”是標(biāo)準(zhǔn)浮點(diǎn)格式或fp的計(jì)算乘積到hpa數(shù)據(jù)類型的轉(zhuǎn)換;“hpa->fp”是針對hpa數(shù)據(jù)類型到標(biāo)準(zhǔn)fp格式的逆轉(zhuǎn)換;以及“apadd/sub”關(guān)注hpa數(shù)據(jù)的加法或減法。表2指示哪些例外是可能的(由y指示),哪些例外不會(huì)發(fā)生(由針對不的n或針對不適用的na來指示),以及腳注更詳細(xì)地解釋例外行為。表2(a)比整數(shù)小的數(shù)字被轉(zhuǎn)換為零,而不設(shè)置例外標(biāo)志。(b)比能夠支持的整數(shù)大的數(shù)字被轉(zhuǎn)換為最大正整數(shù)或最大負(fù)整數(shù),并且返回ioc而非ofc。(c)比能夠支持的整數(shù)大的數(shù)字、被轉(zhuǎn)換為無符號格式的負(fù)數(shù)、輸入無窮大或輸入nan都是無效的。返回的整數(shù)是零或最大正數(shù)或最大負(fù)數(shù)。(d)這些被轉(zhuǎn)換為最大正整數(shù)或最大負(fù)整數(shù),返回ioc。(e)這些被轉(zhuǎn)換為零,返回ioc。(f)假設(shè)有足夠大的目的地向量,該例外不會(huì)發(fā)生,但是程序員可以指定較小的目的地(比方說,程序員知道全部輸入在2^-100到2^+100的范圍內(nèi))。該標(biāo)志指示程序員弄錯(cuò)了。(g)與(f)類似,該標(biāo)志能夠指示程序員弄錯(cuò)了,即輸入值小于給定錨定點(diǎn)范圍內(nèi)所能表示的值。取決于程序員打算做的事情,這可能是嚴(yán)重的也可能是不嚴(yán)重的(例如,程序員本打算不考慮很小的數(shù))。在一些實(shí)現(xiàn)方式中,ixc和ufc的組合給出了額外的信息:ufc僅表示沒有任何位被轉(zhuǎn)換,而ixc和ufc表示部分轉(zhuǎn)換。不試圖對部分轉(zhuǎn)換進(jìn)行舍入。(h)該標(biāo)志指示嚴(yán)重問題,即輸入值大于給定hpa向量中所能表示的值。正如在(g)中,我們將使用ixc標(biāo)志來指示部分轉(zhuǎn)換成功,但是在所有情形下,該標(biāo)志說明我們需要使用更大的hpa向量來再次嘗試。(i)該標(biāo)志指示嚴(yán)重問題。我們提出為輸入無窮大或nan設(shè)置該標(biāo)志,以及(如果我們安排無符號hpa格式)為負(fù)的非零數(shù)到無符號hpa格式的轉(zhuǎn)換設(shè)置該標(biāo)志。輸入無窮大或nan也應(yīng)當(dāng)調(diào)整元數(shù)據(jù)標(biāo)志。(j)參考下面關(guān)于元數(shù)據(jù)的討論。為了關(guān)于符號無窮大或nan給出與fp計(jì)算相同的結(jié)果,我們需要給定數(shù)字是無窮大或nan以及無窮大的符號的某種指示。這些連同在hpa數(shù)的產(chǎn)生過程中生成的一些例外的記錄最好被與hpa數(shù)存儲(chǔ)在一起,理想地,作為第二元數(shù)據(jù)向量的一部分。本公開的至少一些實(shí)施例包括使用像simd一樣的硬件來加或減hpa數(shù)或整數(shù),即,比64位寬的數(shù)字。在一些實(shí)現(xiàn)方式中,可能使用可擴(kuò)展寄存器來加成千上萬位長的數(shù)字,不管所實(shí)現(xiàn)的向量長度有多長只使用單次循環(huán)加法(至少針對可能的實(shí)現(xiàn)方式)。像simd一樣的系統(tǒng)可以包括可擴(kuò)展向量寄存器,并且那些寄存器可以包括多個(gè)64位的值。為了新的加或減指令,提議可擴(kuò)展向量寄存器被看作是一個(gè)長64*n-位的二進(jìn)制補(bǔ)碼整數(shù),而不是n個(gè)64位數(shù)字的寄存器。根據(jù)simd方案,加法或減法被硬件拆分為實(shí)現(xiàn)方式定義的塊(例如,256位或512位),并且被從低階塊加到高階塊。每塊可以在單次循環(huán)中執(zhí)行(至少高達(dá)1024位的塊)。如果塊生成進(jìn)位輸出,則該進(jìn)位輸出可以被輸入到下一塊。這可以使用謂詞條件標(biāo)志來指示/控制。這是對謂詞條件的非標(biāo)準(zhǔn)使用。對塊的每個(gè)加法或減法將讀和寫進(jìn)位謂詞條件標(biāo)志(下文稱作pcarry),如果設(shè)置了pcarry則設(shè)置對加法或減法的進(jìn)位輸入,然后基于來自該塊的進(jìn)位輸出的存在性來設(shè)置或清除pcarry??梢砸猿S玫亩M(jìn)制補(bǔ)碼方式來進(jìn)行減法,即a-b=a+~b+1。+1將被作為向低階塊的進(jìn)位輸入進(jìn)行處理(這未被使用,因?yàn)榈碗A中沒有東西來生成進(jìn)位)。對塊的單次循環(huán)加法將可能使用現(xiàn)有的64位加法器來進(jìn)行,現(xiàn)有的64位加法器具有用于將加法擴(kuò)展到任意塊大小的選擇進(jìn)位邏輯。圖1中示出可由若干64位加法器構(gòu)成的256位加法器。替代的“提前進(jìn)位”途徑(如圖2中所示)能夠被用來加速沿加法器的進(jìn)位輸入,如圖2中所示,其中,gn是64位進(jìn)位生成信號,pn是64位進(jìn)位傳遞信號,以及gn:0是將全部64位加法器生成并從有效性64×(n+1)向下傳遞的信號進(jìn)行組合的進(jìn)位信號。提前進(jìn)位途徑可以支持大小高達(dá)1024位的和單次循環(huán)執(zhí)行。如果加/減指令使用謂詞寄存器,謂詞位可被用來控制在任意給定64位邊界處是否傳遞進(jìn)位。這將允許向量包括多個(gè)128位或更大的整數(shù)值。所以1024位向量寄存器能夠被看作是十六個(gè)64位值或四個(gè)256位值或單個(gè)1024位值,并且單一加法指令將在所有情形下正確地起作用。一種可能的實(shí)現(xiàn)方式將是具有表示“使能pcarry”的謂詞位,該謂詞位當(dāng)針對任意64位元件設(shè)置時(shí)將允許進(jìn)位輸入到特定加法器。在該更一般的方案中減法(a-b)是通過使b反相(在全部64位位置處)并且在未針對其設(shè)置“使能pcarry”位的那些位置處加1。該方案將允許現(xiàn)有的加指令就像它目前所做的那樣起作用(如果沒有設(shè)置“使能pcarry”位),但還將允許輸入向量被解釋為包含高精度數(shù)的任意混合??紤]512位向量的加法以及包含“使能pcarry”位為的謂詞,如表3中:pc7pc6pc5pc4pc3pc2pc1pc0(a)8×64位00000000(b)4×128位10101010(c)2×256位11101110(d)1×512位11111110(e)1×256和2×128位11101010表3在情形(a)下,沒有任何新的謂詞位(表示為pci)被設(shè)置,所以加法被解釋為8個(gè)64位值中的每個(gè)值的單獨(dú)的加法。在情形(b)下,謂詞位允許從偶64位寄存器向奇64位寄存器進(jìn)位,這意味著加法現(xiàn)在正作用于128位值。在(c)和(d)下,這些進(jìn)位針對逐步增大的數(shù)字被允許。情形(e)示出了針對給定向量甚至是混合的解釋也是可能的。圖15示出了包括處理電路102的裝置的示例,處理電路102接收一個(gè)或多個(gè)操作數(shù)并響應(yīng)于這些操作數(shù)而生成結(jié)果。該處理電路接收可編程控制數(shù)據(jù)104,可編程控制數(shù)據(jù)104指定結(jié)果值的目標(biāo)有效性和目標(biāo)大小(長度)中的至少一個(gè)。響應(yīng)于可編程控制數(shù)據(jù)c4,處理電路102生成具有目標(biāo)有效性和/或目標(biāo)大小的結(jié)果值,而不考慮提供給處理電路102的操作數(shù)的值。如果對輸入操作數(shù)執(zhí)行處理操作(例如,乘法或加法)將給出具有指定目標(biāo)有效性和目標(biāo)大小的結(jié)果值無法表示的值,則處理電路可以輸出例外信號106以指示該結(jié)果值不準(zhǔn)確。例如,例外指示可以指示下述項(xiàng)之一:·處理運(yùn)算的結(jié)果大于使用具有指定有效性和大小的結(jié)果值所能表示的值時(shí)的上溢情況;·當(dāng)結(jié)果小于具有指定有效性和大小的結(jié)果值所能表示的值時(shí)的下溢情況;或者·當(dāng)結(jié)果比使用具有目標(biāo)有效性和大小的值能表示的值更為精確時(shí)的不準(zhǔn)確情況。即使真正的處理結(jié)果落在指定有效性外處理電路也應(yīng)當(dāng)被允許生成具有該有效性的結(jié)果可能看起來是不合常理的。然而,如圖16的示例中所示,這對于限制所需要的處理的量能夠是有用的,從而如果大體預(yù)期結(jié)果在較小的位數(shù)目內(nèi)則不必處理非常大的數(shù)字。例如,控制數(shù)據(jù)104可以指定低有效性邊界110和高有效性邊界112中的一者或兩者。處理電路102可以限制其處理,以使得它確定落在指定的有效性邊界110、112內(nèi)的結(jié)果值的位值,而不確定落在邊界外部的位值。因此,雖然結(jié)果值具有能夠表示數(shù)空間114的寬泛范圍內(nèi)的數(shù)字,但是控制數(shù)據(jù)104定義了該數(shù)空間內(nèi)的變量長度和位置的窗口,并且處理電路102僅計(jì)算在指定窗口內(nèi)的位,以加速處理并降低能耗。例如,程序員可能知道預(yù)期落在某一有效性范圍內(nèi)的有效操作數(shù)值和結(jié)果,所以通過適當(dāng)?shù)卦O(shè)置控制數(shù)據(jù),使得處理資源不被浪費(fèi)在計(jì)算有效性低于或高于預(yù)期范圍的位值。雖然如此,可以通過改變可編程控制數(shù)據(jù)來調(diào)整在其中執(zhí)行處理的窗口,從而可以以較小的硬件開銷支持寬泛的值的范圍。在一些情形下,結(jié)果值的大小可以是固定的,并且控制數(shù)據(jù)104可以僅指定低有效性邊界110和高有效性邊界112之一,從指定的邊界和已知的結(jié)果大小來確定另一邊界。替代地,大小可以是可變的,并且可以在控制數(shù)據(jù)104中明確指定,或者可以被表示為某一位數(shù)(例如,32或64位)的倍數(shù)。在另一示例中,控制數(shù)據(jù)104可以指定低有效性邊界110和高有效性邊界112,這有效地將大小標(biāo)識為邊界之間的差值。因此,存在多種方式使得能夠根據(jù)控制數(shù)據(jù)確定結(jié)果值的目標(biāo)大小和目標(biāo)有效性。圖17示出了高精度錨定(hpa)數(shù)據(jù)格式的數(shù)據(jù)值的示例。hpa數(shù)包括數(shù)據(jù)向量vi和元數(shù)據(jù)向量或“錨定”向量va,vi包括多個(gè)數(shù)據(jù)元素d[0]-d[3],這些數(shù)據(jù)元素各自包括表示二進(jìn)制值(它是未正規(guī)化的)的相應(yīng)部分的二進(jìn)制補(bǔ)碼數(shù),va包括錨定值元素a[0]-a[3],這些錨定值元素各自指定數(shù)據(jù)向量vi中的相應(yīng)數(shù)據(jù)元素的有效性(“權(quán)重”)。例如,每個(gè)錨定值元素a[i]可以指定相應(yīng)的數(shù)據(jù)元素向量vi中的最低有效位的有效性。雖然圖17示出了向量vi、va包括4個(gè)數(shù)據(jù)元素(這些數(shù)據(jù)元素可以具有諸如64或128位之類的某一元件大小)的示例,但是將認(rèn)識到,這些向量可以具有變化數(shù)目的數(shù)據(jù)元素。向量中的元素的數(shù)目可以在錨定值va內(nèi)被指示,例如,通過在未被使用的任意向量線路的錨定值元素a[i]中提供預(yù)定位組合格式或狀態(tài)標(biāo)志,以使得將要處理的元素的數(shù)目由不具有該位組合格式的錨定值元素來指示。例如,具有權(quán)重(x,118,54,-10)的錨定值向量va(其中x是指示未使用的線路的位組合格式或狀態(tài)標(biāo)志)可以指示64位數(shù)據(jù)元素d[2]、d[1]和d[0]共同表示具有有效性為2-10的最低有效位和有效性為2181的最高有效位的192位二進(jìn)制值。替代地,hpa數(shù)可以在該hpa數(shù)中具有指定將要處理的元素的數(shù)據(jù)的一些另外的元數(shù)據(jù)120。而且,錨定值向量va或另外的元數(shù)據(jù)120還可以指定其他信息,比如,數(shù)據(jù)向量vi所表示的數(shù)據(jù)值的符號,指示在向量的處理期間可能已經(jīng)出現(xiàn)的例外情況(例如,上溢、下溢、不準(zhǔn)確、無效運(yùn)算或輸入次正規(guī)例外),或者指示例如數(shù)據(jù)值是否是無窮大、不是數(shù)字(nan)或零的特性信息。當(dāng)加或減hpa值時(shí),針對到加法/減法的各種輸入錨定值時(shí)固定的,并且結(jié)果是以相同的錨定值生成的。這意味值簡單的定點(diǎn)加法器可被用來處理hpa值,所以不需要支持舍入和正規(guī)化的浮點(diǎn)加法電路,這能夠使得更快地處理一系列加法或減法。當(dāng)在hpa格式和其他格式(比如,浮點(diǎn)或整數(shù)或定點(diǎn)格式)之間轉(zhuǎn)換以生成具有適當(dāng)?shù)挠行缘闹禃r(shí)使用錨定值。以此方式將值表示為向量是有用的,因?yàn)樗试S對具有變化的有效性的變量長度值的處理被有效地處理而不需要非常大的累加器(例如,參見下面的圖19)。圖18示出了用于支持hpa數(shù)格式的數(shù)據(jù)值的存儲(chǔ)單元(例如,寄存器文件)130的示例。本公開的任意實(shí)施例中所示的裝置可以被提供有圖18中所示的存儲(chǔ)單元。該存儲(chǔ)單元包括多個(gè)數(shù)據(jù)存儲(chǔ)元件(寄存器)132,它們各自具有相應(yīng)的元數(shù)據(jù)存儲(chǔ)元件(寄存器)134。在一些示例中,元數(shù)據(jù)寄存器134可以與數(shù)據(jù)存儲(chǔ)寄存器132在不同的寄存器文件中。替代地,數(shù)據(jù)寄存器和元數(shù)據(jù)寄存器可以是單一寄存器文件的一部分,或者可以包括同一寄存器的不同部分。每個(gè)數(shù)據(jù)存儲(chǔ)寄存器132可以存儲(chǔ)針對給定hpa數(shù)的數(shù)據(jù)向量vi。相應(yīng)的元數(shù)據(jù)存儲(chǔ)寄存器134存儲(chǔ)針對該hpa值的錨定向量va以及任意另外的元數(shù)據(jù)120(如果有提供的話)。在一些示例中,元數(shù)據(jù)存儲(chǔ)寄存器134中的元數(shù)據(jù)可以被看作是與相應(yīng)的數(shù)據(jù)存儲(chǔ)寄存器132本身而不是相應(yīng)的數(shù)據(jù)存儲(chǔ)寄存器中的特定數(shù)據(jù)值相關(guān)聯(lián)。也就是說,可以在任意值實(shí)際被計(jì)算以存儲(chǔ)在數(shù)據(jù)存儲(chǔ)寄存器中之前為給定寄存器定義錨定值va。當(dāng)執(zhí)行將數(shù)據(jù)存儲(chǔ)寄存器132之一指定為目的地寄存器的處理運(yùn)算時(shí),處理電路102可以從相應(yīng)的元數(shù)據(jù)寄存器134讀取錨定值并生成具有由(一個(gè)或多個(gè))錨定值指定的目標(biāo)有效性和/或目標(biāo)長度的結(jié)果值,而與到該處理運(yùn)算的任意輸入的值或有效性無關(guān)??苫诔绦騿T所提供的控制數(shù)據(jù)對錨定值進(jìn)行編程。在一些情形下,程序員可以直接指定錨定值,而在其他示例中,庫或其他軟件程序可以將程序員輸入的控制數(shù)據(jù)轉(zhuǎn)換為(一個(gè)或多個(gè))可被處理電路102讀取的合適格式的錨定值(該途徑允許程序員在不必理解硬件所使用的內(nèi)部元數(shù)據(jù)格式的情況下設(shè)置錨定值)。如果hpa數(shù)需要比單一數(shù)據(jù)寄存器132中所存儲(chǔ)的更多的元素,則hpa數(shù)可以跨多個(gè)寄存器,其中相應(yīng)的元數(shù)據(jù)指定與該hpa數(shù)相對應(yīng)的寄存器的數(shù)目并且定義每個(gè)數(shù)據(jù)元素所表示的給定二進(jìn)制值的各部分的有效性。圖19示出了用于處理hpa格式的數(shù)字的處理電路102的示例。處理電路102可以具有多個(gè)處理單元140,這些處理單元140用于基于給定hpa數(shù)的相應(yīng)的元數(shù)據(jù)向量va中的錨定值對數(shù)據(jù)向量vi的各個(gè)數(shù)據(jù)元素執(zhí)行并行的處理線路(例如,轉(zhuǎn)換或算術(shù)運(yùn)算)。在一些情形下,處理電路102可以對兩個(gè)hpa數(shù)進(jìn)行暈眩,并且每個(gè)線路了可以接收兩個(gè)hpa數(shù)的相應(yīng)的元素d0[i]、d1[i]。在此情形下,hpa數(shù)共享相同的錨定值,并且結(jié)果的相應(yīng)的數(shù)據(jù)元素r[i]被生成以產(chǎn)生hpa格式的結(jié)果值,該結(jié)果值也具有與輸入相同的錨定值。在執(zhí)行處理之前將具有不同錨定值的hpa數(shù)映射到具有相同錨定值的hpa數(shù)是可能的。替代地,響應(yīng)于將源操作數(shù)指定為一個(gè)hpa數(shù)和浮點(diǎn)數(shù)的指令,浮點(diǎn)數(shù)(或者從對多個(gè)浮點(diǎn)操作數(shù)執(zhí)行的算術(shù)運(yùn)算獲得的浮點(diǎn)數(shù))可在被與其他hpa數(shù)結(jié)合之前被映射到hpa格式。每個(gè)線路接收錨定向量va的相應(yīng)的錨定值a[i],并且這可以控制浮點(diǎn)操作數(shù)fp如何被映射到hpa數(shù)的相應(yīng)的元素。針對給定計(jì)算處理的元素的數(shù)目可以根據(jù)元數(shù)據(jù)而變化。雖然處理單元140是針對某些數(shù)目的線路提供的,但是如果針對特定計(jì)算并不需要全部線路,則未使用的線路可以是功率選通的或者被提供零輸入,以防止線路內(nèi)的內(nèi)部位狀態(tài)的反復(fù)(toggling)來節(jié)省功率。另一方面,如果元數(shù)據(jù)或錨定值指定比硬件內(nèi)所提供的處理單元140的數(shù)目多個(gè)數(shù)目的元件,則hpa數(shù)可以通過多個(gè)經(jīng)過硬件而被處理??傊?,這里描述的高精度定點(diǎn)算術(shù)系統(tǒng)并入了“高精度錨定”(hpa)數(shù)據(jù)類型。hpa數(shù)據(jù)類型可以是一對向量,一個(gè)包含作為固定長度額整數(shù)的有序集合的數(shù)據(jù)(例如,八個(gè)64位整數(shù)的有序集合),且另一個(gè)包含指定每個(gè)固定長度的整數(shù)如何由硬件進(jìn)行解釋的元數(shù)據(jù)(錨定值)(例如,給出整數(shù)的每位的指數(shù)權(quán)重的范圍信息)。因?yàn)槊總€(gè)線路接收數(shù)據(jù)和和特定于該數(shù)據(jù)的元數(shù)據(jù),所以這些線路能夠進(jìn)行不同運(yùn)算,這些運(yùn)算整體產(chǎn)生對該向量有意義的結(jié)果。例如,hpa值可以表示非常長的整數(shù),例如,200到4000位長,其以定點(diǎn)形式來表示浮點(diǎn)數(shù)或乘積。與該長整數(shù)的每個(gè)64位部分相關(guān)聯(lián)的錨定元素告訴64位線路如何解釋該64位整數(shù)。因此,提供了包含數(shù)據(jù)和與該數(shù)據(jù)相關(guān)聯(lián)的元數(shù)據(jù)以及創(chuàng)建多個(gè)數(shù)據(jù)項(xiàng)(每個(gè)數(shù)據(jù)項(xiàng)具有特定于該數(shù)據(jù)項(xiàng)的元數(shù)據(jù))的能力的數(shù)據(jù)類型。hpa數(shù)可以是完整大小數(shù)據(jù)類型或者該完整大小數(shù)據(jù)類型的范圍或精度的一部分。完整大小數(shù)據(jù)類型可以是例如2099位(以支持全部雙精度數(shù)),或4198位(以支持全部雙精度乘積),或者是允許我們使這些值中的許多值相加而不會(huì)上溢的某一更大的大小。明顯地,這是大量的位,并且對這些數(shù)據(jù)類型的運(yùn)算將需要多次循環(huán),并且存儲(chǔ)將是重要的。然而,在許多情形下,被執(zhí)行的功能或應(yīng)用將不需要完整的數(shù)據(jù)類型而只需要該數(shù)據(jù)類型的一部分,并且程序員通過數(shù)值分析和仿真將獲知這一點(diǎn)。例如,特定程序可能永遠(yuǎn)不會(huì)具有次正規(guī)輸入,或者可能具有一些其他范圍限制。在這些情形下,我們可以使用較小的hpa數(shù)。該數(shù)據(jù)類型可以僅由若干特性來定義。這些包括數(shù)據(jù)類型的大小,在一些情形下以位或向量線路大小的倍數(shù)來計(jì),或者它也能夠就固定數(shù)據(jù)大小(比如,32位或64位)來定義。此外,該數(shù)據(jù)類型可以由能夠表示的最低指數(shù)來定義。例如,如果算法處理在[+/-1025,1045]范圍內(nèi)的單精度數(shù)據(jù),并且全部中間計(jì)算在相同的范圍內(nèi)(中間計(jì)算的范圍能夠大于或小于輸入數(shù)據(jù)范圍,但是在大多數(shù)情形下最終范圍應(yīng)當(dāng)合并兩個(gè)范圍的外延),則該數(shù)據(jù)類型將僅包括表示該范圍內(nèi)的數(shù)據(jù)所必需的位的數(shù)目。在此示例中,1025略大于283且1045稍小于2150,所以針對該算法的適當(dāng)?shù)臄?shù)據(jù)類型將是91位(150-83+24),并且錨定值將可表示的最小指數(shù)標(biāo)識為83。該數(shù)據(jù)項(xiàng)的總和將涉及該數(shù)據(jù)類型的91位,而不是全部的2099位,從而大幅降低了計(jì)算時(shí)間和存儲(chǔ)要求。為了處理浮點(diǎn)例外,對于每個(gè)hpa數(shù)的元數(shù)據(jù)包括至少以下信息也會(huì)是有用的:·符號(該值是正的還是負(fù)的)·例外位,例如,ieee754-2008定義的位-ixc(不準(zhǔn)確例外)、ioc(無效運(yùn)算例外)、ufc(下溢例外)、ofc(上溢例外);或?qū)崿F(xiàn)方式定義的位-idc(輸入非正規(guī)例外)。如果不需要hpa數(shù)的除法,則可以不需要dzc(除以零)例外位?!ぬ匦晕?例如,指示該值是無窮大、nan(不是數(shù)字)、零)這些位將是數(shù)據(jù)類型的一部分,并且不一定要針對每個(gè)線路進(jìn)行復(fù)制。圖20示出了可以使用hpa值執(zhí)行的運(yùn)算的示例。在此情形下,運(yùn)算是找到一系列浮點(diǎn)值的和的累加運(yùn)算。如果這些是以浮點(diǎn)算法進(jìn)行處理的,則浮點(diǎn)值被加的順序?qū)⒂绊懺摻Y(jié)果,因?yàn)槊總€(gè)一對浮點(diǎn)值的加法可以導(dǎo)致由于舍入和正規(guī)化而引起的不精確,所以浮點(diǎn)加法是不結(jié)合的。因此,為給出可預(yù)測的結(jié)果,使用浮點(diǎn)加法累加一系列浮點(diǎn)值將要求這些加法按照固定的順序被依次執(zhí)行,這使得它難以被快速地執(zhí)行。相反地,通過使用hpa格式,性能可得到大幅提升,因?yàn)閔pa數(shù)的加法是結(jié)合的,所以即使一些加法在多處理器系統(tǒng)內(nèi)被并行地執(zhí)行或者這些加法根據(jù)誰的操作數(shù)首先變得可用而被重新排序,結(jié)果也將是正確且可重復(fù)的。圖20示出了在一個(gè)加法中執(zhí)行的步驟,這些步驟然后可被重復(fù)多次以累加每個(gè)浮點(diǎn)值。在每個(gè)加法中,輸入浮點(diǎn)值fp被基于提前針對hpa數(shù)指定的可編程錨定向量va映射到hpa格式的數(shù)據(jù)向量vi1。根據(jù)錨定向量va中所定義的有效性邊界和浮點(diǎn)值的指數(shù)e,浮點(diǎn)值fp的有效數(shù)字f被映射到數(shù)據(jù)向量vi1的一個(gè)或多個(gè)元素的一部分。由于該向量比浮點(diǎn)值的有效數(shù)字f大得多,所以通常僅有該向量的少量線路將被填充來自有效數(shù)字的位值,更高的線路全部被填充符號位,更低的線路被填充零。下面將更詳細(xì)地討論轉(zhuǎn)換運(yùn)算。因此,經(jīng)轉(zhuǎn)換的數(shù)據(jù)向量vi1實(shí)際上是長定點(diǎn)值,它提供對由浮點(diǎn)值表示的二進(jìn)制值的替代表示。這意味著它可以通過簡單的整數(shù)加法被加到另一hpa格式的數(shù)據(jù)向量vi0(它與vi1具有相同的錨定值),而不需要像浮點(diǎn)算法那樣的配準(zhǔn)、正規(guī)化、舍入和指數(shù)調(diào)整步驟。這意味著該加法運(yùn)算可與其他加法結(jié)合,所以能夠被并行地執(zhí)行或者能夠被重新排序以提升性能。向量vir是通過使數(shù)據(jù)向量vi0、vi1相加生成的,并且這表示hpa格式的結(jié)果值的數(shù)據(jù)向量與vi0、vi1具有相同的錨定值。如果這不是累加的最后的加法,則當(dāng)另一浮點(diǎn)值fp被輸入并轉(zhuǎn)換為hpa格式并且加到先前的累加結(jié)果時(shí),結(jié)果向量vir成為用于下一個(gè)加法的第二向量vi0。通過重復(fù)這些步驟若干次,可以非??焖俚厥挂幌盗懈↑c(diǎn)值相加而不損失精度,這對于浮點(diǎn)算法是不可能的。已經(jīng)生成最終的累加結(jié)果后,該結(jié)果的數(shù)據(jù)向量vir然后可以根據(jù)需要被轉(zhuǎn)換回浮點(diǎn)值,利用錨定向量va來控制轉(zhuǎn)換被執(zhí)行的方式以使得浮點(diǎn)值表示與該結(jié)果值相對應(yīng)的二進(jìn)制值(如果必要的話則進(jìn)行舍入)。因此,浮點(diǎn)(fp)數(shù)或乘積可被轉(zhuǎn)換為高精度錨定(hpa)數(shù)。這些hpa數(shù)可以成百(單精度)上千(雙精度)位長,但是它們可以是fp輸入的準(zhǔn)確表示,與fp數(shù)不同,這些數(shù)字遵從算法的常規(guī)結(jié)合性質(zhì)?,F(xiàn)在將更詳細(xì)地討論從fp數(shù)到hpa數(shù)的轉(zhuǎn)換。單精度浮點(diǎn)(sp)數(shù)包括符號位、8個(gè)指數(shù)位、以及23個(gè)小數(shù)位。還存在(基于該指數(shù)的)隱藏位,該隱藏位被用來構(gòu)造形式為1.小數(shù)或0.小數(shù)的有效數(shù)字。最大的指數(shù)和最小的指數(shù)被預(yù)留用于特殊數(shù)字,但是有效數(shù)字的第一位能夠出現(xiàn)在指數(shù)所指定的其他28-2=254個(gè)位置中的任意位置。有效數(shù)字的第一位后面是小數(shù),并且存在一個(gè)額外的位來表示符號,所以任意有限sp數(shù)可以被表示為254+23+1=278位定點(diǎn)數(shù)。如果我們打算構(gòu)造五個(gè)64位值的向量來容納該數(shù)字,則低階元素將容納位0-63,接下來的元素將容納位64-127,以此類推,高階元素容納位256-279。如何使得這適合向量處理器?設(shè)想我們具有用于將sp浮點(diǎn)數(shù)si轉(zhuǎn)換為hpa數(shù)vi,va的指令(其中vi是數(shù)據(jù)向量且va是錨定向量):cvt_sp_to_hpavi,va,sivi將包括279位定點(diǎn)結(jié)果。va將包括vi種的五個(gè)64位目的地中每個(gè)目的地的邊界信息,正如在上面的示例中,va=<256,192,128,64,0>。每個(gè)64位線路將得到sp數(shù)si的副本,并且它將使用邊界信息和sp數(shù)的指數(shù)來計(jì)算在vi的適當(dāng)部分中設(shè)置那些位。設(shè)vi=<d4,d3,d2,d1,d0>。如果si具有指數(shù)70,vi的位[70:64](即,d1的位[6:0])將被設(shè)置為si的有效數(shù)字的前7位,并且vi的位[63:47](即,d0的位[63:47])將被設(shè)置為si的有效數(shù)字的后7位。全部剩余位將被設(shè)置為零(為簡單起見,我們現(xiàn)在假設(shè)為正數(shù))。每個(gè)線路從va的相應(yīng)條目接收完成的有效數(shù)字、指數(shù)、和邊界信息。在常規(guī)情形下,va完全由其低階64位的基值來確定,每個(gè)相繼的64位值比先前的64位大64,所以如果每個(gè)線路“已知”其在va內(nèi)的位置,則我們能夠通過使用標(biāo)量基值來得到它。然而,對于一些向量處理電路而言,更直接的是包括基值的向量,以使得每個(gè)線路不必知道它該向量內(nèi)的位置,但是在替代的實(shí)現(xiàn)方式中,我們能夠設(shè)想單一基值就足夠了。由vi表示的二進(jìn)制值是二進(jìn)制補(bǔ)碼數(shù),所以我們將24位有效數(shù)字改變?yōu)槎M(jìn)制補(bǔ)碼數(shù)(我們也能夠在轉(zhuǎn)換后再改變到二進(jìn)制補(bǔ)碼,但是轉(zhuǎn)換279位值比轉(zhuǎn)換24位值慢得多)。我們以常規(guī)的方式來轉(zhuǎn)換到二進(jìn)制補(bǔ)碼:如果該數(shù)是正的,則什么也不做,否則使用該值~有效數(shù)字+1。在此轉(zhuǎn)換后,到279位的轉(zhuǎn)換完全按照先前的段落中那樣進(jìn)行,但是使用可能經(jīng)改變的有效數(shù)字,并且將到該有效數(shù)字左側(cè)的位設(shè)置為符號位而不是零。該方法的美麗之處在于它的靈活性。存在許多程序員想要用來表示fp數(shù)的可能的定點(diǎn)數(shù)。設(shè)想程序員確信全部fp有效數(shù)字位將結(jié)束于范圍70-197內(nèi)?那么,通過適當(dāng)?shù)馗淖僾a中的條目,定點(diǎn)數(shù)能夠被容納于128位目的地中。處理128位定點(diǎn)數(shù)比處理可能大得多的定點(diǎn)數(shù)快得多。精確地使fp數(shù)的乘積相加也將是可取的,并且我們的方法易于擴(kuò)展以允許這樣。提出的指令將是mul_sp_to_hpavi,va,sn,smvi將包括定點(diǎn)結(jié)果,同樣va將包括針對每個(gè)線路的邊界信息。使兩個(gè)sp數(shù)sn和sm相乘而不進(jìn)行舍入,保留有效數(shù)字的全部48位乘積,并且計(jì)算是乘積指數(shù)的9位偏倚的(超出255)表示的新指數(shù)。因?yàn)閮蓚€(gè)sp數(shù)的乘積可以遠(yuǎn)大于或遠(yuǎn)小于sp數(shù),所以提供了額外的指數(shù)位。轉(zhuǎn)換與cvt_sp_to_fixed指令中一模一地進(jìn)行,取乘積的二進(jìn)制補(bǔ)碼,然后使得每個(gè)線路基于va計(jì)算定點(diǎn)數(shù)是否具有任何有效數(shù)字位,并且在剩余位中填充符號位到有效數(shù)字的左側(cè)并且填充零到有效數(shù)字的右側(cè)。除了所提出的兩個(gè)sp指令外,還將有兩個(gè)類似的dp指令,或者針對任意其他浮點(diǎn)格式的指令。它們以相同的方式起作用,但是知道如何解釋dp輸入或乘積(更寬的有效數(shù)字和乘積)。對dp而言,定點(diǎn)向量的大小可能大得多。我們可能想要排除巨大(比可表示的大)或微小(比可表示的小)的數(shù)字。針對主要感興趣的情形的最大大小如下:“第一位”列說明有多少個(gè)可能的位置能夠容納有效數(shù)字的第一位,“小數(shù)位”說明該有效數(shù)字后有多少個(gè)小數(shù)位(對于乘積而言,這些數(shù)字更大)?!伴L度”字段就是第一位+小數(shù)位+1的和,這是容納針對指定輸入的定點(diǎn)形式的全部數(shù)字所要求的最小長度。“64位字”列是容納針對指定輸入的定點(diǎn)形式的全部數(shù)字所要求的64位字的最小數(shù)目。行條目是dp(全部dp數(shù)),dp乘積(全部可能的dp乘積),dp乘積非微小(忽略任意低于dp最小次正規(guī)的位的全部乘積),以及dp乘積非微小+非巨大(忽略任意低于dp次正規(guī)或高于dp最大的位的全部乘積)sp行具有類似的解釋。我們不需要針對全部這些感興趣的情形有單獨(dú)的指令,因?yàn)槲覀兡軌騼H調(diào)整邊界向量va來反映我們感興趣的位我們相信程序員將創(chuàng)建他們自己的邊界。小于2-50的乘積或許是與特定計(jì)算不相關(guān)的。通過簡單地調(diào)整邊界向量va易于管理這些種類的情形。圖21更詳細(xì)地示出了將浮點(diǎn)值轉(zhuǎn)換為具有hpa數(shù)據(jù)格式的值的示例。將認(rèn)識到,可以利用不同于圖21中所示的操作的一系列不同的操作來實(shí)現(xiàn)該轉(zhuǎn)換,并提供相同的結(jié)果。圖21示出了經(jīng)執(zhí)行以基于相應(yīng)的錨定向量va[x]生成hpa值的數(shù)據(jù)向量的單一數(shù)據(jù)元素vi1[x]的步驟,但是可針對向量中的每個(gè)其他數(shù)據(jù)元素執(zhí)行相同的步驟。如圖21中所示,在步驟150,如果浮點(diǎn)值的符號位s是1,則在步驟150該浮點(diǎn)值的有效數(shù)字f(包括1的隱含位)被否定。該否定可以通過使有效數(shù)字的位反相并加1以找到該有效數(shù)字f的二進(jìn)制補(bǔ)碼來執(zhí)行。替代地,如果對經(jīng)轉(zhuǎn)換的hpa值執(zhí)行加法(例如,如上面的圖20中),則在步驟150,有效數(shù)字f可被反相以生成該有效數(shù)字的二進(jìn)制反碼,在該階段不加1,并且隨后當(dāng)執(zhí)行加法時(shí),向加法器的進(jìn)位輸入可被宣稱以完成二進(jìn)制補(bǔ)碼(通過取消一的加法步驟,該途徑可能更快)。無論哪種方式,否定解釋了如下事實(shí):在浮點(diǎn)格式中,值是以符號數(shù)值格式表示的,所以如果符號位是1則有效數(shù)字的全部位被負(fù)加權(quán),然而在hpa格式中,向量表示二進(jìn)制補(bǔ)碼值,其中,即使最高有效位是1,任意較低有效位仍被正加權(quán)。然后從有效數(shù)字f或從否定步驟150生成的經(jīng)修改的有效數(shù)字f形成中間值162。有效數(shù)字f或經(jīng)修改的有效數(shù)字f被置于中間值162的最低有效部分,中間值162的較高部分包括0的特定數(shù)目、lsize,其中l(wèi)size是向量線路大小(一個(gè)數(shù)據(jù)元素內(nèi)的位的數(shù)目)。例如,lsize可以是64、128或256。移位器160然后使中間值162左移移位量lshift所指示的多個(gè)位置,其中l(wèi)shift是如下確定的:·lshift=z=e-b-va[x]+1,如果z>0且z<lsize+fsize,其中:οe是fp值的偏倚的指數(shù),οb是fp值的偏倚量(例如,對于dp為1023,對于sp為127)οvm[x]是根據(jù)錨定值va確定的正在處理的數(shù)據(jù)元素的最低有效位的目標(biāo)有效性;οlsize是數(shù)據(jù)元素中的位的數(shù)目(向量線路大小),以及οfsize是fp值(不包括隱含位)的有效數(shù)字中的位的數(shù)目?!shift=0,如果z≤0或z>lsize+fsize。實(shí)際上,如果fp值的有效數(shù)字f的位都不具有與當(dāng)前正被處理的數(shù)據(jù)的位的有效性相對應(yīng)的有效性則lshift是0。如果lshift是非零的,則使中間值162左移lshift個(gè)位位置使得fp有效數(shù)字的至少一部分被映射到hpa向量的數(shù)據(jù)元素內(nèi)具有相應(yīng)有效性的位。針對數(shù)據(jù)元素vi[x]的lsize位值然后被選擇作為來自移位的結(jié)果的較高lsize位可以以類似的方式針對向量的每個(gè)其他數(shù)據(jù)元素執(zhí)行相同的操作以生成hpa值的總向量vi1,其中每個(gè)數(shù)據(jù)元素表示與浮點(diǎn)值相對應(yīng)的二進(jìn)制值的相應(yīng)部分。針對被應(yīng)用于向量的最高有效性數(shù)據(jù)元素的處理,如果移位器160所施加的移位導(dǎo)致有效數(shù)字f的任意非符號擴(kuò)展位被移出移位結(jié)果的最高有效位,則可以生成例外指示以通過信號指示上溢情況,該情況指示浮點(diǎn)值大于hpa向量使用所指示的元數(shù)據(jù)所能表示的值。類似地,針對被應(yīng)用于該向量的最低有效元素的處理,如果浮點(diǎn)值fp的全部位具有比該元素的最低有效位的有效性小的有效性,則通過信號指示下溢例外。并且,如果浮點(diǎn)有效數(shù)據(jù)的一些位是以經(jīng)轉(zhuǎn)換的hpa向量表示的而其他位不如該向量的最低有效位有效,則通過信號指示不精確例外。這些例外情況可以通過信號指示在元數(shù)據(jù)vm中設(shè)置的有效性邊界對于當(dāng)前正被處理的浮點(diǎn)值是不恰當(dāng)?shù)?。圖21中所示的轉(zhuǎn)換運(yùn)算可以響應(yīng)于用于將浮點(diǎn)值轉(zhuǎn)換為相應(yīng)的hpa值的專門轉(zhuǎn)換指令而被執(zhí)行。替代地,該轉(zhuǎn)換可以響應(yīng)于還執(zhí)行某種算法的算術(shù)指令而被執(zhí)行。例如,加法或減法指令可以使得浮點(diǎn)值在被與另一hpa值進(jìn)行加或減之前被轉(zhuǎn)換為hpa形式,活著乘和轉(zhuǎn)換指令可以觸發(fā)兩個(gè)浮點(diǎn)操作數(shù)的乘法并且浮點(diǎn)形式的這些操作數(shù)的乘積可以然后被使用圖17中所示的運(yùn)算轉(zhuǎn)換為hpa值類似地,hpa數(shù)可被轉(zhuǎn)換為浮點(diǎn)數(shù)。針對sp的基本指令是:cvt_hpa_to_spsd,vd,va其中sd是目的地sp數(shù),vd是包括高精度定點(diǎn)數(shù)據(jù)的數(shù)據(jù)向量,并且va是包括針對vd的每個(gè)64位線路的邊界信息的錨定向量。vd是二進(jìn)制補(bǔ)碼數(shù),并且vd的每位具有基于va中的邊界信息的權(quán)重,所以如果va的低階64位字包括100,則vd中的低階字的低階位具有權(quán)重100,且下一位具有權(quán)重101等。在常規(guī)情形下,va完全由它的低階64位周曉鷗能夠的基值來確定,每后續(xù)64位相差64。所以在此情形下va=<…,296,228,164,100>我們提供向量va來容納全部這些值的原因是每個(gè)64位線路將解釋向量vd的它的部分二沒有任何全局知識。如果線路“已知”它們自己在較大向量內(nèi)的位置,則基值(在此情形下為100)將給出足夠的信息來完成轉(zhuǎn)換。該基值嚴(yán)格對應(yīng)于浮點(diǎn)數(shù)的指數(shù)。如果我們構(gòu)造從vd的低階字的第62位處開始的有效數(shù)字且va如上,則與該有效數(shù)字相對應(yīng)的指數(shù)完全由有效數(shù)字位置(62)和基值(100)來確定。對于sp數(shù),指數(shù)將是100+62-23=139。-23來自sp值中的小數(shù)位的數(shù)目。在我們想要表示全部sp數(shù)的情形下,高精度定點(diǎn)數(shù)將是278位長,并且其低階位將與次正規(guī)數(shù)的低階位相對應(yīng)。第一個(gè)可能的正規(guī)有效數(shù)字具有指數(shù)1且將位于vd的位[23:0]處。從在將vd轉(zhuǎn)換到sp的兩種基本的方式:從左到右或從右到左。從左到右轉(zhuǎn)換是更直接的方式。vd的頂部的第一位是符號位,且成為sp結(jié)果sd的符號。我們?nèi)缓笏阉鞯谝唤o非符號位(如果符號是一則為零,如果符號是零則為一)。該位成為有效數(shù)字的第一位,并且我們?nèi)缓笕〗酉聛淼?3位作為小數(shù)部分,第24位作為防護(hù)位,且取全部剩余位的邏輯或作為粘滯位。基于從中找到第一個(gè)非符號位的線路的權(quán)重(w)、第一個(gè)非符號位的位置(l)、以及sp數(shù)中的小數(shù)位的數(shù)目(23)來計(jì)算指數(shù),給出了指數(shù)w+l-23。如果指數(shù)計(jì)算返回小于零的值,則返回的指數(shù)是零。如果輸入是負(fù)的且第一個(gè)零是24或更多個(gè)零的字符串的一部分,則指數(shù)增大1。對于正輸入不對小數(shù)做出改變,否則使用該小數(shù)的二進(jìn)制補(bǔ)碼?;谏崛肽J?、小數(shù)的最低有效位、防護(hù)位以及最后的粘滯位來以常規(guī)方式對生成的數(shù)進(jìn)行舍入。對于雙精度,操作是相同的但是使用更大的有效數(shù)字和指數(shù)。圖22示出了使用從左到右轉(zhuǎn)換來將具有數(shù)據(jù)向量vi和元數(shù)據(jù)vm的hpa值轉(zhuǎn)換為浮點(diǎn)值fp的示例。同樣,這可以響應(yīng)于單獨(dú)的轉(zhuǎn)換指令或者包括轉(zhuǎn)換以及某種算法的算術(shù)指令而被執(zhí)行。數(shù)據(jù)向量vi的最高有效位被直接映射到浮點(diǎn)值fp的符號位s。為生成浮點(diǎn)值的有效數(shù)字f,如下執(zhí)行一系列操作。如果向量的最高有效位是1(即,hpa值是負(fù)的),則在步驟170向量vi被否定(反相且加1)以產(chǎn)生經(jīng)修改的向量vi’。對于正值,不對向量vi進(jìn)行改變。因此,向量vi’至少具有一個(gè)前導(dǎo)零,所以表示正值。以該向量的最該有效元素開始,逐元素地依次執(zhí)行有效數(shù)字生成運(yùn)算。最高有效元素的處理線路搜索該元素內(nèi)的第一個(gè)非符號位(即,第一個(gè)為1的位值)。在此示例中,vi[3]的較高的元素不包括任意非符號位,所以處理移動(dòng)到下一線路vi[2]。對元素vi[2]的處理標(biāo)識了為1的非符號位,并且確定表示在該非符號位1前面的零的數(shù)目的前導(dǎo)零計(jì)數(shù)lzc。然后從相應(yīng)的數(shù)據(jù)元素vi[2]的k位形成部分有效數(shù)字,其中k=min(lsize-lzc,fsize),其中l(wèi)size是一個(gè)數(shù)據(jù)元素中的位的數(shù)目,fsize是將被生成的fp值(包括隱含位)的有效數(shù)字中的位的數(shù)目,并且lzc是前導(dǎo)零計(jì)數(shù)。k位部分有效數(shù)字與針對該有效數(shù)字仍要獲得的剩余位的數(shù)目的指示(fsize-k)、防護(hù)位g和粘滯位s一起被輸出。如果lsize-lzc>fsize,則防護(hù)位g等于元素vi[2]的到為部分有效數(shù)字取的位的右側(cè)的一個(gè)位置處的位,如果lsize-lzc<=fsize,則g=0。類似地,如果lsize-lzc>fsize+1,則粘滯位s等于元素vi[2]的到防護(hù)位g的右側(cè)的任意位的按位或,否則粘滯位s=0。處理然后移動(dòng)到幀對元素vi[1]的下一線路,其中另一部分有效數(shù)字值被生成。元素vi[1]的上部被選為部分有效數(shù)字,所取的位的數(shù)目對應(yīng)于從先前的線路中輸出的值fsize-k。該線路還更新防護(hù)位g和粘滯位s的值,使得防護(hù)位g等于元素vi[1]的到為部分有效數(shù)字取的最低位的右側(cè)的一個(gè)位置處的位并且粘滯位s對應(yīng)于不如防護(hù)位g有效的任意為的按位或。針對最低有效元素vi[0]的處理線路從較高的線路接收粘滯位s,并且通過使元素vi[0]的全部位于來自先前線路的粘滯位s進(jìn)行或運(yùn)算來更新粘滯位s。針對線路1和1生成的部分有效數(shù)字然后被級聯(lián)以形成有效數(shù)字值f?;诜雷o(hù)位g和粘滯位s的值、使用任意期望的舍入模式來對該有效數(shù)字進(jìn)行舍入。針對浮點(diǎn)值fp存儲(chǔ)的有效數(shù)字然后被從經(jīng)舍入的有效數(shù)字值獲取,忽略經(jīng)舍入的有效數(shù)字的最高有效位,在浮點(diǎn)表示中該最高有效位是隱含的。同時(shí),針對該浮點(diǎn)值的偏倚的指數(shù)e被確定為:e=va[j]+lsize-lzc+b,其中va[j]是在其中找到最高有效非符號位的數(shù)據(jù)元素vi[j]的最低有效位的有效性(例如,在圖22中所示的示例中元素vi[2]的錨點(diǎn)值所指示的有效性),lsize是一個(gè)數(shù)據(jù)元素中的位的數(shù)目,lzc是前導(dǎo)零計(jì)數(shù),以及b是所使用的浮點(diǎn)表示的偏倚值。如果fsize<lsize,則最多只有兩個(gè)相鄰數(shù)據(jù)元素可以包括對未經(jīng)舍入的有效數(shù)字f有影響的位值,如在圖22的示例中,且其他線路將或者是僅包括符號位的更高有效性的線路或者是僅對粘滯位s有影響的更低有效性的線路。還有可能是,取決于線路內(nèi)的非符號位的位置,可以完全由一個(gè)線路被的位值來形成未經(jīng)舍入的有效數(shù)字。圖22示出了按照從左到右的順序依次處理hpa值的每個(gè)數(shù)據(jù)元素的示例。然而,隨著向量大小變得越來越大,這可能是相對較慢的。這可能不會(huì)一直都是問題。例如,利用圖20中所示的累加運(yùn)算,從fp轉(zhuǎn)換到hpa可以比從hpa轉(zhuǎn)換回fp更頻繁地發(fā)生(fp-hpa轉(zhuǎn)換針對每個(gè)加法發(fā)生,則hpa-fp轉(zhuǎn)換僅在最后生成結(jié)果時(shí)發(fā)生一次)。然而,如果想要加速處理,則針對若干線路并行地執(zhí)行運(yùn)算是可能的。例如,可以使用圖19中所示的形式的處理電路。在此情形下,每個(gè)線路可以檢測最高非符號位并生成部分有效數(shù)字(假設(shè)該部分有效數(shù)字包括整個(gè)向量內(nèi)的最高非符號位),然后處理電路可以稍后通過從實(shí)際上包括第一非符號位的線路獲取fsize位來組合部分有效數(shù)字,并且如果需要的話則從下面的下一線路獲取fsize-k位。從右向左轉(zhuǎn)換也是可能的,其中首先處理最低有效元素。假設(shè)vd=<d4,d3,d2,d1,d0>(這足以容納任意sp數(shù)),并且設(shè)va=<256,192,128,64,0>?;叵氲?,va向量可以指定vd源的另一范圍??梢允褂脙煞N方法來進(jìn)行從右到左轉(zhuǎn)換。1.支持d0的線路使用與從左到右轉(zhuǎn)換中相同的算法、但是不進(jìn)行任何舍入或基于符號的操縱來就像只有那64位是可用地那樣計(jì)算sp數(shù)。返回的值是35位向量<符號,指數(shù)[7:0],有效數(shù)字[23:0],防護(hù),粘滯>。支持d1的線路做相同的事情,但還要注意由d0線路生成的數(shù)據(jù)。如果d1線路全是符號位,則d0結(jié)果被向上傳遞。否則,基于第一非符號位的新位置來計(jì)算新sp數(shù)。該新數(shù)的一些小數(shù)位可能來自d0,但是我們具有關(guān)于來自由該線路返回的35位向量的那些位的信息。我們還計(jì)算新指數(shù)、符號、防護(hù)和粘滯位。針對d2,然后針對d3重復(fù)該處理,最后通過舍入由d4線路返回的向量來結(jié)束該處理。dp轉(zhuǎn)換以相同的方式起作用,但是具有更大的指數(shù)和有效數(shù)字。2.在第二中方法中,每個(gè)dx框與其他框獨(dú)立地計(jì)算35位向量。在以硬件實(shí)現(xiàn)的具有4個(gè)dx框的系統(tǒng)中,每35位向量被輸出到第二框,第二框計(jì)算針對4個(gè)dx框的集合的單一35位向量。該值被保存,并被以類似的方式與來自下一組數(shù)據(jù)位的輸出的35位向量組合。在上面的示例中,使用256位shoji引擎,64位塊d3到d0將在第一次迭代中被處理,每個(gè)dx框產(chǎn)生35位向量,并且針對d3到d0的集合生成最終向量。第二程將針對d4框中的位生成另一35位向量,并且第二框?qū)⒔M合該向量與來自較低的d3-d0框的向量以生成最終向量。將根據(jù)指定或默認(rèn)的舍入模式來舍入該最終向量以生成最終的單精度結(jié)果。正如方法1中,dp轉(zhuǎn)換將類似地起作用,但是由于大的指數(shù)和有效數(shù)字而要求不同的實(shí)現(xiàn)方式。如果邊界向量包括限制我們可能的范圍的值,則我們并不需要全部278個(gè)可能的位就可以生成sp數(shù),類似地,如果邊界向量限制了該范圍,則我們并不需要全部2099個(gè)可能的位來生成dp數(shù)。還應(yīng)注意,一些數(shù)字可能超出sp或dp數(shù)的范圍。這種情況尤其可能在轉(zhuǎn)換乘積的和的時(shí)候發(fā)生,但也可能在使許多大數(shù)相加時(shí)發(fā)生。比dp或sp最大量大的數(shù)字應(yīng)當(dāng)遵循常規(guī)的舍入慣例(通常返回?zé)o窮大),并且比dp或sp最小次正規(guī)數(shù)小的數(shù)字應(yīng)當(dāng)在舍入之前調(diào)整粘滯位。為支持這一點(diǎn),將需要捕獲上溢的方式,在一個(gè)實(shí)施例中,標(biāo)識上溢情況的單一位將是足夠的。沒有東西妨礙將高精度定點(diǎn)被轉(zhuǎn)換為與其輸入不同的格式。例如,可以使用與上述相同的方法來實(shí)現(xiàn)半精度和四分之一精度(128位格式),對任意可能的整數(shù)或定點(diǎn)格式或十進(jìn)制浮點(diǎn)格式也是如此。一種裝置可以具有用于執(zhí)行算術(shù)運(yùn)算的處理電路。該處理電路可以響應(yīng)于指示結(jié)果值的目標(biāo)有效性的可編程有效性數(shù)據(jù)而生成具有目標(biāo)有效性的結(jié)果值。這利用了如下認(rèn)知:在實(shí)踐中,程序員知道預(yù)期什么范圍的有效性適合給定應(yīng)用的典型數(shù)據(jù)值,例如,取決于傳感器的位置或傳感器的精度,由溫度傳感器在地球上測得的數(shù)據(jù)可能被限制為相對較窄的值的范圍。因此,程序員能夠設(shè)置可編程有效性數(shù)據(jù)以指定結(jié)果的預(yù)期有效性。處理電路然后不必計(jì)算那些邊界外部的結(jié)果的部分,以節(jié)能并提供更快的處理。例如,可編程有效性數(shù)據(jù)可以使得處理電路與用于生成結(jié)果值的至少一個(gè)操作數(shù)的有效性無關(guān)地生成具有目標(biāo)有效性的結(jié)果值。因此,即使操作數(shù)具有使得給定算術(shù)運(yùn)算的結(jié)果應(yīng)當(dāng)落在可編程有效性數(shù)據(jù)所指示的有效性外的值,仍可以以所指示的有效性來生成結(jié)果,即使這可能是錯(cuò)誤的。在一些情形下,結(jié)果值可以是正數(shù)或定點(diǎn)數(shù)據(jù)值,或者以上面所討論的hpa格式表示的值。在一些實(shí)施例中,可編程有效性數(shù)據(jù)可以包括指示結(jié)果值的至少一個(gè)有效性邊界的邊界信息。處理電路可以響應(yīng)于該邊界信息來確定據(jù)結(jié)果值的位值具有在至少一個(gè)有效性邊界內(nèi)的有效性。處理電路例如可以將處理限制于確定結(jié)果值的在所指示的邊界內(nèi)的部分。在一些示例中,邊界信息可以指示分貝指示結(jié)果值的最低有效性和最高有效性的低有效性邊界和高有效性邊界中的至少一者。在一些情形下,可以由邊界信息來明確地指示低邊界和高邊界。替代地,可以指示其中一者,另一者可以由正在處理的值的大小(長度)來暗示。大小可以是固定的,或者可以是在邊界信息中指定的可變大小。在一些示例中,由可編程數(shù)據(jù)指示的目標(biāo)大小可以與硬件中所支持的值的大小無關(guān)。例如,硬件可以僅能夠并行地生成結(jié)果值的n位的最大值。如果可編程大小信息指示多余n位的大小,則可以通過多次經(jīng)過硬件來執(zhí)行算術(shù)運(yùn)算。如果該大小小于n位,則可以不使用全部硬件。例如,可以在處理線路中提供用于執(zhí)行并行處理線路的處理單元,并且可編程有效性數(shù)據(jù)可以指定應(yīng)當(dāng)數(shù)據(jù)多少個(gè)線路??删幊逃行詳?shù)據(jù)可以指示其中一個(gè)線路的有效性,其他線路的有效性根據(jù)該指示來確定。替代地,可以針對每個(gè)線路單獨(dú)地表示有效性,這可以用于允許每個(gè)線路處理概線路的數(shù)據(jù)元素,而不需要關(guān)于該線路在整個(gè)向量內(nèi)的位置的任意“全局知識”。在另一示例中,一種裝置可以具有至少一個(gè)數(shù)據(jù)存儲(chǔ)元件和用于存儲(chǔ)該至少一個(gè)數(shù)據(jù)存儲(chǔ)元件的元數(shù)據(jù)的元數(shù)據(jù)存儲(chǔ)元件。元數(shù)據(jù)(例如,上面所討論的錨點(diǎn)值)可以指示將被存儲(chǔ)在相應(yīng)的數(shù)據(jù)存儲(chǔ)元件中的數(shù)據(jù)值的目標(biāo)有效性和目標(biāo)長度。因此,元數(shù)據(jù)可以與該存儲(chǔ)元件而不是該數(shù)據(jù)存儲(chǔ)元件中所存儲(chǔ)的特定數(shù)據(jù)值相關(guān)聯(lián)。當(dāng)生成將被放置在數(shù)據(jù)存儲(chǔ)元件中的數(shù)據(jù)值時(shí),處理電路可以參考元數(shù)據(jù)存儲(chǔ)元件中的相應(yīng)的元數(shù)據(jù)來確定將要生成的數(shù)據(jù)值的有效性和大小。這允許處理電路限制其處理以生成在由元數(shù)據(jù)所指定的目標(biāo)有效性和大小定義的窗口內(nèi)的位值。同樣,元數(shù)據(jù)可以是可編程的。在一些情形下,元數(shù)據(jù)存儲(chǔ)元件可以是與數(shù)據(jù)存儲(chǔ)元件分離的存儲(chǔ)元件。在其他示例中,元數(shù)據(jù)存儲(chǔ)元件可以包括相應(yīng)的數(shù)據(jù)存儲(chǔ)元件的一部分。在一些情形下,一個(gè)元數(shù)據(jù)存儲(chǔ)元件可以是在多個(gè)數(shù)據(jù)存儲(chǔ)元件之間共享,以使得它們各自共享相同的元數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)元件可以包括指示應(yīng)當(dāng)與之相關(guān)聯(lián)的的元數(shù)據(jù)存儲(chǔ)元件的可編程值。元數(shù)據(jù)所指示的目標(biāo)大小可以與數(shù)據(jù)存儲(chǔ)元件本身的物理大小無關(guān)。因此,元數(shù)據(jù)可以指定大于數(shù)據(jù)存儲(chǔ)元件的存儲(chǔ)元件大小的目標(biāo)大小。如果目標(biāo)大小大于數(shù)據(jù)存儲(chǔ)元件大小,則可以跨多個(gè)數(shù)據(jù)存儲(chǔ)元件來存儲(chǔ)數(shù)據(jù)值。元數(shù)據(jù)可以包括指定表示同一數(shù)據(jù)值的各部分的數(shù)據(jù)存儲(chǔ)元件的數(shù)目的信息。元數(shù)據(jù)還可以表達(dá)其他信息,比如,指示在相應(yīng)的數(shù)據(jù)存儲(chǔ)元件中的數(shù)據(jù)值的生成過程中是否已經(jīng)發(fā)生例外情況的例外信息、指示數(shù)據(jù)值是正值還是負(fù)值的符號信息、或指示數(shù)據(jù)值的特性(比如,它是零、無窮大或不是數(shù)字)的特性信息。例如,如果用于生成將被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)元件中的數(shù)據(jù)值的算術(shù)運(yùn)算的結(jié)果大于使用具有元數(shù)據(jù)中所指示的目標(biāo)有效性和長度所能表示的值,例外信息可以指示上溢情況。在其他示例中,一種裝置可以被提供處理電路以執(zhí)行將浮點(diǎn)值轉(zhuǎn)換為包括多個(gè)數(shù)據(jù)元素的向量的轉(zhuǎn)換運(yùn)算,多個(gè)數(shù)據(jù)元素表示與浮點(diǎn)值相對應(yīng)的二進(jìn)制值的各個(gè)位有效性部分。這可用于支持使用向量格式的算法,與使用浮點(diǎn)值本身的浮點(diǎn)算法相比這種算法更易于并行化。以向量形式來表示二進(jìn)制值是有用的,因?yàn)檫@提供了允許處理硬件根據(jù)向量的數(shù)據(jù)元素的數(shù)據(jù)來擴(kuò)展它執(zhí)行的處理的量的框架。例如,向量可以具有上面所討論的hpa格式。向量可以具有比浮點(diǎn)值的有效數(shù)字?jǐn)?shù)量多的位,以提供更大的精度。轉(zhuǎn)換運(yùn)算可以是響應(yīng)于可編程控制信息的,從而處理電路基于浮點(diǎn)值和控制信息來選擇向量的每個(gè)數(shù)據(jù)元素的值??刂菩畔⒖梢员恢付楸贿\(yùn)行以執(zhí)行轉(zhuǎn)換運(yùn)算的指令中的參數(shù),例如,標(biāo)識存儲(chǔ)信息的寄存器的寄存器說明符或中間值,或者可以在諸如控制寄存器之類的專門位置中提供該控制信息。在一個(gè)示例中,控制信息可以指示將由在轉(zhuǎn)換運(yùn)算中生成的向量的數(shù)據(jù)元素表示的至少一個(gè)位有效性部分的有效性。因此,向量可以表示可編程地選擇的有效性的二進(jìn)制值。在一些情形下,控制信息可以指示向量的預(yù)定數(shù)據(jù)元素的有效性,從該預(yù)定數(shù)據(jù)元素的有效性來導(dǎo)出其他元素的有效性(例如,以已知數(shù)據(jù)元素大小的間隔往上數(shù))。然而,其他示例可以提供每個(gè)元素的有效性的單獨(dú)指示。這可用于簡化向量處理,以使得每個(gè)向量線路不必考慮其數(shù)據(jù)元素相對于其他元素的位置??刂菩畔⑦€可義指示向量的可變數(shù)目的數(shù)據(jù)元素。這可以利用指定數(shù)據(jù)元素的數(shù)據(jù)的明確大小指示,或者通過使用針對每個(gè)線路的有效性指示來實(shí)現(xiàn)。例如,針對特定數(shù)據(jù)元素的有效性指示的預(yù)定位組合格式可以通過信號指示該數(shù)據(jù)元素不被用于當(dāng)前計(jì)算。控制信息可以與正被轉(zhuǎn)換的浮點(diǎn)值無關(guān)。因此,無論浮點(diǎn)值的有效性或值如何,都可以以控制自信息中所指示的有效性和/或大小來生成向量,即使浮點(diǎn)值將具有無法由該有效性和大小來精確表示的值。一些實(shí)現(xiàn)方式可以使用一次生成向量的單一元素的處理電路。然而,為提升性能,該處理電路可以具有至少并行地生成向量的兩個(gè)數(shù)據(jù)元素的處理單元??梢砸圆煌姆绞絹韴?zhí)行轉(zhuǎn)換。在一個(gè)示例中,針對每個(gè)數(shù)據(jù)元素,處理電路可以基于浮點(diǎn)值的指數(shù)和將由該數(shù)據(jù)元素表示的二進(jìn)制的一部分的有效性來確定是否用基于該浮點(diǎn)值選擇的位值來填充該數(shù)據(jù)元素。例如,一些數(shù)據(jù)元素可以具有并不與浮點(diǎn)有效數(shù)字的任意位的有效性相對應(yīng)的有效性,在這種情形下,這些元素將被填充從浮點(diǎn)有效數(shù)字選擇的任意位值。在一個(gè)示例中,針對每個(gè)數(shù)據(jù)元素,處理電路可以根據(jù)浮點(diǎn)值的有效數(shù)字來形成初始值,然后使該初始值移位一位移量,該位移量取決于浮點(diǎn)值的指數(shù)和控制信息針對該數(shù)據(jù)元素所指示的有效性。這提供了相對簡單的技術(shù),其中每個(gè)處理線路可以獨(dú)立于任意其他線路地生成其數(shù)據(jù)元素,這可用于支持向量處理的順序或并行實(shí)現(xiàn)方式。該結(jié)果向量然后可從移位器針對每個(gè)線路生成的值組合而來。當(dāng)與浮點(diǎn)值相對應(yīng)的二進(jìn)制值不能由具有元數(shù)據(jù)中所指示的有效性或大小的向量來表示時(shí),移位運(yùn)算還可用來生成指示上溢、下溢或不精確情況的例外信息。這樣的例外信息可以允許系統(tǒng)確定何時(shí)程序員所設(shè)置的有效性不適用于處理正被轉(zhuǎn)換的浮點(diǎn)值的當(dāng)前值。一般說來,每個(gè)數(shù)據(jù)元素可以包括二進(jìn)制補(bǔ)碼值(與該浮點(diǎn)值的讀好數(shù)值形式的有效數(shù)字不同)。因此,如果浮點(diǎn)值是負(fù)的,則可以在轉(zhuǎn)換運(yùn)算期間執(zhí)行否定運(yùn)算,從而以已經(jīng)相對于浮點(diǎn)值的有效數(shù)字進(jìn)行否定的值來生成該向量的至少一個(gè)數(shù)據(jù)元素。這確保了向量表示與浮點(diǎn)值具有相同符號的值。一般說來,處理電路可以響應(yīng)于第一指令而執(zhí)行轉(zhuǎn)換運(yùn)算,第一指令可以是僅用于執(zhí)行轉(zhuǎn)換的單獨(dú)的轉(zhuǎn)換指令或者將轉(zhuǎn)換與算術(shù)運(yùn)算進(jìn)行結(jié)合的算術(shù)指令。例如,響應(yīng)于算術(shù)指令,處理電路可以執(zhí)行算術(shù)運(yùn)算(例如,乘法)以生成結(jié)果浮點(diǎn)值,該結(jié)果浮點(diǎn)值然后可在轉(zhuǎn)換運(yùn)算過程中被轉(zhuǎn)換為向量。在其他示例中,可以首先執(zhí)行轉(zhuǎn)換,然后算術(shù)運(yùn)算(例如,加法或減法)可被應(yīng)用于經(jīng)轉(zhuǎn)換的向量和其他向量。并且,可以執(zhí)行轉(zhuǎn)換運(yùn)算以將上面討論的形式的向量轉(zhuǎn)換為表示由該向量的各個(gè)位有效性部分表示的二進(jìn)制值的替代表示的標(biāo)量值。例如,該標(biāo)量值可以是二進(jìn)制或十進(jìn)制浮點(diǎn)值、整數(shù)值或定點(diǎn)值。這允許上面討論的向量形式根據(jù)需要被映射回可外在地表示的格式。例如,出于與其他設(shè)備的兼容性,將用于內(nèi)部處理的向量格式映射到定點(diǎn)、整數(shù)或浮點(diǎn)格式可能是有用的。同樣,向量到標(biāo)量轉(zhuǎn)換運(yùn)算可以響應(yīng)于可編程控制信息來根據(jù)向量生成標(biāo)量值??刂菩畔⒖梢酝ㄟ^中間值或寄存器說明符在指令中被指定,或者被置于固定寄存器中??刂菩畔⒖梢詫⑾蛄康臄?shù)據(jù)元素所表示的位有效性部分的有效性指示為單一值或分別針對每個(gè)元素指定的多個(gè)值??刂菩畔⑦€可以指定如何呈現(xiàn)向量的數(shù)據(jù)元素。這允許程序員定義控制信息意識的向量可以表示具有可變大小和有效性的二進(jìn)制值。向量可以被逐元素地順序處理,或者利用至少并行地處理兩個(gè)數(shù)據(jù)元素的處理單元來并行地處理。如果標(biāo)量是正數(shù)或定點(diǎn)值,則針對向量的至少一些數(shù)據(jù)元素,處理電路可以基于控制信息所指示的有效性來選擇具有與標(biāo)量值的位位置相對應(yīng)的有效性的數(shù)據(jù)元素的一個(gè)或多個(gè)位,然后基于所選擇的位來形成標(biāo)量值。為將向量轉(zhuǎn)換為浮點(diǎn)值,處理電路可以基于向量的最高有效非符號位的位置和控制信息針對該向量的具有最高有效非符號位的數(shù)據(jù)元素所指示的有效性來確定指數(shù)??梢酝ㄟ^執(zhí)行有效數(shù)字生成運(yùn)算以生成針對向量的至少一個(gè)元素的部分有效數(shù)字值來生成浮點(diǎn)值的有效數(shù)字,其中該浮點(diǎn)值的有效數(shù)字是基于針對每個(gè)元素生成的部分有效數(shù)字值來形成的。例如,針對給定數(shù)據(jù)元素的有效數(shù)字生成運(yùn)算可以包括檢測元素是否具有至少一個(gè)非符號位,并且如果有,則輸出該數(shù)據(jù)元素的最高有效非符號位以及根據(jù)該最高有效非符號位選擇的該數(shù)據(jù)元素的多個(gè)較低有效位作為部分有效數(shù)字值。在一些實(shí)現(xiàn)方式中,可以針對至少一些數(shù)據(jù)元素并行地執(zhí)行有效數(shù)字生成運(yùn)算以加速處理。然后針對每個(gè)元素的結(jié)果稍后可被組合以確定總有效數(shù)字。例如,每個(gè)處理線路可以在其向量的元素包括整個(gè)向量的最高有效非符號位的假設(shè)下執(zhí)行效數(shù)字生成運(yùn)算。一旦知道每個(gè)線路的結(jié)果,該處理電路就可以基于哪個(gè)線路實(shí)際上包括最高有效非符號位來形成浮點(diǎn)值的有效數(shù)字。替代地,可以針對至少一些元件順序地執(zhí)行有效數(shù)字生成運(yùn)算。這可以簡化處理,因?yàn)獒槍χ辽僖恍┚€路,如果已經(jīng)知道將完全由針對其他線路生成的部分有效數(shù)字來形成有效數(shù)字,則它們可能不必生成部分有效數(shù)字。針對后面的元素的有效數(shù)字生成運(yùn)算可以取決于在針對較早的元素的有效數(shù)字生成運(yùn)算中生成的信息以減少所需的處理的量。在一個(gè)示例中,可以從向量的最高有效元素開始并以最低有效元素結(jié)束來從左到右順序地執(zhí)行有效數(shù)字生成運(yùn)算。在此情形下,具有非符號位的最高有效元素被定為,然后如果針對該元素生成的部分有效值具有比該浮點(diǎn)值的有效數(shù)字所需要的位的總數(shù)少的位,則指示將要生成的剩余位的數(shù)目的控制值可被輸出,并且這可在針對下一元素的有效數(shù)字生成運(yùn)算中被用來選擇所需的剩余數(shù)目的位。這避免了針對每個(gè)元素執(zhí)行整個(gè)有效數(shù)字生成運(yùn)算的需求。用于該向量的較低有效元素的處理線路可以僅更新諸如用于舍入的防護(hù)/粘滯位之類狀態(tài)信息,而不需要生成部分有效數(shù)字。在其他示例中,可以從向量的最低有效部分開始并以向量的較高有效部分結(jié)束來從右到左順序地應(yīng)用有效數(shù)字生成運(yùn)算。當(dāng)標(biāo)量值包括浮點(diǎn)值且向量表示負(fù)的二進(jìn)制值時(shí),可以在轉(zhuǎn)換運(yùn)算過程中執(zhí)行否定運(yùn)算,以使得浮點(diǎn)值的有效數(shù)字具有已經(jīng)相對于該向量的至少一部分進(jìn)行否定的二進(jìn)制值。這保留了以向量格式表示的該數(shù)字的符號。正如浮點(diǎn)到向量轉(zhuǎn)換那樣,向量到標(biāo)量轉(zhuǎn)換可以響應(yīng)于專門的轉(zhuǎn)換指令或者將轉(zhuǎn)換與算術(shù)運(yùn)算進(jìn)行結(jié)合的算術(shù)指令而被執(zhí)行。一般說來,可以在具有本說明書所討論的高精度錨點(diǎn)(hpa)格式的值和提供hpa數(shù)據(jù)值所表示的二進(jìn)制值的替代表示的另一數(shù)據(jù)值之間按任意方向執(zhí)行轉(zhuǎn)換。在這里描述的至少一些示例實(shí)施例中,布置在算術(shù)電路上游的配準(zhǔn)電路用于根據(jù)可編程有效性參數(shù)配準(zhǔn)一個(gè)或多個(gè)輸入操作數(shù),例如,以配準(zhǔn)輸入操作數(shù)來使得它們自己的具有相等有效性的位位置被提供給算術(shù)電路的相應(yīng)的位輸入,該算術(shù)電路然后可以例如憑借整數(shù)算法運(yùn)算來處理輸入操作數(shù)??删幊逃行詤?shù)可以與配準(zhǔn)的結(jié)果值無關(guān),例如,該結(jié)果值不是正規(guī)化的。反而,可編程有效性參數(shù)可以以其他方式來設(shè)置,比如,根據(jù)結(jié)果值的有效性或者根據(jù)輸入操作數(shù)的有效性。算術(shù)電路可以采用各種不同的形式。算術(shù)電路的一些示例形式包括整數(shù)加法器和/或整數(shù)乘法器。其他形式的算術(shù)電路也是可能的。將認(rèn)識到,輸入操作數(shù)可以具有各種不同的形式。在一些示例實(shí)施例中,輸入操作數(shù)中的一個(gè)或多個(gè)可以是浮點(diǎn)輸入操作數(shù)。在此情形下,浮點(diǎn)輸入操作數(shù)的指數(shù)值也可以被提供給配準(zhǔn)電路,以根據(jù)可編程有效性參數(shù)和該指數(shù)值來控制浮點(diǎn)輸入操作數(shù)的有效數(shù)字值的配準(zhǔn)。在其他實(shí)施例中,可能與一個(gè)或多個(gè)浮點(diǎn)輸入操作數(shù)相結(jié)合地,錨定操作數(shù)也可以作為到配準(zhǔn)電路的輸入。這樣的錨定操作數(shù)具有它自己的可編程輸入操作數(shù)有效性,并且配準(zhǔn)電路可以響應(yīng)于該可編程輸入操作數(shù)有效性以及先前提到的可編程有效性參數(shù)??梢砸愿鞣N不同的方式來指定可編程輸入操作數(shù)有效性。在一些示例實(shí)施例中,可編程輸入操作數(shù)有效性用于指定介于低有效性邊界和高有效性邊界之間的范圍。這可以通過以下方式來實(shí)現(xiàn),例如,通過直接指定邊界值,通過指定一個(gè)邊界值和寬度,通過指定一個(gè)邊界值和該向量的各自具有已知寬度的多個(gè)組分等。在一些實(shí)施例中,可以與輸入操作數(shù)的形式或相對有效性無關(guān)地來為輸出存儲(chǔ)元件設(shè)置可編程有效性參數(shù)。例如,向其中寫入結(jié)果值的結(jié)果寄存器可以具有相關(guān)聯(lián)的可編程有效性參數(shù),輸入操作數(shù)在算術(shù)電路的動(dòng)作之前由配準(zhǔn)電路進(jìn)行配準(zhǔn)以具有與結(jié)果寄存器的有效性相對應(yīng)且與將要計(jì)算的結(jié)果值無關(guān)的有效性。在其他示例實(shí)施例中,可以替代地為輸出存儲(chǔ)元件設(shè)置可編程有效性參數(shù),以匹配一個(gè)或多個(gè)輸入操作數(shù)中的任意輸入操作數(shù)的最高有效性。雖然這里已經(jīng)參考附圖描述了本發(fā)明的說明性實(shí)施例,但是應(yīng)理解本發(fā)明不限于那些精確的實(shí)施例,并且可以由本領(lǐng)域技術(shù)人員在不背離由所附權(quán)利要求限定的本發(fā)明的范圍和精神的情況下引起各種變化、添加和修改。例如,可以由獨(dú)立權(quán)利要求的特征來作出從屬權(quán)利要求的特征的各種組合而不背離本發(fā)明的范圍。當(dāng)前第1頁12