專利名稱:用于使用并行處理來求解線性方程組的設(shè)備、系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于求解線性方程組的迭代方法,其可以用于例如估計(jì)視頻文件的幀之間的動作以轉(zhuǎn)換幀頻。
背景技術(shù):
視頻輸入文件可以具有一特定的幀頻。用于輸出(例如播放)該文件的設(shè)備可以具有一個不同的幀頻。例如一個50Hz的視頻文件可以被輸入到一個以100Hz的幀頻播放視頻的電視。當(dāng)輸入文件的幀頻與輸出文件的幀頻不同時,需要使得幀頻一致。
已經(jīng)開發(fā)了幀頻轉(zhuǎn)換算法來改變幀的顯示速率。幀頻轉(zhuǎn)換算法可以例如,增加或減少每個時間周期內(nèi)的幀數(shù)目,以相應(yīng)地加快或減慢輸入幀頻,而不改變視頻顯示的總時間或所覺察到的顯示速度。一些基本算法可以簡單地復(fù)制或消除幀。其它的可以使用例如運(yùn)動補(bǔ)償算法在幀間插入動作。
視頻中的運(yùn)動估計(jì)可以被模型化,例如,通過(偏)微分方程(PDE)。可以對PDE應(yīng)用一個離散方法(例如有限差分)來找到其數(shù)值解。離散化可以生成一個線性方程組,例如一個大型稀疏線性方程組(LSSLE)。每個LSSLE可以描述一對幀中的每個幀之間的改變或運(yùn)動。幀頻轉(zhuǎn)換算法可以使用LSSLE的數(shù)值解,例如,用于生成幀頻轉(zhuǎn)換。LSSLE在科學(xué)和工程的許多領(lǐng)域是已知的,例如電子工程、流體動力學(xué)、計(jì)算機(jī)視覺/圖形、光流估計(jì)、超分辨率和圖像降噪。
求解該LSSLE可能需要密集計(jì)算。例如,求解LSSLE以對一組幀的幀頻進(jìn)行轉(zhuǎn)換可能花費(fèi)比這些幀的播放時間更久的時間。當(dāng)播放器在等待轉(zhuǎn)換后的幀時,可能在播放速率上有延遲。為了補(bǔ)償這個延遲,一個幀頻轉(zhuǎn)換算法通過生成更少的幀和/或生成具有降級的運(yùn)動估計(jì)的幀,會降低視頻質(zhì)量。這會導(dǎo)致更多的“跳躍”視頻。
本申請公開的主題在說明書的結(jié)尾部分被特別地指出和清楚地聲明。然而,本發(fā)明的實(shí)施例,涉及組織結(jié)構(gòu)和操作方法,以及它的目標(biāo)、特征和益處,可以通過參考下面的詳細(xì)說明并與附圖一起閱讀來更好地理解,其中 圖1是根據(jù)本發(fā)明的一個實(shí)施例的系統(tǒng)的示意圖; 圖2是根據(jù)本發(fā)明的一個實(shí)施例的處理器流水線的示意圖; 圖3是根據(jù)本發(fā)明的一個實(shí)施例的項(xiàng)重排的示意圖,其中,將具有初始順序的向量x重排為具有新的順序的向量x’; 圖4A和4B顯示根據(jù)本發(fā)明的一個實(shí)施例的,分別表示具有初始順序的向量x和具有新的順序的向量x’的矩陣;以及 圖5是根據(jù)本發(fā)明的一個實(shí)施例的方法的流程圖。
可以理解,為了描述地簡單和清楚,圖中示出的元件不必精確繪制或按比例繪制。例如,為了清楚,一些元件的尺寸可以相對于其它元件進(jìn)行放大,或者將多個物理部件包括在一個功能塊或元件中。此外,基于合適的考慮,參考標(biāo)記可以在附圖之間重復(fù)使用,以指示對應(yīng)的或類似的元件。另外,在附圖中描述的一些塊可以被組合為單個功能。
具體實(shí)施例方式 在下面的詳細(xì)描述中,闡明了許多具體細(xì)節(jié)以便透徹理解本發(fā)明的實(shí)施例。然而本領(lǐng)域技術(shù)人員應(yīng)該理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下被實(shí)施。在其它例子中,公知的方法、過程、部件和電路未詳細(xì)說明,以免使得該描述模糊不清。
如果沒有具體說明,那么明顯從下面的討論可以理解,在整個說明書中使用的術(shù)語(例如“處理”、“計(jì)算”、“決定”等)是指計(jì)算機(jī)、計(jì)算系統(tǒng)或類似的電子計(jì)算設(shè)備的動作和/或處理過程,其控制和/或轉(zhuǎn)換表示為計(jì)算系統(tǒng)的寄存器和/或存儲器中的物理量(例如電子,量子)的數(shù)據(jù),將它們轉(zhuǎn)換為其它類似地表示為計(jì)算系統(tǒng)的存儲器、寄存器或其它此類信息存儲、傳輸或顯示設(shè)備中的物理量的數(shù)據(jù)。另外,在本說明書全文中可以使用術(shù)語“多個”來描述兩個或更多的部件、設(shè)備、要素、參數(shù)等。
本發(fā)明的實(shí)施例可以在各種應(yīng)用中使用。盡管本發(fā)明在這方面不受限制,本文公開的電路和技術(shù)可以用于許多裝置,例如個人電腦(PC)、圖像或視頻重放設(shè)備、數(shù)字視頻光盤(DVD)播放器、無線設(shè)備或無線臺、視頻或數(shù)字游戲設(shè)備或系統(tǒng)、圖像采集系統(tǒng)、處理系統(tǒng)、可視化或顯示系統(tǒng)、數(shù)字顯示系統(tǒng)、通信系統(tǒng)等。
本發(fā)明的實(shí)施例可以用于例如以第一幀頻輸入視頻并以第二幀頻輸出視頻的系統(tǒng)。播放時間或察覺到的播放時間可以保持相同,但每個時間單元內(nèi)顯示的幀的數(shù)目可以改變。本發(fā)明的實(shí)施例可以從第一幀頻轉(zhuǎn)換到第二幀頻。幀頻轉(zhuǎn)換可以包括插入中間幀,例如,通過求解LSSLE。例如,本發(fā)明的實(shí)施例可以運(yùn)轉(zhuǎn)在例如一個計(jì)算機(jī)系統(tǒng)上,以執(zhí)行打包指令,如圖1所示。
參考圖1,其示意性地描述了根據(jù)本發(fā)明的一個實(shí)施例的計(jì)算機(jī)系統(tǒng)100。計(jì)算機(jī)系統(tǒng)100是可以結(jié)合本發(fā)明實(shí)施例使用的一種計(jì)算機(jī)系統(tǒng)的例子。未示出的不同配置的其它類型的計(jì)算機(jī)系統(tǒng)也可以結(jié)合本發(fā)明的實(shí)施例使用。計(jì)算機(jī)系統(tǒng)100可以包括一個或多個總線101和/或點(diǎn)對點(diǎn)互連,或其它內(nèi)部通信硬件和軟件,來傳輸信息;計(jì)算機(jī)系統(tǒng)100還包括耦合到總線101或點(diǎn)對點(diǎn)互連的、用于處理信息的處理器109。處理器109可以具有單核、多核或?qū)ΨQ多處理結(jié)構(gòu)。
處理器109可以是例如中央處理單元(CPU)或具有任何合適體系結(jié)構(gòu)的多個處理器。在一個實(shí)施例中,該體系結(jié)構(gòu)可以包括流SIMD擴(kuò)展(SSE)(例如,SSE4.2或其它SSE4指令集,如在2007年4月公布的“
SSE4Programming Reference”中所描述的),其是一個單指令多數(shù)據(jù)(SIMD)指令集擴(kuò)展。該SSE體系結(jié)構(gòu)可以在多個(例如4個)數(shù)據(jù)點(diǎn)上并行地執(zhí)行打包指令。在另一實(shí)施例中,SSE體系結(jié)構(gòu)的
高級矢量擴(kuò)展(AVX)(例如,在2008年3月公布的“
Advanced Vector Extension ProgrammingReference”中所描述的),可以用于在其它數(shù)目(例如8或16個)的數(shù)據(jù)點(diǎn)上并行執(zhí)行打包指令。處理器109可以具有復(fù)雜指令集計(jì)算機(jī)體系結(jié)構(gòu)或精簡指令集計(jì)算機(jī)體系結(jié)構(gòu)。
處理器109可以包括執(zhí)行單元130、寄存器堆150、高速緩存層次結(jié)構(gòu)160、解碼器165和內(nèi)部總線170。該寄存器堆150可以包括包含了多個結(jié)構(gòu)寄存器的單個寄存器堆或包括多個寄存器堆,該多個寄存器堆中的每個包括多個結(jié)構(gòu)寄存器。其它寄存器也可以使用。
計(jì)算機(jī)系統(tǒng)100可以在耦合到總線101的主存儲器104中包括隨機(jī)存取存儲器(RAM)、動態(tài)RAM(DRAM)或其它動態(tài)存儲元件,用于存儲處理器109執(zhí)行的信息和指令。主存儲器104可以用于在處理器109執(zhí)行指令期間存儲臨時變量或其它中間信息。計(jì)算機(jī)系統(tǒng)100可以包括耦合到總線101的只讀存儲器(ROM)106或其它靜態(tài)存儲元件,來存儲用于處理器109的靜態(tài)信息和指令。
數(shù)據(jù)存儲設(shè)備107,例如磁盤或光盤及對應(yīng)的盤驅(qū)動器,可以耦合到總線101。計(jì)算機(jī)系統(tǒng)100可以通過總線101耦合到用于向計(jì)算機(jī)系統(tǒng)100的用戶顯示信息的顯示設(shè)備121。顯示設(shè)備121可以包括幀緩沖器、專用圖形繪制設(shè)備、陰極射線管(CRT)或平板顯示器,但本發(fā)明并不限于此。字母數(shù)字輸入設(shè)備122,例如包括字母數(shù)字和其它鍵的鍵盤,可以被耦合到總線101用于向處理器109傳送信息和命令選擇。還可以包括光標(biāo)控制器123,其包括鼠標(biāo)、軌跡球、筆、觸摸屏或光標(biāo)方向鍵,用于向處理器109傳送方向信息和命令選擇,并用于控制顯示設(shè)備121上的光標(biāo)移動。該計(jì)算機(jī)系統(tǒng)100可以被耦合到錄音和重放設(shè)備125。錄音可以使用例如耦合到麥克風(fēng)的音頻數(shù)字轉(zhuǎn)換器來實(shí)現(xiàn),聲音重放可以使用例如耦合到數(shù)模(D/A)轉(zhuǎn)換器的用于重放數(shù)字聲音的耳機(jī)或揚(yáng)聲器來實(shí)現(xiàn),但本發(fā)明并不限于此。
計(jì)算機(jī)系統(tǒng)100可以用作計(jì)算機(jī)網(wǎng)絡(luò)中的終端,其中計(jì)算機(jī)系統(tǒng)100是計(jì)算機(jī)網(wǎng)絡(luò)的計(jì)算機(jī)子系統(tǒng),但本發(fā)明并不限于此。計(jì)算機(jī)系統(tǒng)100可以進(jìn)一步包括視頻數(shù)字化設(shè)備126。視頻數(shù)字化設(shè)備126能用于捕捉視頻圖像,其可以被傳送到耦合到計(jì)算機(jī)網(wǎng)絡(luò)的其它計(jì)算機(jī)系統(tǒng)。
在一個實(shí)施例中,處理器109可以支持與以下指令集兼容的指令集x86和/或x87指令集,由例如
CoreTM2Duo處理器這樣的微處理器使用的指令集,其由位于加州圣克拉拉的英特爾公司制造。因此,在一個實(shí)施例中,處理器109支持英特爾體系結(jié)構(gòu)(IA.TM.)中支持的所有操作,其由位于加州圣克拉拉的英特爾公司定義。參見2005年4月出版的“Microprocessors,IA-32
Architecture Software Developer′s Manual”(卷3“System Programming Guide”)。因此,處理器109除支持其它操作外還可以支持現(xiàn)有的x86和/或x87操作。本發(fā)明的實(shí)施例可以使用或被并入其它指令集。
該執(zhí)行單元130可以用于執(zhí)行處理器109接收到的指令。除了識別可在通用處理器中實(shí)現(xiàn)的指令外,執(zhí)行單元130可以識別在例如SIMD中的指令、打包指令或其它指令,例如用于在打包數(shù)據(jù)格式上執(zhí)行操作的打包指令集140。在一個實(shí)施例中,該打包指令集140可以包括用于支持打包和/或標(biāo)量運(yùn)算的指令或浮點(diǎn)指令,例如,打包加運(yùn)算、打包減運(yùn)算、打包乘運(yùn)算、打包移位操作、打包比較運(yùn)算、乘加運(yùn)算、乘減運(yùn)算、計(jì)數(shù)操作以及一組打包邏輯操作,但本發(fā)明并不限于此。一個實(shí)施例的一組打包數(shù)據(jù)邏輯操作可以包括例如ANDPS、ORPS、XORPS和ANDNPS,但本發(fā)明并不限于此。一個實(shí)施例的一組打包算術(shù)操作可以包括例如ADDPS、SUBPS、MULPS、DIVPS、RCPPS、SQRTPS、MAXPS、MINPS和RSQRTPS,但本發(fā)明并不限于此。一個實(shí)施例的一組打包數(shù)據(jù)移動操作可以包括例如打包的MOVPS、MOVAPS、MOVUPS、MOVLPS、MOVHPS、MOVLHPS和MOVHLPS,但本發(fā)明并不限于此。盡管描述的一個實(shí)施例中的打包指令集140包括這些指令,可選的實(shí)施例可以包括這些指令的子集或超集。
這些指令提供了在使用打包數(shù)據(jù)的多媒體應(yīng)用中使用的許多算法需要的運(yùn)算的執(zhí)行。因而,這些算法可以被編寫來打包必要的數(shù)據(jù)并在打包數(shù)據(jù)上執(zhí)行必要的操作,而不需要將打包數(shù)據(jù)進(jìn)行拆分以便每次在一個數(shù)據(jù)元素上執(zhí)行一個或多個運(yùn)算。執(zhí)行單元130可以使用例如內(nèi)部總線170被耦合到寄存器堆150。其它類型的總線或數(shù)據(jù)傳輸系統(tǒng),例如點(diǎn)對點(diǎn)系統(tǒng),也可以使用。寄存器堆150代表處理器109上用于存儲信息的存儲區(qū)域,該信息包括數(shù)據(jù)。另外,執(zhí)行單元130可以耦合到高速緩存層次結(jié)構(gòu)160和解碼器165。該高速緩存層次結(jié)構(gòu)160用于緩存來自于例如主存儲器104的數(shù)據(jù)和控制信號。解碼器165用于將處理器109收到的指令解碼為控制信號和微碼入口點(diǎn)。響應(yīng)于這些控制信號和微碼入口點(diǎn),執(zhí)行單元130執(zhí)行合適的操作。例如,如果收到了一條加法指令,解碼器165就使執(zhí)行單元130執(zhí)行所需的加法;如果收到了一條減法指令,解碼器165就使執(zhí)行單元130執(zhí)行需要的減法。因此,盡管解碼器165和執(zhí)行單元130的各種指令執(zhí)行由一系列“if/then”語句表示,一個實(shí)施例中的指令執(zhí)行不需要這些“if/then”語句的連續(xù)處理。
寄存器堆150可以用于存儲信息,包括控制和狀態(tài)信息、標(biāo)量數(shù)據(jù)、整數(shù)數(shù)據(jù)、打包整數(shù)數(shù)據(jù)以及打包浮點(diǎn)數(shù)據(jù)。在一個實(shí)施例中,寄存器堆150可以包括耦合到內(nèi)部總線170的存儲器寄存器、控制和狀態(tài)寄存器、標(biāo)量整數(shù)寄存器、標(biāo)量浮點(diǎn)寄存器、打包單精度浮點(diǎn)寄存器、打包整數(shù)寄存器以及指令指針寄存器,但是本發(fā)明并不限于此。
在一個實(shí)施例中,標(biāo)量整數(shù)寄存器是32位寄存器,打包單精度浮點(diǎn)寄存器是128位寄存器,打包整數(shù)寄存器是64位寄存器,但是本發(fā)明并不限于此。SSE指令集可以使用例如稱為xmm0到xmm7的8個128位寄存器。另外的8個稱為xmm8到xmm15的128位寄存器可以用于SSE指令集。例如,xmm0可以為向量b保存4個項(xiàng),xmm1至xmm4可以為向量x的4個數(shù)據(jù)點(diǎn)中的每一個保存4個項(xiàng),xmm5至xmm8中的每一個可以保存矩陣A的4個對應(yīng)系數(shù)項(xiàng)。SSE指令集可以通過同時乘矩陣A的系數(shù)項(xiàng)而并行處理向量x的多個(例如4個)數(shù)據(jù)點(diǎn)。例如,8個xmm寄存器(例如xmm0-xmm7)可以被使用(例如在32位平臺)和/或16個xmm寄存器(例如xmm0-xmm15)可以被使用(例如在64位平臺)??梢允褂昧硗獾?2位控制/狀態(tài)寄存器,例如MXCSR。每個寄存器可以將四個32位單精度浮點(diǎn)數(shù)打包在一起。整數(shù)SIMD操作可以用8個64位MMX寄存器執(zhí)行??梢允褂闷渌噶罴图拇嫫鞔笮???梢允褂糜糜诓⑿械貓?zhí)行8個數(shù)據(jù)點(diǎn)的另一個指令集(例如SSE AVX指令集)。該指令集可以使用例如12個256位寄存器,其可以被稱為例如ymm0到y(tǒng)mm10以及ERR_YMM。更大的(例如256位)寄存器可以使得例如ymm0能夠?yàn)橄蛄縝保存8個項(xiàng),使得ymm1至ymm4能夠?yàn)橄蛄縳的8個數(shù)據(jù)點(diǎn)中的每一個保存8個項(xiàng),使得ymm4至ymm7中的每一個能夠保存矩陣A的8個對應(yīng)系數(shù)項(xiàng)。例如,可以使用12個ymm寄存器(例如ymm0到y(tǒng)mm10以及ERR_YMM)。也可以使用其它寄存器、數(shù)目、大小和類型。
在一個實(shí)施例中,打包整數(shù)寄存器化名到與標(biāo)量浮點(diǎn)寄存器相同的存儲空間上。單獨(dú)的寄存器被用于打包的浮點(diǎn)數(shù)據(jù)。在使用寄存器堆150的寄存器時,處理器109在任何給定的時間將這些寄存器視為堆棧訪問浮點(diǎn)寄存器或非堆棧訪問打包整數(shù)寄存器。在該實(shí)施例中,包括一種機(jī)制來允許處理器109的操作在作為堆棧訪問浮點(diǎn)寄存器的寄存器和作為非堆棧訪問打包整數(shù)寄存器的寄存器之間進(jìn)行切換。在另一這樣的實(shí)施例中,處理器109可以同時工作在非棧參考浮點(diǎn)寄存器和打包數(shù)據(jù)寄存器上。另外,在可選實(shí)施例中,這些相同的寄存器可以用于存儲標(biāo)量整數(shù)數(shù)據(jù)。
可選的實(shí)施例可以包含不同的寄存器組。例如,可選的實(shí)施例可以包括用于打包整數(shù)寄存器和標(biāo)量數(shù)據(jù)寄存器的單獨(dú)的寄存器??蛇x的實(shí)施例可以包括第一寄存器組,每個用于存儲控制和狀態(tài)信息,以及第二寄存器組,每個能夠存儲標(biāo)量整數(shù)、打包整數(shù)以及打包浮點(diǎn)數(shù)據(jù)。
此外,盡管描述了特定類型的處理器和指令集體系結(jié)構(gòu),本發(fā)明的實(shí)施例可以使用其它類型的處理器、體系結(jié)構(gòu)和指令集工作。
寄存器堆150的寄存器可以被實(shí)現(xiàn)為包括不同數(shù)目和不同大小的寄存器。例如,在一個實(shí)施例中,整數(shù)寄存器可以實(shí)現(xiàn)為存儲32位,而其它寄存器被實(shí)現(xiàn)為存儲128位,其中所有128位被用來存儲浮點(diǎn)數(shù)據(jù),而僅僅64位被用于打包數(shù)據(jù)。在可選實(shí)施例中,每個整數(shù)寄存器包含32或64位。
本發(fā)明的實(shí)施例可以包括執(zhí)行單元130,其通過處理器109執(zhí)行一個或多個打包指令集140中的指令(例如,用于并行執(zhí)行4、8和/或16個數(shù)據(jù)點(diǎn))。指令集140可以用于對一個或多個方程求解,例如LSSLE。LSSLE的解可以用于例如幀頻轉(zhuǎn)換,以將輸入文件的幀頻改變?yōu)榕c輸出文件、存儲設(shè)備、存儲格式或顯示設(shè)備的幀頻匹配。輸入文件可以經(jīng)由總線101從輸入設(shè)備存儲和/或接收,例如主存儲器104、ROM 106、數(shù)據(jù)存儲器107、錄音和重放設(shè)備125和/或輸入設(shè)備122。輸出文件可以被輸出設(shè)備使用或廣播,例如錄音和重放設(shè)備125或顯示設(shè)備121。
參考圖2,其示意性地描述了根據(jù)本發(fā)明實(shí)施例的處理器流水線200。處理器流水線200可以包括雙重數(shù)據(jù)流水線,其包括U流水線202和V流水線204。在其它實(shí)施例中,處理器流水線200可以包括一條單獨(dú)的流水線,或多于兩條流水線。使用SIMD指令,處理器流水線200可以使用每條數(shù)據(jù)流水線并行地處理多個(例如4個、8個和/或16個)數(shù)據(jù)點(diǎn)(例如,線性方程組的向量解的元素)。在解碼任何給定指令時(例如,用于處理多個數(shù)據(jù)點(diǎn)),其后的兩條指令可以被檢查,如果可能,它們被發(fā)出以使得第一條指令可以在U流水線202中執(zhí)行而第二條指令在V流水線204中執(zhí)行。如果不能將兩條指令配對,那么下一條指令可以被發(fā)送到U流水線202,并且沒有指令被發(fā)送到V流水線204(反之亦然)。當(dāng)指令在U流水線202和V流水線204中執(zhí)行時,它們的行為與它們被順序執(zhí)行時是相同的。處理器109(圖1)的微結(jié)構(gòu)可以包括以下幾級例如指令預(yù)取210、取指令212、指令解碼、配對和派遣214、地址生成216、操作數(shù)讀取和執(zhí)行218以及寫回220。指令解碼邏輯以每時鐘周期兩條指令的速率進(jìn)行解碼、調(diào)度和發(fā)出指令,在其它實(shí)施例中可以使用不同的速率。
該LSSLE可以表示為例如矩陣形式(例如,通過Ax=b表示,其中A是nxn矩陣,b和x是nx1向量)。當(dāng)該LSSLE通過離散化(例如PDE的)生成時,矩陣A的維數(shù)依賴于使用的離散點(diǎn)數(shù)目。離散點(diǎn)的數(shù)目可以依賴于a)數(shù)值解法的固有精確度,b)要求的精確度,以及c)用于求解LSSLE的數(shù)字處理的收斂。
由于PDE微分算子的離散化,表示LSSLE的矩陣A通常是稀疏的(例如,具有大量的0項(xiàng))。例如,應(yīng)用于泊松方程uxx+uyy=f(x,y)的中心差分離散方法,可以生成每行僅僅具有4個非零項(xiàng)的矩陣。PDE描述運(yùn)動估計(jì)可以例如是uxx+uyy+a*u+b*v=f(x,y);vxx+vyy+b*u+c*v=g(x,y)(例如,其中u和v分別是在x和y方向上的運(yùn)動)。應(yīng)用于運(yùn)動估計(jì)PDE的相同離散方法可以為例如 其中N(i)是i的空間臨近。表示該離散化的矩陣LSSLE每行可以僅有6個非零項(xiàng)。
找到LSSLE的數(shù)值解包括解線性方程,例如Ax=b,其中A是nxn矩陣,b和x是nx1向量。線性方程可以使用各種方法來解,包括因數(shù)分解和迭代方法。然而,當(dāng)解LSSLE時,因數(shù)分解方法比迭代方法需要特別多的計(jì)算工作和時間。因而,迭代方法通常是優(yōu)選的。應(yīng)該意識到,根據(jù)本發(fā)明的實(shí)施例,因數(shù)分解方法和/或因數(shù)分解和迭代方法的組合也可以用于解LSSLE。
迭代方法可以用于解線性方程Ax=b。矩陣A的項(xiàng)可以用aij表示,其中1≤i,j≤n,x和b的項(xiàng)分別由xr和br表示,其中1≤r≤n。矩陣A可以被編碼來有效率地存儲于例如圖1中的主存儲器104、ROM 106和/或數(shù)據(jù)存儲器107,但也可存儲于其它地方。
為了描述用術(shù)語“稀疏”和“大”表征的非限制性的實(shí)施例,考慮幀頻轉(zhuǎn)換問題,其被由nxn矩陣A表示的LSSLE定義,其中n等于65536。該矩陣A可以具有65536x65536維,對應(yīng)于4294967296個單精度(例如32位)項(xiàng)(例如,大約17000兆字節(jié))。這種矩陣可以被認(rèn)為是“大”的。當(dāng)矩陣A的行(例如65536行)中的每個具有相當(dāng)少的非零項(xiàng)時(例如6個或其它小數(shù)目的非零項(xiàng)用于運(yùn)動估計(jì)PDE),矩陣A可以被認(rèn)為是“稀疏”的。因此,有效編碼的矩陣A可以具有例如327680個非零項(xiàng)(例如大約1.3兆字節(jié))。也可以使用其它數(shù)目和維數(shù)。
處理器109(圖1)可以使用迭代方法求解LSSLE,例如,以對解x的初始估計(jì)開始,其表示為x(0),具有用xr(0)表示的項(xiàng)。在每個相繼的迭代(k+1)中,新的解估計(jì)值x(k+1)可以遞歸地從先前的解估計(jì)值x(k)推導(dǎo)出。當(dāng)觀察到估計(jì)值的收斂時,該迭代過程可以結(jié)束。例如,當(dāng)度量例如(x(k+1)-x(k))的L2范數(shù)變得小于某個預(yù)定的閾值時,便可以觀察到收斂。例如,L2范數(shù)可以定義為其中n可以是向量x的長度。可以使用其它收斂的度量和/或結(jié)束處理的方式。
用于求解LSSLE的一種迭代方法是雅可比(Jacobi)方法。在雅可比方法中,解估計(jì)值xi(k+1)可以被遞歸地定義,例如,通過如下的方程(1) 在雅可比方法中,nxn矩陣A可以乘以nx1解估計(jì)值向量x(k)來生成新的nx1解估計(jì)值向量x(k+1)。該乘法過程典型地用每個新的解估計(jì)值向量重復(fù),直到觀察到新和舊估計(jì)值的收斂。例如,當(dāng)L2_NORM(x(k+1)_x(k))<ε,對于一些預(yù)定的較小的ε>0成立時,會發(fā)生收斂。該收斂解估計(jì)值向量可以是LSSLE的解向量。因此,使用雅可比方法求解LSSLE的計(jì)算開銷可以是“迭代次數(shù)*n2(γ)”,其中“迭代次數(shù)”是進(jìn)行迭代的次數(shù),γ是雅可比方法的乘和加的計(jì)算開銷。盡管雅可比方法可以用于求解LSSLE,但該方法一般需要相對大量的迭代次數(shù)以獲得具有期望精確度的收斂(例如,對于非常小的ε>0)。
其它方法,例如高斯-塞得爾方法(GS)和它的變形,逐次超松馳(SOR),被發(fā)展來求解LSSLE,其與雅可比方法相比使用相對少的迭代,同時具有相同的精度。
該GS方法部分遵循雅可比方法的處理,其迭代地用nx1解估計(jì)值向量x(k)乘以nxn矩陣A,直到獲得估計(jì)值的收斂。然而,該GS方法與雅可比方法的不同之處在于解估計(jì)值向量如何被定義。該GS方法使用最近計(jì)算的向量的項(xiàng)或坐標(biāo)值遞歸地定義解估計(jì)值向量x(k)。例如xi(k+1)可以依據(jù)xj(k+1)(j=1,2,...(i-1))和xj(k)(j=i,i+1,...,n)來定義。一般地,與雅可比方法和其它類似方法相比,這個關(guān)系改進(jìn)了收斂率。該GS方法遞歸地定義估計(jì)值xi(k+1),例如通過如下的方程式(2) 因?yàn)榫仃嘇是稀疏的,具有大部分的零aij值,所以總和
和
中的每個一般僅涉及少量的項(xiàng)。
盡管與雅可比方法相比,該GS和SOR方法一般加快了估計(jì)解值的收斂,但該GS和SOR方法可能導(dǎo)致其它問題。例如,該GS和SOR方法可以使用x的最近計(jì)算的項(xiàng)來更新當(dāng)前的求解估計(jì)值,并可以因此被稱為“連續(xù)的”。例如,在方程式(2)中,xi(k+1)依賴于在同一迭代中計(jì)算的x的值(例如,在j<i時的求和項(xiàng)中)。因此,xi(k+1)的值依賴于在向量x中它的鄰接項(xiàng)(例如,xi-1(k+1)),其在同一(例如k+1)迭代期間被計(jì)算。在GS方法中的這種依賴關(guān)系使得不能并行計(jì)算向量x的元素,這極大地限制了求解LSSLE的速度。例如,為了生成向量x中的項(xiàng)(例如xi(k+1)),應(yīng)用一般會進(jìn)行等待,直到結(jié)束生成向量x中的先前的或相鄰的項(xiàng)(例如xi-1(k+1))之后。例如,該GS方法不可以被同時應(yīng)用到x的連續(xù)的項(xiàng)上(例如xi和xi+1)。
本發(fā)明的實(shí)施例可以包括按照與向量中坐標(biāo)元素的排列順序不同的順序,通過相同向量的其它項(xiàng)(例如,在當(dāng)前迭代k中計(jì)算的),迭代地或遞歸地定義x的每個有序的坐標(biāo)元素或項(xiàng)xi(k)。該其它項(xiàng)可以是在向量順序中的非鄰接項(xiàng)xi(k)。因此,可以按照與向量中坐標(biāo)元素的排列順序不同的順序來更新x中的每個項(xiàng)xi(k)的值。根據(jù)GS方法(例如,定義在方程式(2)中),項(xiàng)xi(k)獨(dú)立于其它非鄰接項(xiàng)。因此,項(xiàng)xi(k)和它的其它非鄰接項(xiàng)被并行地同時更新。因此,根據(jù)本發(fā)明的實(shí)施例,更新項(xiàng)(例如使用GS方法)不需要等待向量中連續(xù)排列的或鄰接的項(xiàng)的更新。
本發(fā)明的實(shí)施例提供了方法,用于重排向量x的項(xiàng)的順序,以生成新的向量x’,以使得對于x的每個項(xiàng),在初始順序中的初始鄰接項(xiàng)被移動到新排序中的不同的非鄰接位置。因此,初始的連續(xù)項(xiàng)(例如向量x的xi和xi+1)在向量x’中被分離(例如,現(xiàn)在處于非鄰接位置)。因?yàn)樵贕S方法中(例如根據(jù)方程式(2))求解向量的每個坐標(biāo)項(xiàng)依賴于它的鄰接項(xiàng),那么通過移動初始鄰接項(xiàng)到非鄰接位置,在新向量x’中的項(xiàng)不再依賴于目前的鄰接項(xiàng)。因此,對于新向量的兩個或更多個鄰接項(xiàng)中的每一個,例如向量x’的項(xiàng)(例如x’i(k+1))和新的鄰接項(xiàng)(例如x’i-1(k+1)),可以通過使用遞歸地定義它們的相應(yīng)的移動后的非鄰接項(xiàng)更新其遞歸定義來同時或并行地求解。
例如,常規(guī)的GS方法(例如根據(jù)方程式(2))可以應(yīng)用于向量x中的項(xiàng)(例如x4)。該結(jié)果一般依賴于x的最近計(jì)算的項(xiàng)(例如x3),因此必需等待前面鄰接項(xiàng)的處理。重排算法可以用于分離初始鄰接的項(xiàng)(例如x3,x4,x5)。在一個實(shí)施例中,在x中初始鄰接項(xiàng)(例如x4)的那些項(xiàng)(例如x3和x4)在x’中被重排為非鄰接項(xiàng)。在新向量x’中的項(xiàng)(例如x4)可以具有其不依賴(例如根據(jù)方程式(2))的新的鄰接值(例如重排的向量x’中的序列x1,x4,x8中的x1和x8)。因此,GS方法(例如由方程式(2)定義的)可以同時應(yīng)用于x’中的新的鄰接項(xiàng)(例如x1,x4,x8)。x’中每個重排的鄰接項(xiàng)(例如x1,x4,x8)可以依賴于x’的最近計(jì)算的項(xiàng)(例如分別為x0,x3,x7)進(jìn)行求解(例如根據(jù)方程式(2))。因?yàn)橹匦屡帕辛隧?xiàng),所以x’的這些最近計(jì)算的項(xiàng)(例如x0,x3,x7)不再與依賴它們的項(xiàng)(例如分別為x1,x4,x8)相鄰。因此,為了求解每一鄰接項(xiàng)(例如x1,x4,x8),該求解方法不必等待其它鄰接項(xiàng)的解。
在一個實(shí)施例中(例如圖3所示),向量x被轉(zhuǎn)換成對應(yīng)的第一網(wǎng)格或矩陣(例如圖3中的矩陣310),其可以被稱為映射矩陣。該第一網(wǎng)格或矩陣的元素被重排為對應(yīng)于新向量x’的第二網(wǎng)格或矩陣(例如圖3中的矩陣340)。該重排可以被執(zhí)行,以使得對于第一網(wǎng)格或矩陣的每個項(xiàng),在初始順序中的初始鄰接項(xiàng)被移動到不同的非鄰接位置。
在一個實(shí)施例中,對于向量到映射矩陣的映射方式和映射矩陣到重排后的映射矩陣的重新排列的方式,處理向量元素的順序可以不同,其中映射矩陣的鄰接元素在重排后的映射矩陣中是非鄰接的。
對于具有第一順序的元素的向量x和具有第二順序的元素的向量x’,本領(lǐng)域的技術(shù)人員可以理解,在向量x’的連續(xù)元素上的操作等同于根據(jù)第二順序在向量x的元素上的操作。該向量x可以在不使用或不引用鄰接元素的情況下被重新排序。例如,重排項(xiàng)可以等同于定義非平凡圖或?qū)?xiàng)的引用。例如,以非連續(xù)或交替順序操作或計(jì)算向量項(xiàng)可以等同于重新排列。例如,項(xiàng)自身不必移動或重新排列。因此,在一些實(shí)施例中,向量的元素可以按照不同于向量順序的順序無序地操作,其按照與元素出現(xiàn)在向量中的順序不同的順序進(jìn)行操作。元素的組可以在同時被操作。
參考圖3,其示意性地示出了從具有初始順序的向量x到具有新順序的向量x’的項(xiàng)的重排。數(shù)據(jù)結(jié)構(gòu)或矩陣310可以表示具有初始順序的向量x。例如,向量x的項(xiàng)可以充滿矩陣310的坐標(biāo),行接行(如圖所示),列接列,或使用其它順序。矩陣310中的項(xiàng)300(例如x10或向量x的第10項(xiàng))可以具有8個鄰接項(xiàng),例如,包括4個正對的項(xiàng)320(例如與項(xiàng)300相鄰且位于相同行或相同列上)和4個對角項(xiàng)330(例如與項(xiàng)300相鄰但是位于不同的行和列上)?;蛘?,除了正對和對角項(xiàng)320和330外,其它項(xiàng)可以被認(rèn)為是相鄰的。
數(shù)據(jù)結(jié)構(gòu)或矩陣340可以表示或?qū)?yīng)于具有重排順序的向量x’。根據(jù)該重排順序,矩陣340中的項(xiàng)300(例如對應(yīng)于矩陣310中的第10項(xiàng))可以與初始鄰接項(xiàng)分離。例如,以矩陣310的初始順序排列的項(xiàng)(例如第6、9、11和14項(xiàng)和/或第5、7、13和15項(xiàng))可以在矩陣340的新順序中與項(xiàng)300不再相鄰。初始順序的鄰接項(xiàng)可以在重排順序中從項(xiàng)300移開或隔開一段距離(例如,由參數(shù)S定義,本文參照重排方程式(3)進(jìn)行描述)。矩陣340中的項(xiàng)300可以具有新的鄰接項(xiàng),例如,與正對項(xiàng)320和/或?qū)琼?xiàng)330不同的正對項(xiàng)350和對角項(xiàng)360。
例如,一旦向量已經(jīng)在矩陣340中被重排,就使得每個項(xiàng)300被從初始鄰接項(xiàng)(例如正對項(xiàng)320和/或?qū)琼?xiàng)330)分離,那么GS方法可以被并行地應(yīng)用到重排向量x’的新鄰接項(xiàng)(例如正對項(xiàng)350和/或?qū)琼?xiàng)360)。例如,為了求解方程式Ax’=b的LSSLE,nxn矩陣A可以乘以重排后的nx1向量x’(例如,或者乘表示向量x’的nxm矩陣340)。因此,求解LSSLE的計(jì)算步驟可以類似于雅可比方法的步驟(例如,使用矩陣乘法同時處理向量的多個項(xiàng)),而解的收斂率類似于GS方法的收斂率(例如,基于最近的計(jì)算的解值)。因此,雅可比方法和GS方法各自的優(yōu)勢均被實(shí)現(xiàn)??梢允褂闷渌蛄?、矩陣或數(shù)據(jù)結(jié)構(gòu)類型。可以使用其它重排方案。
可以理解,每個項(xiàng)可以具有其它數(shù)目的鄰接項(xiàng)或其它鄰接項(xiàng)定義。例如,排列在矩陣310和340對角上的項(xiàng)可以具有2個正對項(xiàng)320和1個對角項(xiàng)330。排列在矩陣310和340邊緣上(且非對角)的項(xiàng)可以具有3個正對項(xiàng)320和2個對角項(xiàng)330。在另一實(shí)施例中,不需要使用向量的矩陣表示。取而代之,初始的和重排后的向量x和x’本身可被使用,矩陣310和340可以被認(rèn)為是一維的(例如,等同于向量x和x’本身)。在這個例子中,對于1xn向量,位于向量邊緣的項(xiàng)(例如x0和xn-1)可以具有1個鄰接項(xiàng),而剩余所有其它項(xiàng)(例如x1和xn-2)可以具有2個鄰接項(xiàng)。
可以理解,盡管描述了重排或移動項(xiàng),但是本發(fā)明的實(shí)施例包括重排或移動項(xiàng)的派生物。例如,表示重排后的向量的矩陣可以被布置為簡化行階梯形矩陣、正規(guī)矩陣、簡化或拆分為上三角矩陣、下三角矩陣、對角矩陣和/或其它變形。重排的或移動的項(xiàng)可以是源自初始項(xiàng)的項(xiàng)(例如,不是復(fù)制)。
從初始順序到重排順序的向量中的項(xiàng)的移動可以在圖3中用箭頭表示。注意該移動是數(shù)學(xué)抽象,其可以由映射、算法或方程式(例如,本文描述的重排方程式(3))來定義。在另一實(shí)施例中,重排項(xiàng)可以等同于定義交替映射或?qū)?xiàng)的引用。例如,不必移動或重排項(xiàng)本身。例如,決定以什么順序操作或計(jì)算向量的項(xiàng)可以等同于重新排列。
操作元素的順序可以由處理器109(圖1)確定,由執(zhí)行單元130(圖1)執(zhí)行,和/或被存儲為命令或一組指令(例如在圖1的高速緩存層次結(jié)構(gòu)160、主存儲器104、ROM 106、數(shù)據(jù)存儲設(shè)備或上述組合中)?;蛘?,向量元素的重新排列或元素被處理的順序可以是一組被存儲和取出用于執(zhí)行的指令所固有的。例如,處理過程可以被預(yù)置來首先操作某些項(xiàng)(例如,項(xiàng)的組),然后其它項(xiàng),依此類推,其中上述順序與向量中元素排列的順序并不對應(yīng)。例如,第一組的多個(例如4或8個)相互不連續(xù)的項(xiàng)可以被打包進(jìn)第一指令,然后第二組的多個(例如4或8個)相互不連續(xù)的項(xiàng)可以被打包進(jìn)第二指令,依此類推。
算法可以被應(yīng)用于向量x來重排項(xiàng),以形成新的向量x’。例如,算法可以按如下方式(例如,以SSE變量示范)進(jìn)行。向量x可以被存儲為具有R行C列的矩陣310。用于將R*C向量x重排為新的或重排后的向量x’,(其具有項(xiàng)x’(j),其中0≤j≤R*C-1,)的重排方程可以例如
參數(shù)S可以是初始向量x的項(xiàng)x(j)和x(j+1)之間的距離(例如,在x’中)。參數(shù)S的選擇可以影響處理器109(圖1)(例如SIMD)流水線的效率和吞吐量,并可以被選擇來優(yōu)化這些特征。例如,S的參數(shù)值可以是8。例如,對于足夠大的矩陣310,參數(shù)S的值為4可以是足夠的來填充系統(tǒng)100(圖1)的流水線以達(dá)到占滿吞吐量。其它值也可以被使用。
本領(lǐng)域技術(shù)人員可以理解,不是必須使用向量的矩陣表示。作為替代,可以使用向量本身。
參考圖4A和4B,其分別示出了表示具有初始順序的向量x的矩陣400和表示具有新順序的向量x’的矩陣410。可以根據(jù)本文描述的重排方程執(zhí)行項(xiàng)的重排。在該例子中,參數(shù)S為3。
通過在新向量x’中重排項(xiàng),每個項(xiàng)可以具有獨(dú)立于它的鄰接項(xiàng),因此隨后可以并行處理。在一個實(shí)施例中,對于項(xiàng)xi,在向量x中初始鄰接于xi且在重排后的向量x’中不鄰接于xi的項(xiàng)的數(shù)目是可以與項(xiàng)xi并行處理的項(xiàng)的數(shù)目(例如,使用GS方法)。
在一個實(shí)施例中,并行處理算法和/或硬件可以用于并行地處理鄰接項(xiàng)。例如,處理器109(圖1)可以并行處理重排后的向量x’的兩個或更多鄰接項(xiàng),例如,使用SIMD操作。
并行處理算法可以用于通過將nxn矩陣A乘以重排的nx1向量x’,來求解定義為Ax=b的LSSLE。例如,一個實(shí)施例可以使用SSE指令集140(圖1)來并行執(zhí)行4個數(shù)據(jù)點(diǎn),另一實(shí)施例可以使用AVX指令集140(圖1)來并行執(zhí)行8個數(shù)據(jù)點(diǎn)??梢允褂闷渌线m的打包、SIMD或并行處理指令集或方法。例如,可以使用指令集140(圖1)來并行地執(zhí)行16個數(shù)據(jù)點(diǎn)。在一個實(shí)施例中的向量x’可以被重新排列,以使得對于每個項(xiàng),x的至少4個初始鄰接項(xiàng)在x’中是非鄰接的,以并行地執(zhí)行4個獨(dú)立的數(shù)據(jù)點(diǎn)。在另一個實(shí)施例中的向量x’可以被重新排列,以使得對于每個項(xiàng),x的至少8個初始鄰接項(xiàng)在x’中是非鄰接的,以便并行地執(zhí)行8個獨(dú)立的數(shù)據(jù)點(diǎn)。
本文使用偽代碼描述實(shí)施例。可以使用其它編程代碼、步驟、排序或步驟、編程語言、指令集類型和/或最小數(shù)目的非鄰接項(xiàng)。
下列的偽代碼描述了實(shí)施例,其通過使用多個(例如4個)鄰接值(例如,保存在xmm1-xmm4中的4×4=16個項(xiàng))來使用SSE指令并行地處理重排后的向量x’的多個(例如4個)數(shù)據(jù)點(diǎn)中的每一個。向量x’可以具有一順序,其中每個項(xiàng)的多個(例如4個)鄰接值(例如,保存在xmm1-xmm4中的數(shù)據(jù)點(diǎn))是相互獨(dú)立的。該“內(nèi)核”,KERNEL-SSE,可以描述并行處理向量x’的多個(例如4個)獨(dú)立項(xiàng)。該內(nèi)核可以被調(diào)用n/4次,以執(zhí)行“向量與矩陣”的乘法,例如,根據(jù)方程Ax’=b。可以使用對應(yīng)于數(shù)據(jù)點(diǎn)(例如,保存在xmm5-xmm8中的4×4=16個項(xiàng))的矩陣A的系數(shù)項(xiàng)。該內(nèi)核可以用來解泊松方程(例如,其中矩陣的每行可以有四個非零項(xiàng))。在其它實(shí)施例中,可以并行處理數(shù)量不是4個的項(xiàng)。
偽代碼可以例如以如下方式處理 KERNEL-SSE ERR_XMM may hold the the L2norm((x(k+1)-x(k))2)which may indicate the convergence of x. ERR_XMM may be initially set to 0,and the value thereof may be updated, for example,when KERNEL is invoked. xmm0 may hold 4 entries ofb vector(e.g.,where Ax=b). xmm1-xmm4 may hold 4×4=16 entries of the current value of the estimated solution vector x.These values may be the neighbors of estimated value of x,for example,calculated by PDE discretization. xmm5-xmm8 may hold 4×4=16 entries of the matrix A(e.g.,the coefficient values of A). xmm9 may hold 4 entries of the newly computed approximation for x at output. ERR_XMM may be updated. NotationFor each j=0,1,2,... xmmj may hold a plurality(e.g.,4 or 16)of entries.These 4 entries of xmmj may be distinguished by the following notationxmmj[3],xmmj[2],xmmj[1],xmmj
. The KERNEL may compute the following xmm10=xmm9 xmm9=xmm1*xmm5+xmm2*xmm6+xmm3*xmm7+xmm4*xmm8+xmm0 ERR_XMM=(xmm10[3]-xmm9[3])2+(xmm10[2]-xmm9[2])2+(xmm10[1]- xmm9[1])2+(xmm 10
-xmm9
)2 Pseudo-code SSE 1.Load xmm1,xmm2,xmm3,xmm4//load values of“neighbors”of x 2.Load xmm5,xmm6,xmm7,xmm8 //load matrix coefficients 3.Load xmm0//load b values 4.Load xmm9//load current value of x 5.MOVPS xmm10,xmm9//store old value ofx 6.MULPS xmm1,xmm5 //packed multiplications 7.MULPS xmm2,xmm6 //packed multiplications 8.MULPS xmm3,xmm7 //packed multiplications 9.MULPS xmm4,xmm8 //packed multiplications 10.ADDPS xmm1,xmm2//packed addition 11.ADDPS xmm3,xmm4//packed addition 12.ADDPS xmm1,xmm3//packed addition 13.ADDPS xmm1,xmm0//packed addition 14.SUBPS xmm10,xmm9 //L2norm calculation(subtraction) 15.MULPS xmm10,xmm10 //L2norm calculation(squaring) 16.ADDPS ERR_XMM,xmm10//L2norm calculation(updating xmm9) 17.Store xmm1 當(dāng)然這些指令只是作為例子提供。本發(fā)明的實(shí)施例可以使用其它具體形式的指令。在KERNEL-SSE被調(diào)用n/4次后,對于當(dāng)前的迭代,向量x’的所有項(xiàng)都已經(jīng)計(jì)算了,且ERR_XMM保留與上次迭代的差的L2范數(shù)。如果L2范數(shù)值小于預(yù)先計(jì)算的值或閾值,則處理可以停止。在最近的迭代中計(jì)算的x’的值可以被用作最終結(jié)果?;蛘撸梢允褂脤?yīng)于x’的最近迭代值的x的值(例如,通過“解重排”確定或通過使用反向重排方程來將x’反向映射到x來確定)作為最終結(jié)果。
向量重排可以應(yīng)用于使用其他步驟、處理和/或方法來解方程的系統(tǒng)中。
一個實(shí)施例的每次迭代或KERNEL-SSE的計(jì)算開銷可以匯總為例如10次加載,1次存儲,5次MULPS和6次ADDPS。
可以使用類似的內(nèi)核來求解運(yùn)動估計(jì)方程,但是一般需要并行處理向量的8個項(xiàng)(例如,足夠快地找到解以生成“平滑質(zhì)量視頻”)。執(zhí)行相應(yīng)的運(yùn)動估計(jì)內(nèi)核(例如,對于向量中相同數(shù)目的項(xiàng))的計(jì)算開銷可以匯總為例如11次加載,1次存儲,6次MULPS和7次ADDPS。
下列的偽代碼描述了一實(shí)施例,其通過使用多個(例如8個)鄰接值(例如,保存在ymm1-ymm4中的8×8=64項(xiàng))來使用(例如AVX)指令并行地處理重排后的向量x’的多個(例如8個)數(shù)據(jù)點(diǎn)中的每一個。向量x’可以具有一順序,其中每個項(xiàng)的多個(例如8個)鄰接值(例如,保存在ymm1-ymm4中的數(shù)據(jù)點(diǎn))是相互獨(dú)立的。該“內(nèi)核”,KERNEL-AVX,可以描述并行處理向量x’的多個(例如8個)獨(dú)立的項(xiàng)。該內(nèi)核可以被調(diào)用n=8次以執(zhí)行“矩陣與向量”的乘法,例如,根據(jù)方程Ax’=b??梢允褂脤?yīng)于數(shù)據(jù)點(diǎn)(例如,保存在ymm5-ymm8中的8×8=64項(xiàng))的矩陣A的系數(shù)項(xiàng)。
該偽代碼可以以如下方式處理 KERNEL-AVX ERR_XMM may hold the L2norm((x(k+1)-x(k))2),which may indicate the convergence of x. ERR_XMM may be initially set to 0,and the value thereof may be updated, for example,when KERNEL is invoked. ymm0 may hold 8 entries of the b vector(e.g.,where Ax=b). ymm1-ymm4 may hold 8×8=64 entries ofthe current value of the estimated solution vector x.These values may be the neighbors of estimated value of x,for example,calculated by PDE discretization. ymm5-ymm8 may hold 8×8=64 entries ofthe matrix A(e.g.,the coefficient values). ymm9 may hold 8 entries of the value of the solution x at the input. ERR_YMM may be updated. NotationFor each j=0,1,2,...,ymmj may hold a plurality(e.g.,8 or 64)of entries.The 8 entries of ymmj may be distinguished by the following notationymmj[7],ymmj[6],ymmj[5],ymmj[4],ymmj[3],ymmj[2], ymmj[1],ymmj
. The KERNEL may compute the following ymm10=y(tǒng)mm9 ymm9=y(tǒng)mm1*ymm5+ymm2*ymm6+ymm3*ymm7+ymm4*ymm8+ymm0 ERR_YMM=(ymm10[7]-ymm9[7])2+(ymm10[6]-ymm9[6])2+(ymm10[5]- ymm9[5])2+(ymm10[4]-ymm9[4])2+(ymm10[3]-ymm9[3])2+(ymm10[2]-y mm9[2])2+(ymm10[1]-ymm9[1])2+(ymm10
-ymm9
)2; Pseudo-code for the instruction set for processing 8 data points in parallel 1.Load ymm1-ymm4//load current value of x neighbors 2.Load ymm5-ymm8//load matrix coefficients 3.Load ymm0 //Load b values 4.Load ymm9 //load current value of x 5.ymm10=y(tǒng)mm9 6.MULPS ymm1,ymm1,ymm5//packed multiplications 7.MULPS ymm2,ymm2,ymm6//packed multiplications 8.MULPS ymm3,ymm3,ymm7//packed multiplications 9.MULPS ymm4,ymm4,ymm8//packed multiplications 10.ADDPS ymm1,ymm1,ymm2 //packed addition 11.ADDPS ymm3,ymm3,ymm4 //packed addition 12.ADDPS ymm1,ymm1,ymm0//packed addition 13.ADDPS ymm1,ymm1,ymm3//packed addition 14.SUBPS ymm10,ymm10,ymm9 //L2norm calculation(subtraction) 15.MULPS ymm10,ymm10,ymm10 //L2norm calculation(squaring) 16.ADDPS ERR_YMM,ERR_YMM,ymm10 //L2norm calculation (update ymm10) 17.Store ymm9 在KERNEL-AVX被調(diào)用n/8次后,對于當(dāng)前的迭代,向量x’的所有項(xiàng)都已經(jīng)計(jì)算了,且xmm9可以保存與上次迭代的差的L2范數(shù)。如果L2范數(shù)值小于預(yù)先計(jì)算的值或閾值,則處理可以停止,并且在最近的迭代中計(jì)算的x’的值(例如,或?qū)?yīng)于其的x的值)可以被用作最終結(jié)果。
一個實(shí)施例的每次迭代或KERNEL-AVX的計(jì)算開銷可以匯總為例如10次加載,1次存儲,5次MULPS和6次ADDPS。
通過使用用于并行處理8個數(shù)據(jù)點(diǎn)的指令集140(圖1)來代替SSE指令集140(圖1)(例如,并行處理4個數(shù)據(jù)點(diǎn)),處理器109(圖1)可以使用同樣數(shù)目的指令(例如,以及延遲)處理大約兩倍的數(shù)據(jù)。
本發(fā)明的實(shí)施例可以用于求解LSSLE以估計(jì)運(yùn)動,以便轉(zhuǎn)換幀頻。例如,考慮一視頻播放器或計(jì)算機(jī),其在刷新率為例如每秒60幀(60fps)的監(jiān)視器或顯示屏上播放或輸出初始頻率為例如每秒24幀的視頻文件。為了轉(zhuǎn)換文件以在所述刷新率進(jìn)行播放,以使得在相同的流逝時間內(nèi),設(shè)備以第一速率輸出,顯示屏以第二速率輸出,幀轉(zhuǎn)換應(yīng)用程序(例如,運(yùn)動估計(jì)器)可以生成另外的fps(例如,48fps)。例如,對于每個一秒的時間周期,24幀進(jìn)入根據(jù)本發(fā)明的實(shí)施例的處理器過程并輸出60幀。例如,因?yàn)樾聨械囊恍┦桥f幀的拷貝,所以可以生成少于60的額外fps。例如,如果每個幀具有n2個像素,其中n=256,那么該應(yīng)用程序可以平均每秒生成48個LSSLE的解。在一個實(shí)施例中,LSSLE可以安排為矩陣形式(例如,Ax=b)。
在常規(guī)的GS方法中,可以通過一次一項(xiàng)或依次用向量x中的每一項(xiàng)乘矩陣A來生成LSSLE的每個解。本發(fā)明的實(shí)施例可以通過并行地或同時地用向量x’的兩個或多個(例如獨(dú)立的)項(xiàng)乘矩陣A來生成LSSLE的每個解。
每個LSSLE的解可以被生成,直到獲得了解(例如x或x’)的收斂。例如,如果在GS方法的10次迭代內(nèi)獲得了收斂,則該應(yīng)用程序會執(zhí)行10次“矩陣與向量”的乘法,其每秒需要10*6n2=3932160次乘法和10*4n2=2621440次加法(例如,如果矩陣A具有6個非零項(xiàng)且每一幀具有n2=2562個像素)。幀轉(zhuǎn)換應(yīng)用程序會具有另外的計(jì)算開銷,例如,準(zhǔn)備矩陣A(例如,通過對角元素劃分每個矩陣)。根據(jù)本發(fā)明的實(shí)施例,通過并行求解多個(例如,4或8個)數(shù)據(jù)點(diǎn),可以比使用常規(guī)方法更快地生成LSSLE的解。與常規(guī)方法相比,根據(jù)本發(fā)明實(shí)施例的播放器操作可以播放更“平滑”的視頻,盡管其它的或不同的益處也可以獲得。
本發(fā)明的實(shí)施例在求解LSSLE上相比于其它常規(guī)方法具有優(yōu)勢,例如本領(lǐng)域所知的“紅-黑”GS方法、“zig-zag掃描”方法以及“斑馬線松弛”方法。例如,紅-黑方法使用的迭代次數(shù)一般是標(biāo)準(zhǔn)GS方法的2-3倍。另外,該紅-黑方法一般在每次迭代之前和/或之后執(zhí)行打包和/或解包處理,因此,不能輕易地被集成到光流或多重網(wǎng)格結(jié)構(gòu)中。例如,zig-zag掃描方法,類似于紅-黑方法,一般在每次迭代之前和/或之后執(zhí)行打包和/或解包處理,因此會涉及大量的開銷并且不易實(shí)現(xiàn)。zig-zag掃描方法一般不適于多標(biāo)度結(jié)構(gòu)。例如,斑馬線松弛方法,類似于紅-黑方法,一般使用的迭代次數(shù)是GS方法的2-3倍。
相反,本發(fā)明的實(shí)施例可以使用與GS方法相同次數(shù)的迭代,因此是前面提到的常規(guī)方法的迭代次數(shù)的一半。本發(fā)明的實(shí)施例不必實(shí)現(xiàn)打包和/或解包處理,例如,在每次迭代之前和/或之后。因此,本發(fā)明的實(shí)施例可以被輕易地集成到光流或多重網(wǎng)格或多標(biāo)度結(jié)構(gòu)中。本發(fā)明的實(shí)施例可以使用顯著減少的預(yù)處理和/或處理后工作或開銷(例如,與zig-zag掃描方法相比)。例如,本發(fā)明的實(shí)施例可以為多標(biāo)度和/或多重網(wǎng)格結(jié)構(gòu)使用單個預(yù)處理步驟。相比標(biāo)準(zhǔn)GS方法,使用并行地處理4或8個數(shù)據(jù)點(diǎn)的指令集的本發(fā)明的實(shí)施例求解方程的速度分別是3.5和7倍。
也可以實(shí)現(xiàn)其它的或不同的益處。
盡管本文描述了雅可比和GS方法,本發(fā)明的實(shí)施例可以與任何迭代方法一同使用。迭代方法是通過從初始的猜想和/或估計(jì)開始,連續(xù)尋找解的近似值來解決問題(例如方程或方程組)的方法。例如,牛頓方法、不動點(diǎn)方法、定常迭代法,例如本文描述的雅可比和GS方法或它們的變形、Krylov子空間算法,例如共軛梯度方法(CG)、廣義最小殘量法(GMRES)以及雙共軛梯度方法(BiCG)。其它方法也可以使用。
參考圖5,其是根據(jù)本發(fā)明實(shí)施例的方法的流程圖。該方法實(shí)施例可以被例如圖1中的計(jì)算系統(tǒng)100或其它合適系統(tǒng)使用或?qū)崿F(xiàn)。
在操作500中,系統(tǒng)(例如,圖1的系統(tǒng)100)可以從輸入設(shè)備(例如,圖1中的輸入設(shè)備122)接收具有幀頻的視頻輸入文件,其不同于向輸出設(shè)備(例如,圖1中的顯示設(shè)備121)輸出視頻文件的幀頻。
在操作505,執(zhí)行單元(例如,圖1中的執(zhí)行單元130)可以開始求解由方程式Ax=b定義的線性方程組(例如,LSSLE)。該線性方程組可以定義用于將視頻文件從輸入幀頻轉(zhuǎn)換到輸出幀頻的中間幀。
在操作510,處理器(例如,圖1中的處理器109)可以生成表示線性方程組的系數(shù)的矩陣A,表示該線性方程組的解的第一估計(jì)值的向量x,表示該線性方程組的標(biāo)量值的向量b。該向量x可以包括按順序排列的多個元素(例如,x1,x2,x3,x4,...) 在操作515,處理器可以用向量x乘矩陣A,以使得向量x中的元素可以按照不同于這些元素在向量中的排列順序的順序(例如,x1,x9,x17,x25,...)進(jìn)行相乘。連續(xù)的被乘的項(xiàng)是獨(dú)立的或與鄰接元素分離。例如,根據(jù)GS方法,x1獨(dú)立于x9,x17和x25。因此,向量的多個獨(dú)立元素可以被并行地相乘。在一個實(shí)施例中,該處理器可以使用SIMD指令并行地乘多個連續(xù)元素。
在一個實(shí)施例中,處理器可以實(shí)際重排向量中元素的排列順序,以生成不同的順序(例如,x1,x9,x17,x25,...)。在一個實(shí)施例中,向量的元素可以以矩陣形式被重新排列(例如,圖3中從矩陣310到矩陣340)。在另一實(shí)施例中,處理器可以僅僅無序地計(jì)算向量元素。
在操作520,處理器可以生成線性方程組的解的第二向量估計(jì)值,其中該第二向量估計(jì)值是操作515中相乘的結(jié)果。
在操作525中,處理器可以確定或度量第一和第二向量估計(jì)值之間的差。當(dāng)該第一和第二向量估計(jì)值的差小于預(yù)定量時,處理可以前進(jìn)到操作530。否則該處理可以進(jìn)入操作515,并用第二向量估計(jì)值取代第一向量估計(jì)值。
在操作530,處理器可以設(shè)置LSSLE的解。線性方程組的解可以被設(shè)置為第二向量估計(jì)值。或者,線性方程組的解可以被設(shè)置為第一向量估計(jì)值?;蛘?,線性方程組的解可以被設(shè)置為第一和第二向量估計(jì)值的平均值。
在操作535,處理器可以使用LSSLE的解生成插入幀,從而將至少一段視頻文件從輸入幀頻轉(zhuǎn)換到輸出幀頻。在一個實(shí)施例中,在每對已知幀之間的每個插入幀可以由單獨(dú)的LSSLE描述。在其它實(shí)施例中,多個插入幀可以由相同LSSLE描述。處理過程可以重復(fù)操作505-535,直到每個插入幀已經(jīng)使用表示它的LSSLE被生成。一旦生成了用于將至少一段視頻文件從輸入幀頻轉(zhuǎn)換到輸出幀頻的每個插入幀,處理可以進(jìn)入操作540。
在操作540,輸出設(shè)備(例如,圖1中的顯示設(shè)備121,例如監(jiān)視器)可以以合適的輸出幀頻輸出該視頻文件。
在操作545,存儲器單元(例如,圖1中的主存儲器104、ROM 106、數(shù)據(jù)存儲設(shè)備107,例如DRAM)可以以該輸出幀頻存儲視頻文件。存儲器單元可以存儲矩陣A乘以向量x的結(jié)果(例如,在操作515中的)。
可以使用其它操作或操作序列。
本發(fā)明的實(shí)施例可以包括制品,例如計(jì)算機(jī)或處理器可讀介質(zhì),或計(jì)算機(jī)或處理器存儲介質(zhì),例如存儲器、磁盤驅(qū)動器或USB閃存,用于編碼、包含或存儲指令,該指令被處理器或控制器執(zhí)行時,執(zhí)行本文公開的方法。
描述的實(shí)施例使用方程求解方法以便于視頻解釋。然而,其它實(shí)施例可以在其它環(huán)境中使用上述求解方法,例如電子工程、流體動力學(xué)、其它計(jì)算機(jī)視覺/圖形系統(tǒng),例如光流估計(jì)、超分辨率和圖像降噪。
盡管使用有限數(shù)目的實(shí)施例描述了本發(fā)明,然而應(yīng)該知道,可以構(gòu)造本發(fā)明的許多變形、修改以及其它應(yīng)用。本發(fā)明的實(shí)施例可以包括用于執(zhí)行本文操作的其它裝置。這些裝置可以集成已討論的要素,或可以包括替代部件來執(zhí)行相同的目的。本領(lǐng)域的技術(shù)人員應(yīng)該知道,附加的權(quán)利要求旨在涵蓋落入本發(fā)明實(shí)質(zhì)精神范圍內(nèi)的所有變形或改變。
權(quán)利要求
1、一種方法,包括
用一向量乘一矩陣,其中所述矩陣表示一大型稀疏線性方程組,該大型稀疏線性方程組用于估計(jì)視頻文件的幀之間的運(yùn)動以轉(zhuǎn)換幀頻,所述向量是所述線性方程組的解的第一估計(jì)值,其中,所述向量包括按照一順序排列的多個元素,并且其中,按照與所述元素在所述向量中的排列順序不同的順序用所述向量的元素乘所述矩陣,并且其中,所述向量中的多個元素被并行地相乘;
生成所述線性方程組的解的第二向量估計(jì)值,其中,所述第二向量估計(jì)值是所述乘法的乘積;以及
當(dāng)所述第一和第二向量估計(jì)值的差小于預(yù)定的量時,設(shè)置所述線性方程組的解。
2、如權(quán)利要求1所述的方法,其中,通過使用單指令多數(shù)據(jù)指令集的處理器來乘所述多個元素。
3、如權(quán)利要求1所述的方法,包括重排所述向量的有序的元素,以生成與所述元素的排列順序不同的順序。
4、如權(quán)利要求1所述的方法,包括當(dāng)將視頻文件從輸入幀頻轉(zhuǎn)換到輸出幀頻時,使用所述線性方程組的解生成內(nèi)插入的圖像幀。
5、如權(quán)利要求4所述的方法,包括以顯示器的輸出幀頻在所述顯示器上顯示所述視頻文件。
6、如權(quán)利要求1所述的方法,其中,與所述元素在所述向量中的排列順序不同的順序?qū)?yīng)于所述向量到一映射矩陣的映射以及所述映射矩陣到一重排后的映射矩陣的重排,其中,所述映射矩陣的鄰接元素在所述重排后的映射矩陣中是不鄰接的。
7、一種系統(tǒng),包括
執(zhí)行單元,用于執(zhí)行處理以進(jìn)行如下操作用一向量乘一矩陣,其中,所述矩陣表示一大型稀疏線性方程組,該大型稀疏線性方程組用于估計(jì)視頻文件的幀之間的運(yùn)動以轉(zhuǎn)換幀頻,所述向量是所述線性方程組的解的第一估計(jì)值,其中,所述向量包括按照一順序排列的多個元素,并且其中,按照與所述元素在所述向量中的排列順序不同的順序用所述向量的元素乘所述矩陣,并且其中,所述向量中的多個元素被并行地相乘;生成所述線性方程組的解的第二向量估計(jì)值,其中,所述第二向量估計(jì)值是所述乘法的乘積;并且當(dāng)所述第一和第二向量估計(jì)值的差小于預(yù)定的量時,設(shè)置所述線性方程組的解;以及
動態(tài)隨機(jī)存取存儲器。
8、如權(quán)利要求7所述的系統(tǒng),其中,所述執(zhí)行單元使用單指令多數(shù)據(jù)指令集來執(zhí)行處理,以并行地乘所述多個元素。
9、如權(quán)利要求7所述的系統(tǒng),其中,當(dāng)將視頻文件從輸入幀頻轉(zhuǎn)換到輸出幀頻時,所述處理器使用所述線性方程組的解生成插入的圖像幀。
10、如權(quán)利要求9所述的系統(tǒng),包括一顯示器,以按照所述顯示器的輸出幀頻顯示所述視頻文件。
全文摘要
一種用于用向量乘矩陣的方法、裝置和系統(tǒng),例如,視頻插入(其它應(yīng)用是可預(yù)期的)。該矩陣可以表示大型稀疏線性方程組。該大型稀疏線性方程組可以用于估計(jì)視頻文件的幀之間的運(yùn)動以轉(zhuǎn)換幀頻。向量可以是該線性方程組的解的第一估計(jì)值。可以按照與所述元素在所述向量中的排列順序不同的順序用所述向量的元素乘所述矩陣??梢圆⑿械爻讼蛄恐械亩鄠€元素。線性方程組的解的第二向量估計(jì)值可以是乘法的積。例如當(dāng)?shù)谝缓偷诙蛄抗烙?jì)值的差小于預(yù)定的量時,可以設(shè)置線性方程組的解。其它的實(shí)施例被描述和主張權(quán)利。
文檔編號G09G5/00GK101572771SQ200910137010
公開日2009年11月4日 申請日期2009年4月27日 優(yōu)先權(quán)日2008年4月25日
發(fā)明者A·米亞斯科夫斯基, S·格倫 申請人:英特爾公司