專(zhuān)利名稱(chēng):處理系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體地,涉及單處理器系統(tǒng)中獲取向量的 歐幾里得范數(shù)的方法和裝置以及多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的方法和裝置。
背景技術(shù):
BLAS (Basic Linear Algebra Subprograms,基本線(xiàn)性4、數(shù)子程序) 是執(zhí)行向量和矩陣運(yùn)算的子程序的集合,這些子程序是最基本的矩陣向量 計(jì)算的核心子程序,在用于求解各種線(xiàn)性代數(shù)問(wèn)題的高性能科學(xué)計(jì)算中有 著重要作用。關(guān)于BLAS的詳細(xì)內(nèi)容,可參見(jiàn)http:〃www.netlib.org/blas/。
作為專(zhuān)業(yè)的線(xiàn)性代數(shù)庫(kù),BLAS提供了各種線(xiàn)性代數(shù)的子程序,其中 包括獲取向量的歐幾里得范數(shù)的例程。
向量的歐幾里得范數(shù)的獲取的含義是對(duì)于給定的向量1 = (^^...,;07 , 根據(jù)下面的公式得到其歐幾里得范數(shù)^||2:
、'-=1
也就是說(shuō),向量J"x"x2,…,0"的歐幾里得范數(shù)是該向量的內(nèi)積(x, x)
的平方根,即該向量中所有元素x[i(i=l,2,......,n)的平方和的平方根。
向量的歐幾里得范數(shù)的獲取廣泛存在于多種領(lǐng)域中,例如其在3-D向 量計(jì)算中發(fā)揮著重要的作用。
圖1示出了 BLAS中現(xiàn)有的獲取向量的歐幾里得范數(shù)的例程所采用的 實(shí)現(xiàn)方案的流程圖。如圖1所示,在該現(xiàn)有的實(shí)現(xiàn)方案中,首先在步驟105,設(shè)置平方和 ssq的初始值為1,并且縮i支因子scale的初始值為0。
接著,對(duì)于要獲取歐幾里得范數(shù)的給定向量X"x,,x2,…,;cJ,對(duì)于其中 的各個(gè)元素,按照順序依次執(zhí)行以下的步驟110-125,以求取該向量
)"中的所有元素的平方和。 具體地,在步驟110,對(duì)于向量1 = (^^...,、)『中當(dāng)前還未經(jīng)過(guò)處理的
元素x[ij(i=l,2,......,n),比較其絕對(duì)值absxi與上述縮方文因子scale的大小
關(guān)系。在該步驟中,可以利用abs()函數(shù)來(lái)得到元素x[i的絕對(duì)值absxi,即
absxi=abs(x[i)。
并且,在該步驟中,如果判斷為縮放因子scale小于元素x[i的絕對(duì)值 absxi,則前進(jìn)到步驟120,否則前進(jìn)到步驟115。
在步驟115,在當(dāng)前的縮放因子scale不小于當(dāng)前元素x[i]的絕對(duì)值 absxi的情況下,以該縮放因子scale的當(dāng)前值為基數(shù),進(jìn)行該元素x[i]的 絕對(duì)值absxi的平方到平方和ssq的累加,即
ssq = ssq+(absxi/scale)。
也就是說(shuō),在該現(xiàn)有的實(shí)現(xiàn)方案中,在求取向量1 = (^^,...,;0"中的所
有元素xi(i=l,2,......,n)的平方和的過(guò)程中,并不是將各元素的平方直接累
加在一起,而是以縮放因子scale為基數(shù),將各元素的值轉(zhuǎn)換為各元素的絕 對(duì)值absxi與該基數(shù)的比值(absxi/scale),然后再將這些比值的平方累加在 一起。這樣,只要在計(jì)算結(jié)束后利用縮放因子scale恢復(fù)最終結(jié)果即可。
上述現(xiàn)有的實(shí)現(xiàn)方案中將元素的值轉(zhuǎn)換為以縮放因子scale為基數(shù)的 比值的目的是為了避免因浮點(diǎn)計(jì)算的特點(diǎn)而導(dǎo)致的精度損失,因?yàn)樵诟↑c(diǎn) 計(jì)算中,如果將一個(gè)較大的數(shù)與一個(gè)極小數(shù)直接相加,則極小數(shù)將會(huì)被忽 略,從而會(huì)導(dǎo)致計(jì)算精度的極大損失。
可以看出,在上述現(xiàn)有的實(shí)現(xiàn)方案中,在進(jìn)行每一個(gè)元素x[i]的平方 的累加時(shí)都比較縮放因子scale與該元素的絕對(duì)值absxi的大小,并在縮放 因子scale較大時(shí),將該元素的絕對(duì)值absxi轉(zhuǎn)換為以該縮放因子scale為 基數(shù)的比值(absxi/scale),從而,所得到的比值(absxi/scale)將是不超過(guò)1的數(shù)值。這樣,由于各個(gè)元素的不超過(guò)1的比值的平方和ssq不會(huì)很大,所 以通過(guò)將各元素的不超過(guò)l的比值累加在一起,能夠避免一個(gè)較大數(shù)與一 個(gè)極小數(shù)相加的情況,從而緩解因這樣的情況而導(dǎo)致的計(jì)算精度的損失。
在步驟120,在當(dāng)前的縮放因子scale小于當(dāng)前元素x[i的絕對(duì)值absxi 的情況下,以當(dāng)前元素x[i的絕對(duì)值absxi為基數(shù),進(jìn)行該元素x[i的絕對(duì) 值absxi的平方到平方和ssq的累加。即
ssq = ssq x (scale/absxi)2+l ,
并且設(shè)置縮放因子
scale=absxi。
也就是說(shuō),在該現(xiàn)有的實(shí)現(xiàn)方案中,如果在進(jìn)行當(dāng)前元素xi的平方 的累加時(shí)比較出該元素的絕對(duì)值absxi比縮放因子scale的當(dāng)前值大,則以 該元素的絕對(duì)值absxi為基數(shù),從而將之前以縮放因子scale為基數(shù)的平方 和ssq以及當(dāng)前元素的絕對(duì)值absxi轉(zhuǎn)換為以該元素的絕對(duì)值absxi為基數(shù)的值。
從而,上式ssq = ssqx(scale/absxi)2+l中的ssqx(scale/absxi)2部分便表 示之前以縮放因子scale為基數(shù)計(jì)算出的平方和ssq到以當(dāng)前元素x[i]的絕 對(duì)值absxi為基數(shù)的值的轉(zhuǎn)換。
同時(shí),在進(jìn)行當(dāng)前元素x[i的絕對(duì)值absxi以其本身為基數(shù)到平方和ssq 的累加計(jì)算時(shí),由于當(dāng)前元素xi的絕對(duì)值absxi與其自身的比值為 (absxi/absxi ) =1 ,所以將1累力口到平方和ssq ,從而成為ssq = ssqx(scale/absxi)2+l 。
并且,由于當(dāng)前的縮;^欠因子scale的值小于當(dāng)前元素x[i的絕對(duì)值 absxi,此時(shí)應(yīng)該以當(dāng)前元素x[i的絕對(duì)值absxi作為縮放因子,所以還將 當(dāng)前的縮放因子scale更新為該元素的絕對(duì)值absxi,即scale=absxi。這樣, 能夠確??si文因子scale在每一個(gè)元素的累加計(jì)算中都等于當(dāng)前正在處理 的元素x[il及其之前的所有元素中絕對(duì)值最大的那一個(gè)元素的絕對(duì)值,從 而確保當(dāng)前元素x[i及其之前的元素以該縮放因子scale為基數(shù)的比值都不 超過(guò)l,來(lái)避免一個(gè)較大數(shù)與一個(gè)極小數(shù)相加的情況。從而,可以想象,在進(jìn)行向量1 = (^^2,...,;0"中的前兩個(gè)元素的累加的
過(guò)程中,縮放因子scale等于這前兩個(gè)元素中絕對(duì)值較大的那個(gè)元素的絕對(duì) 值,在之后的累加計(jì)算中,使縮放因子scale取其當(dāng)前值與當(dāng)前元素xi]的 絕對(duì)值中較大的那一個(gè)值,作為元素的累加計(jì)算過(guò)程中的基數(shù)。
在步驟125,判斷是否存在還未經(jīng)過(guò)處理的元素,若存在,則該過(guò)程 返回到步驟110,繼續(xù)處理下一個(gè)元素,否則前進(jìn)到步驟130。
在步驟130,得到向量1 = (^^...^/1的最終的歐幾里得范數(shù)1101"111,即
norm=scale x sqrt(ssq》 其中,由于平方和ssq之前是以縮放因子scale為基數(shù)計(jì)算出的,所以為了 得到實(shí)際的歐幾里得范數(shù),在對(duì)平方和ssq開(kāi)平方根之后,還利用縮放因 子scale對(duì)結(jié)果進(jìn)行恢復(fù)。
以上就是BLAS中的現(xiàn)有的獲取向量的歐幾里得范數(shù)的實(shí)現(xiàn)方案。
從以上描述可以看出,在該現(xiàn)有的實(shí)現(xiàn)方案中,是逐個(gè)元素地來(lái)進(jìn)行 處理的,這種處理方式賦予了元素之間極強(qiáng)的依賴(lài)性,使得在后的元素的 處理只能等到在前的元素處理完之后才開(kāi)始。
在現(xiàn)代的處理器中, 一般都采用流水線(xiàn)的處理方式。也就是說(shuō), 一條 指令可以在上一條指令計(jì)算結(jié)束之前就^JC出并執(zhí)行。如圖2(a)的流水線(xiàn) 所示,假設(shè)一條浮點(diǎn)計(jì)算指令需要4個(gè)時(shí)鐘周期才能計(jì)算結(jié)束,在此情況 下,如果多個(gè)浮點(diǎn)計(jì)算指令所操作的數(shù)據(jù)之間沒(méi)有依賴(lài)關(guān)系,那么CPU可 以每個(gè)時(shí)鐘周期都發(fā)出 一條指令。
但是,在上述現(xiàn)有的實(shí)現(xiàn)方案那樣的情況下,由于對(duì)元素之間賦予了 極強(qiáng)的依賴(lài)性、即前一條指令的計(jì)算結(jié)果是下一條指令的輸入,所以如圖 2(b)的流水線(xiàn)所示,處理器必須在執(zhí)行完一條指令后才能發(fā)出第二條指令。 這樣,將極大地浪費(fèi)處理器的處理能力,導(dǎo)致計(jì)算性能的極大降低。
并且,在上迷現(xiàn)有的實(shí)現(xiàn)方案中,由于數(shù)據(jù)之間的依賴(lài)性,也導(dǎo)致了 獲取歐幾里得范數(shù)的過(guò)程無(wú)法SIMD化。
SIMD (Single-Instruction Multiple-Data,單指令多數(shù)據(jù))的含義是, 在單個(gè)SIMD (乘、加等)指令下,用一個(gè)控制器來(lái)控制多個(gè)重復(fù)設(shè)置的處理單元,利用這多個(gè)處理單元對(duì)一組連續(xù)尋址的數(shù)據(jù)(共128位,在32 位單精度類(lèi)型以及整數(shù)類(lèi)型的情況下,是4個(gè)數(shù)據(jù);在64位雙精度類(lèi)型的 情況下,是2個(gè)數(shù)據(jù);......)中的各個(gè)數(shù)據(jù)同時(shí)執(zhí)行相同的操作(相乘、
相加等),以實(shí)現(xiàn)空間上的數(shù)據(jù)并行性。也就是說(shuō),在SIMD體系結(jié)構(gòu)中, 通過(guò)利用 一條指令對(duì)并行的不同數(shù)據(jù)元素同時(shí)執(zhí)行相同類(lèi)型的計(jì)算,來(lái)提 高處理器的數(shù)據(jù)處理性能。
現(xiàn)有的單處理器系統(tǒng)或多處理器系統(tǒng)中的單個(gè)處理器大多都是包括多 個(gè)處理單元的高性能處理器(向量機(jī)),支持SIMD體系結(jié)構(gòu)。
另一方面,Cell寬頻引擎(Cell Broadband Engine, CBE )是一種單 芯片多處理器系統(tǒng)。如圖3所示,CBE系統(tǒng)具有在一個(gè)共享的、相干的存 儲(chǔ)器上進(jìn)行操作的9個(gè)處理器,其中包括一個(gè)主處理器(Power Processing Unit, PPU)和8個(gè)協(xié)處理器(Synergistic Processing unit, SPU )。在這 樣的系統(tǒng)結(jié)構(gòu)下,CBE能夠提供杰出的計(jì)算能力。具體來(lái)說(shuō),Cell處理器 在時(shí)鐘頻率3.2GHz的情況下能夠達(dá)到204G浮點(diǎn)運(yùn)算數(shù)/秒。具有這樣高 的計(jì)算能力,對(duì)于高計(jì)算任務(wù)量的向量的歐幾里得范數(shù)獲取過(guò)程來(lái)說(shuō),CBE 顯然是一個(gè)理想的執(zhí)行平臺(tái)。
但是,BLAS中的上述現(xiàn)有的實(shí)現(xiàn)方案,由于數(shù)據(jù)之間的依賴(lài)性, 也無(wú)法應(yīng)用于CBE這樣的多處理器系統(tǒng)來(lái)由多個(gè)處理器并行地執(zhí)行向量 的歐幾里得范數(shù)的獲取過(guò)程。
發(fā)明內(nèi)容
鑒于上述問(wèn)題,本發(fā)明提供了一種單處理器系統(tǒng)中獲取向量的歐幾里 得范數(shù)的方法和裝置以及多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法 和裝置,以便通過(guò)按照元素之間不存在依賴(lài)關(guān)系的段來(lái)處理要獲取歐幾里 得范數(shù)的向量,來(lái)實(shí)現(xiàn)數(shù)據(jù)處理的并行性,從而提升計(jì)算性能。
根據(jù)本發(fā)明的一個(gè)方面,提供了 一種單處理器系統(tǒng)中獲取向量的歐幾 里得范數(shù)的方法,包括將要獲取歐幾里得范數(shù)的向量劃分為具有預(yù)定數(shù) 量的元素的多個(gè)段;對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以得到該多個(gè)段的元素的平方和;以及根 據(jù)上述多個(gè)段的元素的平方和,得到上述向量的歐幾里得范數(shù)。
根據(jù)本發(fā)明的另 一個(gè)方面,提供了 一種多處理器系統(tǒng)中獲取向量的歐 幾里得范數(shù)的方法,其中該多處理器系統(tǒng)包括至少一個(gè)核心處理器以及多 個(gè)加速器(accelerator),該方法包括在上述核心處理器上將要獲取歐 幾里得范數(shù)的向量劃分為多個(gè)部分向量;將上述多個(gè)部分向量分發(fā)給上述 多個(gè)加速器;上述多個(gè)加速器的每一個(gè),對(duì)于分發(fā)給其的部分向量將該 部分向量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段;對(duì)于上述多個(gè)段的每一個(gè), 為該段內(nèi)的元素進(jìn)行基于同 一縮放因子的平方累加計(jì)算,以得到該多個(gè)段 的元素的平方和;以及上述核心處理器對(duì)上述多個(gè)加速器的平方和進(jìn)行合 計(jì),以得到上述向量的歐幾里得范數(shù)。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種單處理器系統(tǒng)中獲取向量的歐 幾里得范數(shù)的裝置,包括段劃分單元,用于將要獲取歐幾里得范數(shù)的向 量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段;段處理單元,用于對(duì)于上述多個(gè) 段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以 得到該多個(gè)段的元素的平方和;以及歐幾里得范數(shù)獲取單元,用于根據(jù)上 述多個(gè)段的元素的平方和,得到上述向量的歐幾里得范數(shù)。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種多處理器系統(tǒng)中獲取向量的歐 幾里得范數(shù)的裝置,其中該多處理器系統(tǒng)包括至少一個(gè)核心處理器以及多 個(gè)加速器,該裝置包括向量劃分單元,用于在上述核心處理器上將要獲 取歐幾里得范數(shù)的向量劃分為多個(gè)部分向量;向量分發(fā)單元,用于將上述 多個(gè)部分向量分發(fā)給上述多個(gè)加速器;段劃分單元,用于使上述多個(gè)加速 器的每一個(gè),將分發(fā)給其的部分向量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段; 段處理單元,用于使上述多個(gè)加速器的每一個(gè),對(duì)于上述多個(gè)段的每一個(gè), 為該段內(nèi)的元素進(jìn)行基于同 一縮放因子的平方累加計(jì)算,以得到該多個(gè)段 的元素的平方和;以及合計(jì)單元,用于在上述核心處理器上對(duì)上述多個(gè)加 速器的平方和進(jìn)行合計(jì),以得到上述向量的歐幾里得范數(shù)。
相信通過(guò)以下結(jié)合附圖對(duì)本發(fā)明具體實(shí)施方式
的說(shuō)明,能夠使人們更 好地了解本發(fā)明上述的特點(diǎn)、優(yōu)點(diǎn)和目的。
圖l是現(xiàn)有的獲取向量的歐幾里得范數(shù)的實(shí)現(xiàn)方案的流程圖2(a)是數(shù)據(jù)之間不存在依賴(lài)關(guān)系的數(shù)據(jù)處理指令的流水線(xiàn)的示意
圖2(b)是數(shù)據(jù)之間存在依賴(lài)關(guān)系的數(shù)據(jù)處理指令的流水線(xiàn)的示意圖; 圖3是CBE的系統(tǒng)框圖4是根據(jù)本發(fā)明實(shí)施例的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的方法的流程圖5是圖4中的步驟410的詳細(xì)流程圖6是根據(jù)本發(fā)明實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的方法的流程圖7是圖6中的步驟620的詳細(xì)流程圖; 圖8是圖6中的步驟625的詳細(xì)流程圖9是根據(jù)本發(fā)明實(shí)施例的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的裝置的方框圖;以及
圖10是根椐本發(fā)明實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范 數(shù)的裝置的方框圖。
具體實(shí)施例方式
下面就結(jié)合附圖對(duì)本發(fā)明的各個(gè)優(yōu)選實(shí)施例進(jìn)行詳細(xì)說(shuō)明。 圖4是根據(jù)本發(fā)明實(shí)施例的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的方法的流程圖。
如圖4所示,本實(shí)施例的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的 方法,在步驟405,將要獲取歐幾里得范數(shù)的向量1 = (11,^2,...,1)/劃分為分 別包含預(yù)定數(shù)量的元素的多個(gè)段。該預(yù)定數(shù)量是確保所劃分出的各段中的 元素相互之間不存在依賴(lài)關(guān)系的值。在優(yōu)選實(shí)施例中,將上述預(yù)定數(shù)量設(shè)定為16。也就是說(shuō),本發(fā)明的發(fā) 明人根據(jù)經(jīng)驗(yàn)發(fā)現(xiàn),在將向量劃分為16個(gè)元素為一段的多個(gè)段時(shí),雖然段 與段之間仍存在依賴(lài)性,但段內(nèi)的元素之間的依賴(lài)性是可以忽略的。也就 是說(shuō),在16個(gè)元素為一段的情況下,即使利用同一縮放因子對(duì)段內(nèi)的元素 并行地進(jìn)行處理,與上述現(xiàn)有的實(shí)現(xiàn)方案相比也并不會(huì)有精度的較大損失。
但是,并不限于16,本領(lǐng)域技術(shù)人員可以理解,只要所取的預(yù)定數(shù)量 不是過(guò)小或過(guò)大,當(dāng)然也可以按16以外的其它適合的值來(lái)劃分向量,但如 果所取的預(yù)定數(shù)量過(guò)小,則會(huì)無(wú)法有效消除數(shù)據(jù)間的依賴(lài)性以提升數(shù)據(jù)處 理的并行性,如果過(guò)大,則會(huì)影響計(jì)算結(jié)果的精度。
在步驟410,對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同 一縮i文因子scale的平方累加計(jì)算,以得到上述向量義=(x,,x2,...,xj中的元素 的平方和ssq。
在步驟415,根據(jù)上述平方和SSq,得到上述向量J^0c,,X2,…,;cJ的最終
的歐幾里得范數(shù)norm。
也就是說(shuō),本實(shí)施例獲取向量的歐幾里得范數(shù)的方法,與前述現(xiàn)有的
實(shí)現(xiàn)方案所不同的是,對(duì)于要獲取歐幾里得范數(shù)的向量X-(^X2,…,;cJ,不 是逐個(gè)元素地來(lái)進(jìn)行處理,而是按照包含預(yù)定數(shù)量的元素并且這些元素之 間不存在依賴(lài)關(guān)系的段來(lái)進(jìn)行的。
下面詳細(xì)描述上面圖4中的步驟410,圖5是其詳細(xì)流程圖。 如圖5所示,首先在步驟505,設(shè)置元素的平方和ssq的初始值為0, 并且縮方文因子scale的初始值為0。
接著,對(duì)于上述向量X"^&…,;cJ中的上述多個(gè)段,按照段的順序依
次執(zhí)行以下的步驟510-530。
在步驟510,對(duì)于當(dāng)前還未處理的段,求取該段的多個(gè)元素x[i........
xli+NB-l中的絕對(duì)值最大值absmax。其中,NB是上述預(yù)定數(shù)量,例如如 前所述該值是16。
在優(yōu)選實(shí)施例中,由于本領(lǐng)域技術(shù)人員可以理解,在求取一個(gè)段的多 個(gè)元素中的絕對(duì)值最大值的過(guò)程中元素之間是不存在依賴(lài)關(guān)系的,即無(wú)需等前一元素處理完再處理后一元素,所以該步驟在具體實(shí)現(xiàn)中,可以采用 流水線(xiàn)并行處理方式,即在流水線(xiàn)上每個(gè)時(shí)鐘周期都發(fā)出一條比較指令,
每一條比較指令負(fù)責(zé)進(jìn)行該多個(gè)元素x[i........x[i+NB-l中的部分元素
對(duì)部分元素的比較(在采用單指令單數(shù)據(jù)指令的情況下是單個(gè)元素對(duì)單個(gè) 元素的比較,在釆用單指令多數(shù)據(jù)、即SIMD指令的情況下,是多個(gè)元素 對(duì)多個(gè)元素的比較),并且依此類(lèi)推,在各條比較指令所得到的結(jié)果中再
進(jìn)行上述方式的相互比較,直到最終得到該多個(gè)元素x[i].......、 x[i+NB-l
中的絕對(duì)值最大值。
具體地,在采用SIMD指令的情況下,假設(shè)數(shù)據(jù)是雙精度類(lèi)型的,則 SIMD指令的操作對(duì)象將是包含2個(gè)雙精度浮點(diǎn)數(shù)的向量。這樣,在求取
當(dāng)前4殳內(nèi)的多個(gè)元素x[i........x[i+NB-lj中的絕對(duì)值最大值absmax的
過(guò)程中,可以先利用SIMD指令比較其中的第1、 2個(gè)向量以得到絕對(duì)值 最大的向量,在結(jié)果返回前,在緊接著的下一時(shí)鐘周期發(fā)出比較第3、 4 個(gè)向量以得到絕對(duì)值最大的向量的SIMD指令,依此類(lèi)推;然后,依照此 過(guò)程,對(duì)于這些比較指令所得到的結(jié)果再進(jìn)行上述方式的相互比較,以最 終得到絕對(duì)值最大的向量;最后,對(duì)最終得到的該絕對(duì)值最大的向量中的
各個(gè)元素進(jìn)行相互比較,來(lái)得到該多個(gè)元素x[i]........ xi+NB-ll中的絕
對(duì)值最大值。這樣,通過(guò)多條指令在流水線(xiàn)上的并行處理以及因采用SIMD 指令而實(shí)現(xiàn)的多個(gè)元素的并行處理,可以避免處理器將大量的時(shí)鐘周期耗 費(fèi)在因?yàn)閿?shù)據(jù)依賴(lài)性而導(dǎo)致的等待上。
在步驟515,判斷當(dāng)前的縮放因子scale是否小于上述計(jì)算出的絕對(duì)值 最大值absmax。如果是,則前進(jìn)到步驟520,否則轉(zhuǎn)到步驟525。
在步驟520,由于當(dāng)前的縮放因子scale小于上述計(jì)算出的絕對(duì)值最大 值absmax,所以在該段的計(jì)算中將絕對(duì)值最大值absmax作為縮放因子。 從而,首先將前面以縮放因子scale作為基數(shù)計(jì)算出的ssq轉(zhuǎn)換為以absmax 為基數(shù)的值,即
ssq = ssq x (scale/absmax) 然后,將該絕對(duì)值最大值設(shè)置為當(dāng)前的縮放因子scale,即
15scalc=absm8x。
也就是說(shuō),在本實(shí)施例中,在進(jìn)行每一段的處理時(shí),都比較該段的絕 對(duì)值最大值與當(dāng)前的縮放因子的大小,并在該段的絕對(duì)值最大值較大時(shí), 將該絕對(duì)值最大值設(shè)置為縮放因子。這樣,能夠確??s放因子scale在每一 段的處理中都等于當(dāng)前正在處理的段及其之前的所有段中絕對(duì)值最大值最 大的那一個(gè)段的絕對(duì)值最大值,以確保當(dāng)前段及其之前的段的元素以該縮 放因子scale為基數(shù)的比值都不超過(guò)1,來(lái)避免一個(gè)較大數(shù)與一個(gè)極小數(shù)相 加的情況。
在步驟525,利用當(dāng)前的縮放因子scale作為基數(shù),將該段中的多個(gè)元
素x[ij........ x[i+NB-l的平方累加到平方和ssq,即
ssq = ssq + (abs(x[i+j)/scale)2, (j=0,l,......,i-NB畫(huà)l)。
在該步驟中,由于對(duì)于該段中的多個(gè)元素x[i]........ x[i+NB-l,所
使用的是同 一縮^t因子scale,所以該多個(gè)元素之間的平方累加計(jì)算就不再 存在依賴(lài)關(guān)系,后一個(gè)元素的平方累加無(wú)需等到前一個(gè)元素的平方累加結(jié) 束后再進(jìn)行,所以,在具體實(shí)現(xiàn)中,可以通過(guò)在流水線(xiàn)上每個(gè)時(shí)鐘周期都
發(fā)出一條指令,來(lái)并行地進(jìn)行該段中的多個(gè)元素x[i........x[i+NB-l]到
平方和ssq的平方累加計(jì)算。
并且,在優(yōu)選實(shí)施例中,上述每一條指令都利用SIMD指令來(lái)實(shí)現(xiàn)。 也就是說(shuō),在每個(gè)時(shí)鐘周期發(fā)出的指令可以進(jìn)一步是實(shí)現(xiàn)多個(gè)元素的并行 的處理的SIMD指令。
具體地,在采用SIMD指令的情況下,可以先對(duì)第1、 2個(gè)向量進(jìn)行 與縮放因子scale的除法計(jì)算,在結(jié)果返回前,在緊接著的下一時(shí)鐘周期發(fā) 出指令對(duì)第3、 4個(gè)向量進(jìn)行與縮放因子scale的除法計(jì)算,依次類(lèi)推;然 后,在發(fā)出全部除法指令后,通過(guò)SIMD指令對(duì)笫1、 2個(gè)向量進(jìn)行平方 的乘法計(jì)算,在結(jié)果返回前,在緊接著的下一時(shí)鐘周期發(fā)出指令對(duì)第3、 4 個(gè)向量進(jìn)行乘法計(jì)算,依次類(lèi)推;最終,利用SIMD指令將各個(gè)向量的計(jì) 算結(jié)果累加在一起,并累加到平方和ssq。
這樣,由于充分地實(shí)現(xiàn)了數(shù)據(jù)的并行性處理,所以計(jì)算性能將得到極大提升。
在步驟530,判斷是否存在還未處理的段,如果存在,則該過(guò)程返回 到步驟510,否則該過(guò)程結(jié)束。
并且,基于圖5的上述內(nèi)容,圖4中根據(jù)上述平方和ssq,得到上述向 量J^(^x2,…,;cJ的最終的歐幾里得范數(shù)norm的步驟415根據(jù)下式來(lái)實(shí)現(xiàn)
norm=scale x sqrt(ssq)。 其中,scale是上述向量1 = (^12,...,;07中的所有元素的累加計(jì)算完成時(shí)的縮 放因子。并且,從上式可以看出,由于元素的平方和ssq之前是基于縮放 因子scale計(jì)算出的,所以在對(duì)ssq開(kāi)平方根之后,要利用縮放因子scale 對(duì)結(jié)果進(jìn)行恢復(fù)。
以上就是對(duì)本實(shí)施例的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方 法的詳細(xì)描述。在本實(shí)施例中,由于消除了各段內(nèi)的元素之間的依賴(lài)關(guān)系, 所以在一個(gè)段的處理中,能夠在流水線(xiàn)上使多條數(shù)據(jù)處理指令并行地得到 處理,從而能夠節(jié)省處理器的等待時(shí)間,提升計(jì)算性能。進(jìn)而,通過(guò)對(duì)數(shù) 據(jù)處理指令SIMD化,用一條SIMD指令來(lái)實(shí)現(xiàn)多個(gè)元素的并行處理,能 夠進(jìn)一步提升計(jì)算性能。
圖6是根據(jù)本發(fā)明實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的方法的流程圖。其中,該多處理器系統(tǒng)具有至少一個(gè)核心處理器以及多 個(gè)加速器(accelerator)。具體地,該多處理器系統(tǒng)例如可以是前述具有 一個(gè)PPU (核心處理器)和8個(gè)SPU (加速器)的CBE。
如圖6所示,本實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的
方法,首先在步驟605,將要獲取歐幾里得范數(shù)的向量X-(x,,X2,…,;cJ劃分
為與上述多個(gè)加速器的數(shù)量對(duì)應(yīng)的多個(gè)部分向量。在優(yōu)選實(shí)施例中,根據(jù) 負(fù)載均衡的原則,將該向量義=(^^2,..., 7劃分為均等或大致均等的多個(gè)部 分向量。
在步驟610,將上述多個(gè)部分向量分發(fā)給上述多個(gè)加速器。 在步驟615,使上述多個(gè)加速器的每一個(gè)將其分配到的部分向量劃分 為分別包含預(yù)定^t量的元素的多個(gè)段。該步驟與圖4中的步驟405相同。在步驟620,使上述多個(gè)加速器并行地對(duì)于其所劃分的多個(gè)段的每一 個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以得到其部 分向量中的元素的平方和ssq。
在步驟625,對(duì)上述多個(gè)加速器的平方和進(jìn)行合計(jì),以得到上述向量 % = 0^2,...,、)7'的歐幾里得范數(shù)。
在上面的過(guò)程中,步驟605-610以及625是在核心處理器上實(shí)現(xiàn)的部 分,步驟615-620是在各個(gè)加速器上實(shí)現(xiàn)的部分。
圖7以一個(gè)加速器為例示出了上面圖6的過(guò)程中的步驟620的詳細(xì)流 程圖,如上所述,該過(guò)程是在各個(gè)加速器上執(zhí)行的部分。因?yàn)閳D7中的步 驟7()5~730與圖5中的步驟505-530相同,只是在圖7中,每個(gè)加速器所 處理的不是要獲取歐幾里得范數(shù)的整個(gè)向量1 = (^^,...,07,而是向量中的 一部分元素,但處理過(guò)程相同,所以,在此省略對(duì)步驟705-730的說(shuō)明。
下面詳細(xì)描述圖6中對(duì)多個(gè)加速器的平方和進(jìn)行合計(jì)的步驟625,如 上所述,該步驟是在核心處理器上實(shí)現(xiàn)的部分。圖8是其詳細(xì)流程圖。
如圖8所示,首先在步驟805,設(shè)置全局平方和globe—ssq的初始值為 (),縮;改因子globe—scale的初始值為0。
接著,對(duì)于上述多個(gè)加速器,按照這些加速器所獲取的部分向量的先 后順序,依次執(zhí)4亍以下的步驟810-820。
在步驟810,對(duì)于上述多個(gè)加速器中當(dāng)前還未進(jìn)行計(jì)算結(jié)果的合計(jì)的 加速器,判斷全局縮放因子globe—scale是否小于該加速器所采用的縮放因 子scalc。
參照?qǐng)D7可知,各個(gè)加速器在對(duì)分配給它的部分向量進(jìn)行處理的過(guò)程 中,縮放因子是不斷變化的。從而,需要說(shuō)明的是,此處所指的該加速器 所釆用的縮放因子是該加速器在完成對(duì)分配給它的部分向量的處理從而最 終獲得與該部分向量有關(guān)的平方和ssq時(shí)的最終縮放因子scale。
并且,如果在該步驟判斷為全局縮放因子globe—scale小于該加速器所 采用的縮放因子scale,則該過(guò)程前進(jìn)到步驟820,否則前進(jìn)到步驟815。
在步驟815,在全局縮放因子globe_scale不小于該加速器所采用的縮放因子scale的情況下,以該全局縮放因子globe—scale為基數(shù),將該加速 器的計(jì)算結(jié)果,即平方和ssq累加到全局平方和globe一ssq,即 globe—ssq = gIobe_ssq + ssq(scale/ globe_scale)2。 在步驟820,在全局縮放因子globe_scale小于該加速器所采用的縮放 因子scale的情況下,以該縮放因子scale為基數(shù),將該加速器所計(jì)算得到 的平方和ssq累加到全局平方和globe_ssq,即
globe_ssq = globe_ssq x ( globe—scale /scale) + ssq, 并且設(shè)置全局縮放因子
globe_scale=scale 。 在步驟825,判斷是否存在還未進(jìn)行計(jì)算結(jié)果的合計(jì)的加速器,若存 在,則返回到步驟810,繼續(xù)合計(jì)下一加速器的計(jì)算結(jié)果,否則前進(jìn)到步 驟830。
在步驟830,得到上述向量x"x,A,...,xJ的最終的歐幾里得范數(shù) n()rm, 即
norm=globe—scale x sqrt(globe—ssq)。
以上就是對(duì)本實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方 法的詳細(xì)描述。在本實(shí)施例中,除了能夠獲得與圖4的單處理器系統(tǒng)中獲
取向量的歐幾里得范數(shù)的方法相同的有益效果之外,還由于利用多處理器 系統(tǒng)中的多個(gè)加速器并行地實(shí)現(xiàn)向量的歐幾里得范數(shù)的獲取過(guò)程,而能夠 進(jìn)一步提升計(jì)算性能。
在同 一發(fā)明構(gòu)思下,本發(fā)明提供一種單處理器系統(tǒng)中獲取向量的歐幾 里得范數(shù)的裝置以及多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的裝置。下 面結(jié)合附圖對(duì)其進(jìn)行描述。
圖9是根據(jù)本發(fā)明實(shí)施例的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù) 的裝置的方框圖。如圖9所示,本實(shí)施例的單處理器系統(tǒng)中獲取向量的歐 幾里得范數(shù)的裝置9包括段劃分單元91、段處理單元92以及歐幾里得 范數(shù)獲取單元93。
段劃分單元91將要獲取歐幾里得范數(shù)的向量1 = (^,^...,;0^劃分為具有預(yù)定數(shù)量的元素的多個(gè)段。其中,所采用的預(yù)定數(shù)量是確保所劃分的上 述多個(gè)段的每一個(gè)的元素之間不存在依賴(lài)關(guān)系的值。在優(yōu)選實(shí)施例中,該
預(yù)定數(shù)量是16。但是,并不限于此,也可以取16以外的其他適合的值。
段處理單元92對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同 一縮放因子的平方累加計(jì)算,以得到該多個(gè)段的元素的平方和ssq。
如圖9所示,段處理單元92進(jìn)一步包括最大值求取單元921、縮放 因子確定單元922以及元素累加單元923。
最大值求取單元921對(duì)于上述多個(gè)段的每一個(gè),求取該段中的元素 x卩J........ x[i+NB-l的絕對(duì)值最大值absmax。
縮放因子確定單元922對(duì)于上述多個(gè)段的每一個(gè),確定該段的上述絕 對(duì)值最大值absmax與該段之前的所有段的絕對(duì)值最大值中最大的值,作 為在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子。
元素累加單元923對(duì)于上述多個(gè)段的每一個(gè),以縮放因子確定單元922 所確定的在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的元
素xi]........ x[i+NB-l]的值的平方累加到該段之前的所有元素的平方和
ssq。
歐幾里得范^t獲取單元93根據(jù)上述多個(gè)段的元素的平方和,得到上述 向量的歐幾里得范數(shù)。具體地,歐幾里得范數(shù)獲取單元93求取上述多個(gè)段 的元素的平方和ssq的平方根,并且利用該多個(gè)段中最后一個(gè)段的平方累 加完成時(shí)的縮方欠因子scale恢復(fù)平方和的平方^^,從而得到上述向量 xj的歐幾里得范數(shù)norm。
圖10是#^居本發(fā)明實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范 數(shù)的裝置的方框圖。其中,該多處理器系統(tǒng)具有至少一個(gè)核心處理器以及 多個(gè)加速器。具體地,該多處理器系統(tǒng)例如可以是前述具有一個(gè)PPU (核 心處理器)和8個(gè)SPU (加速器)的CBE。
如圖IO所示,本實(shí)施例的多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的 裝置10包括向量劃分單元ll、向量分發(fā)單元12、段劃分單元13、段處 理單元14以及合計(jì)單元15。
20向量劃分單元11在上述核心處理器上將要獲取歐幾里得范數(shù)的向量
A、(^X2,…,;cJ劃分為多個(gè)部分向量。
向量分發(fā)單元12將上述多個(gè)部分向量分發(fā)給上述多個(gè)加速器。
段劃分單元13使上述多個(gè)加速器的每一個(gè),將分發(fā)給其的部分向量劃 分為具有預(yù)定數(shù)量的元素的多個(gè)段。關(guān)于該段劃分單元13,參照前面關(guān)于 圖9中的段劃分單元91所說(shuō)明的內(nèi)容。
段處理單元14使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多個(gè)段的每一 個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以得到該多 個(gè)段、即其部分向量中的元素的平方和ssq。
如圖IO所示,段處理單元14進(jìn)一步包括最大值求取單元141、縮 放因子確定單元142以及元素累加單元143。
最大值求取單元141使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多個(gè)段
的每一個(gè),求取該段中的元素xij........ xi+NB-l的絕對(duì)值最大值
absmax。
縮放因子確定單元142使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多個(gè) 段的每一個(gè),確定該段的上述絕對(duì)值最大值absmax與該段之前的所有段 的絕對(duì)值最大值中最大的值,作為在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子。
元素累加單元143使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多個(gè)段的 每一個(gè),以縮放因子確定單元142所確定的在進(jìn)行該段的平方累加計(jì)算時(shí)
的縮放因子為基數(shù),將該段中的元素xi........x[i+NB-l的值的平方累
加到該段之前的所有段的元素的平方和ssq。
合計(jì)單元15在上述核心處理器上對(duì)上述多個(gè)加速器的平方和進(jìn)行合 計(jì),以得到上述向量的歐幾里得范數(shù)。
如圖10所示,合計(jì)單元15進(jìn)一步包括平方和合計(jì)單元151以及歐 幾里得范數(shù)獲取單元152。
平方和合計(jì)單元151對(duì)于上述多個(gè)加速器的每一個(gè)
在該加速器的縮放因子scale大于之前的加速器的縮放因子globe—scale時(shí)
以該加速器的縮方文因子scale作為當(dāng)前的縮方欠因子globe—scale, 將對(duì)該加速器的平方和進(jìn)行合計(jì)之前的合計(jì)結(jié)果globe_ssq轉(zhuǎn)換為基 于當(dāng)前的縮-支因子的合計(jì)結(jié)果;并且將該加速器的平方和ssq直接累 加到轉(zhuǎn)換后的上述合計(jì)結(jié)果globe_ssq;
在該加速器的縮放因子scale小于等于之前的加速器的縮放因子 globe—scale時(shí)
以之前的加速器的縮放因子作為當(dāng)前的縮放因子globe—scale,將 該加速器的平方和ssq轉(zhuǎn)換為基于當(dāng)前的縮^t因子的平方和;并且將 該加速器的轉(zhuǎn)換后的平方和累加到上述合計(jì)結(jié)果globe—ssq。 歐幾里得范數(shù)獲取單元152根據(jù)上述合計(jì)結(jié)果,得到上述向量的歐幾 里得范數(shù)。具體地,歐幾里得范數(shù)獲取單元152求取上述合計(jì)結(jié)果globe—ssq 的平方根,并且利用在完成對(duì)上述多個(gè)加速器中最后的加速器的平方和的 合計(jì)時(shí)的縮放因子globe一scale恢復(fù)上述合計(jì)結(jié)果的平方根,從而得到上述 向量 X = (x,,x2,…,、y1 6勺歐幾里4尋; 巳數(shù)norm。
在優(yōu)選實(shí)施例中,圖9中的最大值求取單元921以及圖10中的最大值 求取單元141是通過(guò)對(duì)于上述多個(gè)段的每一個(gè)、在流水線(xiàn)上使分別進(jìn)行其 中的部分元素對(duì)部分元素的比較的多個(gè)操作并行地得到處理來(lái)實(shí)現(xiàn)的,并 且是基于SIMD體系結(jié)構(gòu)實(shí)現(xiàn)的。
也就是說(shuō),由于在求取各段的多個(gè)元素中的絕對(duì)值最大值absmax的 過(guò)程中元素之間沒(méi)有依賴(lài)關(guān)系,所以圖9中的最大值求取單元921以及圖 l()中的最大值求取單元141可以在流水線(xiàn)上每個(gè)時(shí)鐘周期都發(fā)出一條進(jìn)行 比較操作的指令,每一個(gè)比較操作負(fù)責(zé)進(jìn)行各段中的部分元素對(duì)部分元素 的比較(在采用單指令單數(shù)據(jù)指令的情況下是單個(gè)元素對(duì)單個(gè)元素的比較, 在采用單指令多數(shù)據(jù)、即SIMD指令的情況下,是多個(gè)元素對(duì)多個(gè)元素的 比較),并且依此類(lèi)推,在各個(gè)比較操作所得到的結(jié)果中再進(jìn)行上述方式 的相互比較,來(lái)得到各段的絕對(duì)值最大值absmax。
此外,在優(yōu)選實(shí)施例中,圖9中的元素累加單元923和圖10中的元素累加單元143對(duì)于多個(gè)段的每一個(gè)
在上述在進(jìn)4亍該段的平方累加計(jì)算時(shí)的縮放因子與該段之前的縮放因 子scale不同時(shí),以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù), 將該段之前的所有段的元素的平方和ssq轉(zhuǎn)換為基于該縮放因子的平方和; 以及
以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的 各個(gè)元素與該縮i文因子的比值的平方累加到轉(zhuǎn)換后的上述平方和ssq。
在進(jìn)一步的優(yōu)選實(shí)施例中,圖9中的元素累加單元923和圖10中的元 素累加單元143是通過(guò)對(duì)于上述多個(gè)段的每一個(gè)、在流水線(xiàn)上使分別與其 中的部分元素的累加有關(guān)的多個(gè)操作并行地得到處理來(lái)實(shí)現(xiàn)的,并且是基 于SIMD體系結(jié)構(gòu)實(shí)現(xiàn)的。
以上就是對(duì)本發(fā)明的單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的裝置 以及多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的裝置的詳細(xì)描述。其中, 該裝置9、 IO及其各個(gè)組成部分,可以由專(zhuān)用的電路或芯片構(gòu)成,也可以 通過(guò)計(jì)算機(jī)(處理器)執(zhí)行相應(yīng)的程序來(lái)實(shí)現(xiàn)。
以上雖然通過(guò)一些示例性的實(shí)施例對(duì)本發(fā)明的單處理器系統(tǒng)中獲取向 量的歐幾里得范數(shù)的方法和裝置以及多處理器系統(tǒng)中獲取向量的歐幾里得 范數(shù)的裝置進(jìn)行了詳細(xì)的描述,但是以上這些實(shí)施例并不是窮舉的,本領(lǐng) 域技術(shù)人員可以在本發(fā)明的精神和范圍內(nèi)實(shí)現(xiàn)各種變化和修改。因此,本 發(fā)明并不限于這些實(shí)施例,本發(fā)明的范圍僅以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法,包括將要獲取歐幾里得范數(shù)的向量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段;對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以得到該多個(gè)段的元素的平方和;以及根據(jù)上述多個(gè)段的元素的平方和,得到上述向量的歐幾里得范數(shù)。
2. —種多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法,其中該多處 理器系統(tǒng)包括至少一個(gè)核心處理器以及多個(gè)加速器(accelerator),該方 法包括在上述核心處理器上將要獲取歐幾里得范數(shù)的向量劃分為多個(gè)部分向量;將上述多個(gè)部分向量分發(fā)給上述多個(gè)加速器; 上述多個(gè)加速器的每一個(gè),對(duì)于分發(fā)給其的部分向量 將該部分向量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段; 對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因 子的平方累加計(jì)算,以得到該多個(gè)段的元素的平方和;以及 上述核心處理器對(duì)上述多個(gè)加速器的平方和進(jìn)行合計(jì),以得到上述向 量的歐幾里得范數(shù)。
3. 根據(jù)權(quán)利要求i或2所述的方法,其中對(duì)于上述多個(gè)段的每一個(gè), 為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算的步驟進(jìn)一步包括對(duì)于上述多個(gè)段的每一個(gè) 求取該段中的元素的絕對(duì)值最大值;確定該段的上述絕對(duì)值最大值與該段之前的所有段的絕對(duì)值最大值中 最大的值,作為在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子;以及以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的 元素的值的平方累加到該段之前的所有段的元素的平方和。
4. 根據(jù)權(quán)利要求3所述的方法,其中上述預(yù)定數(shù)量是確保所劃分的上述多個(gè)段的每一個(gè)的元素相互之間不存在依賴(lài)關(guān)系的值。
5. 根據(jù)權(quán)利要求3所述的方法,其中對(duì)于上述多個(gè)段的每一個(gè),求取該段中的元素的絕對(duì)值最大值的步驟,是通過(guò)在流水線(xiàn)上使分別進(jìn)行該段
6. 根據(jù)權(quán)利要求5所述的方法,其中對(duì)于上述多個(gè)段的每一個(gè),求取該段中的元素的絕對(duì)值最大值的步驟是利用SIMD指令實(shí)現(xiàn)的。
7. 根據(jù)權(quán)利要求3所述的方法,其中以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的元素的值的平方累加到該段之前的所有段的元素的平方和的步驟進(jìn)一步包括對(duì)于上述多個(gè)段的每一個(gè)在上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子與該段之前的縮放因子不同時(shí),將該段之前的所有段的元素的平方和轉(zhuǎn)換為以在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù)的平方和;以及以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的各個(gè)元素與該縮放因子的比值的平方累加到轉(zhuǎn)換后的上述平方和。
8. 根據(jù)權(quán)利要求7所述的方法,其中將該段中的各個(gè)元素與該縮放因子的比值的平方累加到轉(zhuǎn)換后的上述平方和的步驟,是通過(guò)在流水線(xiàn)上使分別與該段中的部分元素的平方累加有關(guān)的多個(gè)操作并行地得到處理來(lái)實(shí)現(xiàn)的。
9. 根據(jù)權(quán)利要求8所述的方法,其中將該段中的各個(gè)元素與該縮放因子的比值的平方累加到轉(zhuǎn)換后的上述平方和的步驟是利用SIMD指令實(shí)現(xiàn)的。
10. 根據(jù)權(quán)利要求1所述的方法,其中根據(jù)上述多個(gè)段的元素的平方和,得到上述向量的歐幾里得范數(shù)的步驟進(jìn)一步包括求取上述多個(gè)段的元素的平方和的平方根;以及利用上述多個(gè)段中最后一個(gè)段的平方累加計(jì)算完成時(shí)的縮放因子恢復(fù)上述平方和的平方根。
11. 根據(jù)權(quán)利要求2所述的方法,其中上述核心處理器對(duì)上述多個(gè)加 速器的平方和進(jìn)^f亍合計(jì)的步驟進(jìn)一步包括對(duì)于上述多個(gè)加速器的每一個(gè)在該加速器的縮放因子大于之前的加速器的縮放因子時(shí)以該加速器的縮放因子作為當(dāng)前的縮放因子,將對(duì)該加速器的平 方和進(jìn)行合計(jì)之前的合計(jì)結(jié)果轉(zhuǎn)換為基于當(dāng)前的縮放因子的合計(jì)結(jié) 果;以及將該加速器的平方和直接累加到上述合計(jì)結(jié)果; 在該加速器的縮放因子小于等于之前的加速器的縮放因子時(shí)以之前的加速器的縮放因子作為當(dāng)前的縮放因子,將該加速器的 平方和轉(zhuǎn)換為基于當(dāng)前的縮放因子的平方和;以及將該加速器的轉(zhuǎn)換后的平方和累加到上述合計(jì)結(jié)果; 求取上述合計(jì)結(jié)果的平方根;以及利用在完成對(duì)上述多個(gè)加速器的平方和的合計(jì)時(shí)的縮方文因子恢復(fù)上述 合計(jì)結(jié)果的平方^f艮。
12. —種單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的裝置,包括 段劃分單元,用于將要獲取歐幾里得范數(shù)的向量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段;段處理單元,用于對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基 于同一縮放因子的平方累加計(jì)算,以得到該多個(gè)段的元素的平方和;以及歐幾里得范數(shù)獲取單元,用于根據(jù)上述多個(gè)段的元素的平方和,得到 上述向量的歐幾里得范數(shù)。
13. 根據(jù)權(quán)利要求12所述的裝置,其中上述段處理單元進(jìn)一步包括 最大值求取單元,用于對(duì)于上述多個(gè)段的每一個(gè),求取該段中的元素的絕對(duì)值最大值;縮放因子確定單元,用于對(duì)于上述多個(gè)段的每一個(gè),確定該段的上述 絕對(duì)值最大值與該段之前的所有段的絕對(duì)值最大值中最大的值,作為在進(jìn) 行該段的平方累加計(jì)算時(shí)的縮放因子;以及元素累加單元,用于對(duì)于上述多個(gè)段的每一個(gè),以上述在進(jìn)行該段的 平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的元素的值的平方累加到該 段之前的所有段的元素的平方和。
14. 一種多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的裝置,其中該多 處理器系統(tǒng)包括至少一個(gè)核心處理器以及多個(gè)加速器,該裝置包括向量劃分單元,用于在上述核心處理器上將要獲取歐幾里得范數(shù)的向 量劃分為多個(gè)部分向量;向量分發(fā)單元,用于將上述多個(gè)部分向量分發(fā)給上述多個(gè)加速器;段劃分單元,用于使上述多個(gè)加速器的每一個(gè),將分發(fā)給其的部分向 量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段;段處理單元,用于使上述多個(gè)加速器的每一個(gè),對(duì)于上述多個(gè)段的每 一個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以得到該 多個(gè)段的元素的平方和;以及合計(jì)單元,用于在上述核心處理器上對(duì)上述多個(gè)加速器的平方和進(jìn)行 合計(jì),以得到上述向量的歐幾里得范數(shù)。
15. 根據(jù)權(quán)利要求14所述的裝置,其中上述段處理單元進(jìn)一步包括 最大值求取單元,用于使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多個(gè)段的每一個(gè),求取該段中的元素的絕對(duì)值最大值;縮放因子確定單元,用于使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多 個(gè)段的每一個(gè),確定該段的上述絕對(duì)值最大值與該段之前的所有段的絕對(duì) 值最大值中最大的值,作為在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子;以 及元素累加單元,用于使上述多個(gè)加速器的每一個(gè),對(duì)于其上述多個(gè)段 的每一個(gè),以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該 段中的元素的值的平方累加到該段之前的所有段的元素的平方和。
16. 根據(jù)權(quán)利要求12或14所述的裝置,其中上述預(yù)定數(shù)量是確保所 劃分的上述多個(gè)段的每一個(gè)的元素相互之間不存在依賴(lài)關(guān)系的值。
17. 根據(jù)權(quán)利要求13或15所述的裝置,其中上述最大值求取單元是通過(guò)對(duì)于上述多個(gè)段的每一個(gè)、在流水線(xiàn)上使分別進(jìn)行其中的部分元素對(duì)部分元素的比較的多個(gè)操作并行地得到處理來(lái)實(shí)現(xiàn)的,并且是基于SIMD體系結(jié)構(gòu)實(shí)現(xiàn)的。
18. 根據(jù)權(quán)利要求13或15所述的裝置,其中上述元素累加單元對(duì)于上述多個(gè)段的每一個(gè)在上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子與該段之前的縮放因子不同時(shí),以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段之前的所有段的元素的平方和轉(zhuǎn)換為基于該縮放因子的平方和;以及以上述在進(jìn)行該段的平方累加計(jì)算時(shí)的縮放因子為基數(shù),將該段中的各個(gè)元素與該縮放因子的比值的平方累加到轉(zhuǎn)換后的上述平方和。
19. 根據(jù)權(quán)利要求13或15所述的裝置,其中上述元素累加單元是通過(guò)對(duì)于上述多個(gè)段的每一個(gè)、在流水線(xiàn)上使分別與其中的部分元素的平方累加有關(guān)的多個(gè)操作并行地得到處理來(lái)實(shí)現(xiàn)的,并且是基于SIMD體系結(jié)構(gòu)實(shí)現(xiàn)的。
20. 根據(jù)權(quán)利要求14所述的裝置,其中上述合計(jì)單元進(jìn)一步包括平方和合計(jì)單元,用于對(duì)于上述多個(gè)加速器的每一個(gè)在該加速器的縮放因子大于之前的加速器的縮放因子時(shí)以該加速器的縮放因子作為當(dāng)前的縮放因子,將對(duì)該加速器的平方和進(jìn)行合計(jì)之前的合計(jì)結(jié)果轉(zhuǎn)換為基于當(dāng)前的縮放因子的合計(jì)結(jié)果;并且將該加速器的平方和直接累加到轉(zhuǎn)換后的上述合計(jì)結(jié)果;在該加速器的縮放因子小于等于之前的加速器的縮放因子時(shí)以之前的加速器的縮放因子作為當(dāng)前的縮放因子,將該加速器的平方和轉(zhuǎn)換為基于當(dāng)前的縮放因子的平方和;并且將該加速器的轉(zhuǎn)換后的平方和累加到在對(duì)該加速器的平方和進(jìn)行合計(jì)之前的合計(jì)結(jié)果;以及歐幾里得范數(shù)獲取單元,用于根據(jù)上述合計(jì)結(jié)果,得到上述向量的歐幾里得范數(shù)。
全文摘要
本發(fā)明提供了一種單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法和裝置以及多處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法和裝置。其中該單處理器系統(tǒng)中獲取向量的歐幾里得范數(shù)的方法包括將要獲取歐幾里得范數(shù)的向量劃分為具有預(yù)定數(shù)量的元素的多個(gè)段;對(duì)于上述多個(gè)段的每一個(gè),為該段內(nèi)的元素進(jìn)行基于同一縮放因子的平方累加計(jì)算,以得到該多個(gè)段的元素的平方和;以及根據(jù)上述多個(gè)段的元素的平方和,得到上述向量的歐幾里得范數(shù)。本發(fā)明通過(guò)按段消除向量中的元素之間的依賴(lài)關(guān)系,能夠?qū)崿F(xiàn)數(shù)據(jù)處理的并行性,從而提升計(jì)算性能。
文檔編號(hào)G06F9/38GK101676864SQ200810213578
公開(kāi)日2010年3月24日 申請(qǐng)日期2008年9月16日 優(yōu)先權(quán)日2008年9月16日
發(fā)明者李廣磊, 王佰玲, 寧 葛, 瓊 魏, 龔志剛 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司