算術邏輯單元的制作方法
【專利摘要】本發(fā)明涉及一種算術邏輯單元ALU,其包括被連接到多個數(shù)據(jù)通道以驅動第一數(shù)據(jù)到數(shù)據(jù)通道的第一路由網格;被連接到數(shù)據(jù)通道以驅動第二數(shù)據(jù)到數(shù)據(jù)通道的第二路由網格。每個數(shù)據(jù)通道包括多個,例如N個,函數(shù)單元,函數(shù)單元具有來自第一路由網格的第一輸入和來自第二路由網格的第二輸入。函數(shù)單元成對地計算在各自的第一輸入上的相應的第一數(shù)據(jù)和在各自的第二輸入上的相應的第二數(shù)據(jù)的函數(shù)。每個數(shù)據(jù)通道包括具有適于從函數(shù)單元接收K′位每字的輸入的縮減單元。縮減單元被配置為執(zhí)行縮減操作,該縮減操作被配置為輸出具有縮減了數(shù)目的J′位每字的輸出結果,其中J′小于N乘以K′。
【專利說明】算術邏輯單元
【技術領域】
[0001 ] 本發(fā)明涉及計算機體系結構。
[0002]相關技術描述
[0003]在近幾年里,基于攝像機的駕駛員輔助系統(tǒng)(DAS)已經投入市場,包括,車道偏離警示系統(tǒng)(LDW)、自動高光束控制系統(tǒng)(AHC)、行人識別、以及前方碰撞預警(FCW)。這些駕駛員輔助系統(tǒng)可以使用從安裝于交通工具中的攝像機捕獲的多個圖像幀中探測到的多個補丁(patch)的實時圖像處理。
[0004]向量處理器或者陣列處理器是執(zhí)行含有對稱之為向量的一維數(shù)據(jù)陣列進行操作的指令的指令集的處理器。比較起來,標量處理器對單個數(shù)據(jù)進行操作。最常用的處理器是標量處理器。
[0005]向量處理器或者陣列處理器——例如執(zhí)行含有對一維數(shù)據(jù)陣列或向量進行操作的指令的指令集的傳統(tǒng)的中央處理單元(CPU)的處理器。相比之下,標量處理器具有對單個的數(shù)據(jù)項進行操作的指令。
[0006]VLIff (超長指令字)數(shù)字信號處理單元含有幾個并行操作的子處理單元。VLIW含有多個指向各種子處理單元的運算代碼,由于每個子單元同時得到其運算代碼,因此允許并行處理。運算代碼是機器語言指令的一部分,其規(guī)定了要執(zhí)行的操作。
[0007]本文所使用的術語“單指令多數(shù)據(jù)”(SMD)指的是具有同時在多個數(shù)據(jù)點上執(zhí)行相同操作的多個處理元件的一類并行計算機。這樣,這種SMD機器利用數(shù)據(jù)級并行性。
【發(fā)明內容】
[0008]各種算術邏輯單元(ALU)可能被提供,其包括連接到多個數(shù)據(jù)通道的第一路由網格,該第一路由網格適于驅動第一數(shù)據(jù)到數(shù)據(jù)通道;連接到數(shù)據(jù)通道的第二路由網格,該第二路由網格適于驅動第二數(shù)據(jù)到數(shù)據(jù)通道。每個數(shù)據(jù)通道包括多個(如,N個)函數(shù)單元,這些函數(shù)單元具有來自第一路由網格的第一輸入和來自第二路由網格的第二輸入。函數(shù)單元可操作為成對地計算各自的第一輸入上的相應的第一數(shù)據(jù)和各自的第二輸入上的相應的第二數(shù)據(jù)的函數(shù)。每個數(shù)據(jù)通道包括縮減單元,縮減單元具有適于從函數(shù)單元接收K'位每字的輸入??s減單元被配置為執(zhí)行縮減操作,縮減操作被配置為輸出具有縮減了數(shù)目的 位每字的輸出結果,其中1·小于N乘以K'。多個數(shù)據(jù)通道可包括N個數(shù)據(jù)通道。全局控制塊可以被配置為控制函數(shù)單元的函數(shù)和控制第一路由網格的第一路由,以及控制第二路由網格的第二路由。函數(shù)可以在第一數(shù)據(jù)的數(shù)據(jù)a與第二數(shù)據(jù)的數(shù)據(jù)b之間被執(zhí)行。函數(shù)可以為:加法a+b、減法a-b、乘法a*b、a和b之間的關系運算、以及差的絕對值ABS (a_b)??s減操作可以包括加法、找出最大值和找出最小值。數(shù)據(jù)通道可以在其中彼此獨立地執(zhí)行各自的計算。
[0009]使用本文所公開的算術邏輯單元,對于線性濾波、矩陣乘法、中值濾波、局部最大值濾波、局部最小值濾波和絕對差值和濾波中的任何一項,可執(zhí)行各種方法。
[0010]各種計算方法可以由算術邏輯單元(ALU)執(zhí)行,包括,第一路由,從而驅動第一數(shù)據(jù)到多個數(shù)據(jù)通道;第二路由,從而驅動第二數(shù)據(jù)到數(shù)據(jù)通道。且在數(shù)據(jù)通道中:(i)成對地計算相應的第一數(shù)據(jù)和相應的第二數(shù)據(jù)的函數(shù)的N個實例,從而輸出具有K'位每字的N個結果。(ii)對N個結果執(zhí)行操作,從而輸出具有縮減了數(shù)目的J'位每字的輸出結果。J'小于N乘以K'。函數(shù)在第一數(shù)據(jù)的數(shù)據(jù)a與第二數(shù)據(jù)的數(shù)據(jù)b之間執(zhí)行。函數(shù)可以為:加法a+b、減法a-b、乘法a*b、a和b之間的關系運算、以及差的絕對值ABS (a-b)。函數(shù)的N個實例被控制以選擇函數(shù),且第一和第二路由被控制。可以避免存儲第一和第二數(shù)據(jù)于ALU中,且可以避免存儲第一和第二數(shù)據(jù)的函數(shù)的中間結果。
[0011]由數(shù)據(jù)通道的N個實例執(zhí)行的計算可以獨立被執(zhí)行。
[0012]當結合附圖進行考慮時,從以下的詳細描述中,上述內容和/或其他方面將會變得明顯。
【專利附圖】
【附圖說明】
[0013]參照附圖,僅僅通過示例的方式,在本文中描述了本發(fā)明,其中:
[0014]圖1和圖2說明的是,根據(jù)本發(fā)明的方面,包括安裝于交通工具中的攝像機或圖像傳感器的系統(tǒng);
[0015]圖3說明的是,根據(jù)本發(fā)明的特征,包括算術邏輯單元的處理器的簡化的系統(tǒng)方框圖;
[0016]圖4顯示的是,根據(jù)本發(fā)明的特征,圖3中所示的算術邏輯單元的更多的細節(jié);
[0017]圖5說明的是,根據(jù)本發(fā)明的特征,作為圖4中所示的算術邏輯單元的部分的數(shù)據(jù)通道;
[0018]圖6顯示的是,根據(jù)本發(fā)明的特征,通過圖4中所示的端口 SRC[M_1]的數(shù)據(jù)的示例性表示;
[0019]圖7A說明的是,根據(jù)本發(fā)明的特征,可以用于實現(xiàn)一維垂直濾波的數(shù)據(jù)的路由的示例。
[0020]圖7B說明的是,根據(jù)本發(fā)明的特征,可以應用于實現(xiàn)一維水平濾波的數(shù)據(jù)的路由的示例。
[0021]圖8A和圖SB說明的是,根據(jù)本發(fā)明的不同特征,可以使用的所執(zhí)行的路由的示例。
[0022]圖9說明的是根據(jù)本發(fā)明的實施方式的通用方法。
【具體實施方式】
[0023]現(xiàn)在將詳細參考本發(fā)明的特征,這些特征的示例在附圖中進行了說明,其中全文中相似的參考數(shù)字指的是相似的元件。以下參照附圖描述了所述特征以解釋本發(fā)明。
[0024]在詳細解釋本發(fā)明的特征之前,要理解的是,本發(fā)明并不限制于其應用于在以下描述中所闡述或附圖中所描述的組件的布置和設計的細節(jié)。本發(fā)明能夠具有其他特征或能夠以各種方式進行實踐或實施。還有,要理解的是,本文所采用的術語和措辭是出于描述的目的,而不應該理解為限制。
[0025]現(xiàn)在參考圖1和圖2,圖1和圖2說明的是根據(jù)本發(fā)明的一個方面的系統(tǒng)16,其包括安裝于交通工具18中的攝像機或圖像傳感器12。圖像傳感器12在向前的方向成像視場,實時提供圖像幀15,且圖像幀15被可能是向量處理器的圖像處理器30所捕獲。向量處理器30可以被用于同時處理圖像幀15和/或并行服務于多個駕駛員輔助系統(tǒng)/應用。使用帶有車載軟件的具體硬件電路和/或存儲器302中的軟件控制算法,可以執(zhí)行駕駛員輔助系統(tǒng)。圖像傳感器12可以是單色的或者黑白的,S卩,沒有分色,或者圖像傳感器12可以是彩色感光的。通過圖2中示例的方式,圖像幀15被用于服務于行人檢測20、交通標志識另|J(TSR)21和前方碰撞預警(FCW)22。向量處理器30可以被用于處理圖像幀15,以探測和識別攝像機12的向前方向的視場的圖像或圖像的部分。
[0026]在某些情況中,在不同的駕駛員輔助應用之間,圖像幀15被劃分,而在其他的情況中,在不同的駕駛員輔助應用之間,圖像幀15被共享。
[0027]雖然本發(fā)明的實施方式是以駕駛員輔助應用為背景而被展示的,但是本發(fā)明的實施方式可以等效地應用于其他實時信號處理應用和/或數(shù)字處理應用,例如通信、機器視覺、音頻和/或語音處理。
[0028]通過引入的方式,本發(fā)明的各個方面是針對通過處理器30的SMD算術邏輯單元(ALU)來增加計算吞吐量,而不必在增加寄存器寬度和存儲帶寬方面支付相應的價錢。
[0029]SIMD指令的最常用的形式對N個輸入對進行操作,且產生N個輸出,如,輸入對的N個和、輸入對的N個積,等等。例如,為了對吞吐量進行平方而使得產生N2個輸出,N2個輸入對被供應。因而,對吞吐量進行平方包含對寄存器大小和局部存儲總線進行平方,達到N2的寬度。對輸入進行平方付出了成本,即使大部分時間實際上僅僅利用了 N2的寬度的一小部分,因為其發(fā)生于輸入大小小于N2。
[0030]因此這在含有保留N個項的寄存器的處理器30中支持一般超過N個輸入對特別是N2個輸入對的SMD指令處理是有利的。一般情況下,實際上可能的是,給出與N成比例的數(shù)目的輸入,以處理與N2成比例的數(shù)目的輸入對,因為N數(shù)目的可能組合的數(shù)量的確成比例于N2。
[0031]利用以上考慮增加計算吞吐量的任何系統(tǒng)是專為一個特定領域定制的。例如,用于復數(shù)相乘的指令、或用于通過在計算機圖形背景中投影矩陣而將坐標向量相乘的指令是SMD指令的示例,SMD指令的確執(zhí)行比SMD處理器接收的輸入量更多的操作。這些指令是定制的,分別用于復數(shù)運算和計算機圖形且允許選擇將被處理的正確的輸入組合。
[0032]各種實施方式中的本發(fā)明包括的系統(tǒng)用于執(zhí)行與N2成比例的數(shù)目的操作,假定輸入的數(shù)目與N成比例且被定制用于嵌入式計算機視覺的需要。很好地映射到這些系統(tǒng)且能夠應用于視覺處理領域的示例算法是:
[0033]——線性濾波(相關/卷積),利用一維(一維)垂直/水平或二維(二維)濾波
[0034]——矩陣乘法(特別是用于對象分類)
[0035]——中值濾波
[0036]—SAD (絕對差值和)濾波(特別是用于圖像視差計算和模板匹配)
[0037]——局部最大值濾波
[0038]以下展示執(zhí)行這些示例算法的方法。
[0039]不像在許多專用于具體領域的SIMD指令的系統(tǒng),在本發(fā)明的實施方式中,指令和支持算法之間沒有一對一的映射。即,一般當發(fā)現(xiàn)像“復數(shù)相乘”或者“投影矩陣乘以坐標向量”的指令時,根據(jù)本發(fā)明實施方式的示例性系統(tǒng)并不具有“執(zhí)行線性濾波”指令或特征,也不具有“進行中值濾波”特征、“執(zhí)行矩陣乘法”特征等等,而是通過具體調度關于輸入數(shù)據(jù)具體部分的更原始的操作來以軟件執(zhí)行各種算法。
[0040]現(xiàn)在參照圖3,圖3說明的是根據(jù)本發(fā)明示例的實施方式的處理器30的簡化了的系統(tǒng)方框圖。存儲器302通過圖像幀總線310輸入多個圖像幀15。處理器30可以包括多個地址生成器單元(AGU) 308,該地址生成器單元(AGU) 308利用存儲器總線331連接到存儲器302。AGU308操作為實時計算圖像幀15的一個或多個窗口的存儲器地址。算術邏輯單元(ALU)320和321 (其可以相同或者可以不同)以及地址生成器308通過獨立的總線從超長指令字(VLIW)指令寄存器322接收指令/命令(從而,允許同時執(zhí)行相關的運算代碼)?;谡诒惶幚淼拇翱诔叽纾珹GU308可以利用信號通過事件線路32向累加器復位單元306通知事件,例如行結束、列結束。ALU320和321包括累加器36,該累加器36當事件信號發(fā)生時,通過累加器復位線路34,經累加器復位單元306,可被實時復位。
[0041]存儲器數(shù)據(jù)從存儲器302下載到寄存器文件355,ALU320/321從寄存器文件355輸入數(shù)據(jù)。從ALU320/321輸出的結果被下載到寄存器文件355中。
[0042]現(xiàn)在參照附圖4,附圖4顯示的是,根據(jù)本發(fā)明的一個特征,圖3中所示的ALU320的更多的細節(jié)。ALU320根據(jù)時鐘在數(shù)據(jù)路徑SRC[0...M_2]336和SRC[0...M_l]334上獨立地通過多通道400被輸入數(shù)據(jù)驅動。
[0043]源操作數(shù)SRC[0...M-2]在數(shù)據(jù)路徑336上被輸入到預處理單元404。數(shù)據(jù)路徑336的每個通道的位數(shù)為:
[0044](M-1) XNXK
[0045]其中,
[0046]N是每個通道400的字數(shù),其一般等于通道400的數(shù)量。
[0047]M是源操作數(shù)的數(shù)量,每個源操作數(shù)帶有N個字。
[0048]K是每個字的位數(shù)。
[0049]預處理單元404的多個輸出連接到各個輸入緩沖器402的輸入。緩沖器402的各自的輸出連接到路由網格A408。路由網格A408輸出O到N-1個數(shù)據(jù)向量,每個向量的范圍為Stl到aN_i,其連接到通道400的各自的輸入端口 A。
[0050]路由網格B412的輸出被輸入到通道400的相關的端口 B。路由網格B412的輸入經數(shù)據(jù)路徑334來自于源操作數(shù)SRC[0...M-1]。路由網格B412的輸出具有O到N-1的數(shù)據(jù)向量,每個向量的范圍從Idci到bN_lt)
[0051]數(shù)據(jù)路徑334的寬度是N個通道400乘以K位每字。通道400的輸出數(shù)據(jù)路徑340提供數(shù)據(jù)給后處理單元410。沿每個輸出數(shù)據(jù)路徑340的每個輸出字的位數(shù)被表示為。輸出數(shù)據(jù)流經寬度為N個通道乘以J位每輸出字的數(shù)據(jù)路徑332。
[0052]全局控制406經過線路338從VLIW322接收控制信號。全局控制406提供用于各個通道400的控制線Ctrlci到Ctrlp1,并提供(沒有顯示的)其他可選的控制線給預處理單元404、后處理單元410和路由網格408和412。
[0053]現(xiàn)在參照圖5,圖5更詳細地示出根據(jù)本發(fā)明的一個特征的通道400。通道400具有O到N-1的函數(shù)單元500,這些函數(shù)單元分別從路由網格A408和路由網格B412接收K位每字的向量數(shù)據(jù)(?...aN_i)和(V..1v1X函數(shù)單元500接收來自全局控制單元406的控制信號 Ctrl。...Ctrlp1。[0054]函數(shù)單元500是被硬件連線,以計算輸入(aQ,bQ)...(aN,bN)的函數(shù)(像乘法a*b、差的絕對值|a_b|和像例如a〈b、a〈=b等的關系運算)。其他二元函數(shù)可被用于本發(fā)明的不同實施方式中??刂菩盘朇trlc1...Ctrlp1可被用于控制或選擇正在被計算的函數(shù)。
[0055]函數(shù)單元500的輸出被組合到縮減單元504中,該縮減單元504執(zhí)行位縮減操作,以將N字每通道乘以K位每字的位數(shù)縮減到小于N乘以K的J'位每輸出字。位縮減操作的示例可以是加法、返回最小值的函數(shù)、返回最大值的函數(shù)或任何其他的交換二元函數(shù)。如通道400中所示,數(shù)據(jù)可以使用循環(huán)累加器緩沖器502從縮減單元504被輸出。另外,數(shù)據(jù)可以使用通用寄存器文件(未顯示)代替循環(huán)累加器緩沖器502從縮減單元504被輸出。
[0056]現(xiàn)在也參照圖9,圖9總結了根據(jù)本發(fā)明的實施方式的一個通用方法。在步驟91和92中,第一和第二數(shù)據(jù)成對地被路由到N個數(shù)據(jù)通道400。在步驟93,對第一和第二數(shù)據(jù)執(zhí)行二元函數(shù)的N個實例,輸出N個具有K'位每字的結果94。對于結果94執(zhí)行位縮減操作95,以輸出一個或多個具有j'位每字的結果96,其中j'小于N乘以k'。
[0057]現(xiàn)在參照圖6,圖6顯示的是各個源操作數(shù)SRC[O]和SRC[I]中的數(shù)據(jù)如何通過在圖4中作為數(shù)據(jù)線334示出的端口 SRC[M-1]的示例性表示。每個通道400[O到N-1]與O到N-1的片(slice)相關,即,片[O]到片[N-1]。圖6顯示的是被安排用于一維水平濾波的情形的片。預處理單元404的操作被用于一維水平濾波的情形,以便預處理單元404被配置為生成起始于X、X+l、X+2...X+N-l的N個可能的窗口(“片”)。每個這種窗口含有N個像素(這N個像素中,F(xiàn)個像素實際上被用于濾波)。下文進一步詳細討論一維水平濾波。
[0058]現(xiàn)在參照圖7A ,圖7A說明的是可能用于路由網格A408以實現(xiàn)一維垂直濾波的數(shù)據(jù)路由的示例。通過保留圖像窗口在輸入緩沖器402中,在每一步向上移動圖像窗口一行以得到下一個窗口,且在其通往通道400的路徑上在每一步使用路由網格A408轉置當前窗口(窗口是一行接著一行被讀出,而不是一列接著一列被讀出),以致每個通道400最后得到的是一列而不是一行,一維濾波避免從相同列取得N個像素。
[0059]現(xiàn)在參照圖7B,圖7B說明的是可被用于路由網格A408以實現(xiàn)最大為N的尺寸上的一維水平濾波的數(shù)據(jù)路由的示例。路由網格A408被配置成使得每個片(片[O]到片[N-1])被發(fā)送到其對應的通道400[N-1],且路由網格B412被配置成使得濾波系數(shù)向量被發(fā)送到所有的通道400,即,轉置路由被禁止。
[0060]現(xiàn)在參照圖8A和圖8B,圖8A和圖8B說明的是可被用于路由網格B412的所執(zhí)行的路由示例。具體地,圖8A是被啟動轉置路由的示例,而圖8B是被禁止轉置路由的示例。現(xiàn)在參照圖8A,轉置被啟動,其中N=8字每通道400,N=8通道和K=8位每字。數(shù)據(jù)路徑334載有8X8個數(shù)據(jù)字到路由網格412。字[O]通過數(shù)據(jù)路徑342[0]被轉置輸入到通道400[O]的(b0...b7)。類似地,數(shù)據(jù)字[1]通過數(shù)據(jù)路徑342 [I]被轉置輸入到通道400 [1]端口 B的(tv..b7),以此類推,直到數(shù)據(jù)字[7]通過數(shù)據(jù)路徑342 [7]被轉置輸入到通道400 [7]端口 B 的(b0...b7)。
[0061]線性濾波
[0062]線性濾波在信號處理中,特別是圖像處理中,是普遍且重要的任務。使用線性濾波,諸如卷積和相關的重要的圖像處理函數(shù)被執(zhí)行。通常,諸如8乘8像素的小型濾波器在圖像窗口上被掃描。線性濾波可以通過濾波器的值(如,灰度)乘以圖像窗口對應的強度值而被執(zhí)行。對于與窗口相關的濾波器的每個位置,中間乘積被存儲和求和。該和是濾波器與窗口之間每個相對位移的過濾的圖像窗口的數(shù)據(jù)。
[0063]現(xiàn)在展示一種使用系統(tǒng)16中的處理器30執(zhí)行線性濾波的方法。第一個示例是以水平的一維濾波的情形開始,而后進行討論二維濾波,進而是垂直一維濾波。用于處理不同濾波尺寸和維度的眾多細節(jié)除了與隨后描述的線性濾波相關之外,還與其他的算法相關。
[0064]最大尺寸為N的一維水平濾波器
[0065]設想尺寸為F的一維水平濾波器,其中F〈=N。該方法并行執(zhí)行N個相關且N個附近的圖像窗口與濾波器相關。特別是,如果最左邊的圖像窗口位于橫坐標X且包含多達X+F個像素,那么 N 個窗口 [X,X+F)、[X+l,X+1+F)、[X+2,X+2+F)、…、[X+N-1,X+N-1+F)將被并行處理。 [0066]在所有這N個窗口中的像素總數(shù)是N*F (當F=N時,最多是N2)。然而,窗口重疊,所以N-1+F個像素需要從范圍[X,X+N-1+F)中讀取,其中范圍[X,X+N-1+F)包含在范圍[X,X+N*2)中。
[0067]如下是用于一維水平濾波器的方法。在范圍[X,X+N*2)中的N*2個像素通過數(shù)據(jù)線336上的端口 SRC[0]和SRC[1]被提供給ALU320。預處理單元404被配置為生成起始于X, X+l, X+2,…,X+N-1的N個可能窗口(“片”)。每個這樣的窗口含有N個像素(這N個像素中,F(xiàn)個像素實際是被用于過濾)。在圖6中示出了對于N=S的情形,用于這種線性濾波的方法的預處理單元404的操作。
[0068]同時,濾波器系數(shù)通過數(shù)據(jù)線334上的端口 SRC[M_1]被提供給ALU320。輸入緩沖器402被繞開了。路由網格A408被配置成使得每個片被發(fā)送到其對應的通道400(如圖7B中所示),而路由網格B412被配置成使得濾波器系數(shù)向量被發(fā)送到所有通道(如圖SB中所示)。
[0069]每個通道400將片與濾波器相關聯(lián)一函數(shù)單元500被配置為執(zhí)行乘法(a*b),且縮減塊504被配置為執(zhí)行加法,以便N個a*b的積被加到累加器緩沖器502的累加器。對于當F〈=N的情形,在每一步中累加器都復位(被設置為0),以便獲得N個積的全部的總和。注意,在線性濾波的情形中,每個累加器緩沖器502只有單個的累加器可以被應用。
[0070]在通道號0400獲得的N個積(當F〈N時,某些結果為O)的和是窗口 [X,X+F)的相關結果,在通道號[1]400的和是窗口 [X+l,X+1+F)的結果,等等。這個結果在端口 340被輸出,且通過后處理單元410,被輸出到端口 332的外邊(可能是到通用寄存器文件)。其中,后處理單元410能夠在輸出位的數(shù)目上執(zhí)行進一步的截斷,例如,通過截斷可配置和的最低有效位(LSB)的數(shù)目,且在截斷之前可選地四舍五入該和。
[0071]任意尺寸的一維水平濾波器
[0072]現(xiàn)在設想比較大的一維水平濾波器的情形,即當F>N時。讓S為使得F/S≤N的最小的整數(shù)。那么,窗口 [X,F(xiàn))的相關結果將會在S個步驟之后在累加器502中獲得,其中每一步的執(zhí)行類似于上述F〈=N的方法,差別在于在每一步被提供給ALU320的數(shù)據(jù)。
[0073]具體地,在S個步驟的第一步,如上所述,像素[X,X+N*2)被精確地提供給ALU320。在第二步,像素[X+N,X+N*3)被提供于相同端口 336上,在第三步,提供像素[X+N*2,X+N*4),等等。類似地,在第一步,濾波系數(shù)O到N在端口 334上被提供給ALU320,然后是系數(shù)N到N*2,接著是N*2到N*3,等等。累加器502只在每S個步驟的第一步復位,在通道號i400處一獲得窗口 [X+i,X+i+F)的結果之后,在這個時刻,接下來的N個窗口的處理將要開始。
[0074]注意,濾波器系數(shù)并不存儲于ALU320中,而是濾波器系數(shù)連續(xù)不斷地提供給ALU320。連續(xù)不斷地提供給ALU320的濾波器系數(shù)對大型濾波器是很重要的,其不適合存儲到本地ALU。
[0075]二維濾波器
[0076]二維濾波器的情形與大型一維濾波器的情形相當類似——再一次地,差別僅在于提供給ALU320的數(shù)據(jù)。特別是,如果在二維濾波器中的行數(shù)是R,那么R*S個步驟被執(zhí)行,而不是每N個窗口 S個步驟,且每R*S個步驟累加器502僅被復位一次。
[0077]在獲得N個圖像窗口的第一行與第一濾波器行的相關性后——如上所述在S步驟中被精確執(zhí)行,繼續(xù)提供下一行的濾波器系數(shù),且圖像的下一行起始于坐標X、Y+1,且保持提供行,直到并包括起始于X、Υ+R-l的行為止。在R*s個步驟之后,累加器502在通道號?400處將對于在[X+i,X+i+F) X [Y,Y+R)處的窗口保持完全二維相關的結果。
[0078]一維垂直濾波器
[0079]本文所述的最后一個值得注意的情形是垂直的一維濾波器。垂直的一維濾波器是二維濾波器的特殊情形,但是應用與用于二維濾波器的方法相同的方法用于一維濾波器將是非常低效的。特別是,對于F個系數(shù)的濾波器,執(zhí)行F個步驟,每個通道400僅一個乘法進行有效的工作;總體而言,對于N個通道400,正如在典型的寬為N的SIMDALU中,每個步驟有N個有效的乘法累加。代替地,展示了利用ALU320的N2個函數(shù)單元的方法。
[0080]例如,F(xiàn)≤N的情形——濾波器的尺寸最大是N??梢酝ㄟ^使圖像分別與濾波器的每個N大小的子向量相關,輸出結果給本地存儲緩沖器并將這些部分相關相加,來處理較大的濾波器。特別是,VLIWSMD主處理器非常適于執(zhí)行在ALU320的部分相關的計算,且并行進行使用VLIWSMD主處理器的其他計算資源來更新存儲器中的累加器緩沖器。
[0081]在一維垂直濾波器的情形中的目的是使圖像窗口列與濾波器系數(shù)相關,取代水平濾波器的情形中的窗口行,因為對于列,每個通道400能夠在每一步進行完整的關聯(lián)(N個乘法累加)。如在水平的情形中一樣,濾波器系數(shù)被提供——差別在于圖像數(shù)據(jù)的提供,以便通道400得到窗口列而不是窗口行。
[0082]一維垂直濾波和二維濾波之間的差別并不是微小的原因在于,假設圖像存儲于行第一存儲器布局中,且存儲器具有寬為N的總線,在每一步N個像素能夠輕易地從相同的行取得,但是N個像素不是從相同的列取得。不從相同的列取得N個像素的一個方法是保留圖像窗口于輸入緩沖器402中,在每一步將窗口向上移動一行,以得到下一個窗口,且在每一步在其通往通道400的路徑上使用路由網格A408轉置當前窗口(當前窗口是被一行接一行地讀取,而不是一列接一列),以便每個通道400最終得到一列而不是一行。
[0083]在每一步,來自圖像行的N個像素通過端口 SRC[O] 336被提供給ALU320。如圖4中所示,緩沖器402被連接到它們相鄰的緩沖器:緩沖器[I] 402能夠發(fā)送數(shù)據(jù)到緩沖器號
[0]402,緩沖器號[2]402能夠發(fā)送數(shù)據(jù)到緩沖器號[1]402,等等。這樣,行從緩沖器402傳播到下一個;新的行進行N個步驟,以傳播到緩沖器號[0]402。在這個時候,NXN的圖像窗口的N行存在于輸入緩沖器402中。
[0084]因為在每一步來自下一個圖像行的N個像素被提供,且已存在的行傳播到鏈中的下一個緩沖器402,在每一步,存在基于X、Y的NXN窗口,而后是X、Y+1,接著是X、Y+2,等等。當經過這些窗口,繼續(xù)前進到X+N,且經過在X+N、Y的窗口,而后是X+N、Y+l,等等。每個這樣的窗口含有高度為N的N個列,每列的前F個元素必與垂直的一維濾波器相關。為了提供這些列給通道400,路由網格Α408被配置為如圖7Α所示(附圖假設Ν=8)。
[0085]通過進行NXF有效的乘法累加,在每步尺寸為F的以上N個列已經被關聯(lián)了。
[0086]在所展示的ALU上的線性濾波——總結
[0087]總之,根據(jù)以上本發(fā)明的實施方式,所展示的系統(tǒng)30的操作方法具有以下期望的特性:
[0088]高計算吞吐量一每步NXF個操作,且對于較大濾波器接近N2。
[0089]低輸入/輸出帶寬以支持這種吞吐量——在2Ν和3Ν個項目之間。
[0090]支持大型濾波器,排除使用本地ALU存儲。
[0091]有效地支持不同尺寸和維度的濾波器。
[0092]矩陣乘法
[0093]以下描述展示了對于尺寸達到NXN的輸出矩陣的情形的矩陣乘法的映射。較大的輸出矩陣一如,3ΝΧ5Ν—能夠通過在一個單獨的階段計算每個NXN的子矩陣進行有效地處理——例如,在總計3X5=15個階段中,被要求計算每個輸出子矩陣的操作是獨立的。假設輸入矩陣A和B尺寸為NX L和LXN,導致NXN的輸出矩陣(在最感興趣的情形中,L明顯大于N)。那么計算將占用L+N個步驟(在此期間,執(zhí)行被問題陳述所要求的LXNXN個乘法)。NXN個的部分和被保留在通道400的循環(huán)累加器緩沖器502中(每個緩沖器502保留N個部分和)。
[0094]在L+N個步驟后,最終的NXN輸出矩陣在循環(huán)累加器緩沖器502中可獲得。最終的NXN輸出矩陣可以在單獨的步驟中或者與下個階段并行地被讀出。因此,如果有3X5個NXN的子矩陣要計算,當?shù)诙€被計算的時候第一個能夠被讀出,第三個被計算的時候第二個能夠被讀出,等等。最終的輸出矩陣系數(shù)通過后處理單元410,其中最終的輸出矩陣系數(shù)能夠被可選地取整和/或使其較低位被截斷以節(jié)省空間,或者經歷其他轉換。
[0095]用來處理大小為NXL和LXN的輸入矩陣的L+N個步驟邏輯上可以被拆分成L/Ν+1個階段,每個階段占用N個步驟。在每組這樣的N個步驟中,并行發(fā)生兩個事件:第一輸入矩陣A的NXN子矩陣乘以第二輸入矩陣B的對應的NXN子矩陣;且同時,A的下一個NXN子矩陣被下載到輸入緩沖器402。(L+N個步驟而不是L個步驟的原因是因為每個階段占用N個步驟,且當A的第一個子矩陣被下載的開始時候有額外的階段,但是與此同時,并沒有A的已經下載的子矩陣乘以B的子矩陣。)
[0096]為了支持矩陣乘法,輸入緩沖器402必須具有2個寄存器,每個保留N個元素,對于每個寄存器,一個用于NXN子矩陣的當前N元素行,而另一個用于下一行。如圖4中所示,緩沖器402被連接到它們相鄰的緩沖器:緩沖器號[1]402能夠發(fā)送數(shù)據(jù)到緩沖器
[0]402,緩沖器號[2]402能夠發(fā)送數(shù)據(jù)到緩沖器[1]402,等等。
[0097]在N個步驟中,從端口 SRC[0]336,NXN子矩陣的N個N元素行被提供給ALU320。通過預處理單元404,每行被發(fā)送到輸入緩沖器號N-1402。在每一步中,N個緩沖器402中的每一個發(fā)送其在之前步驟接收到的下一個NXN子矩陣N元素行給其相鄰的緩沖器402。這樣一來,在步驟O從端口 SRC[0]336讀取的行O將占用N個步驟以傳播到緩沖器號0402 ;在步驟N-1讀取的行I將執(zhí)行N-1個步驟以傳播到緩沖器號I 402 ;以此類推,直到行N-1。[0098]在N個步驟之后,編號i的行將如期望地存在于編號i的輸入緩沖器402中。在這個時候一接下來的N個步驟階段的開始一所有的輸入緩沖器402同時將它們的輸入行從“下一行”寄存器拷貝到“當前行”寄存器,其中,它們在之前的階段保留了這些行。A的N個行現(xiàn)在準備好乘以B的對應的NXN子矩陣。
[0099]這個乘法一并行發(fā)生于如上所指出的輸入緩沖器402的“下一行”寄存器的填充一被執(zhí)行如下。根據(jù)問題定義,A的NXN子矩陣中的每一行必須乘以B的NXN子矩陣每一列一總體而言,N3的數(shù)量級的乘法,或N2的行乘以列的乘法。這就自然在ALU320上占用N個步驟,因為ALU320能夠同時進行N2的數(shù)量級的乘法,或者同時進行N個行乘以列的乘法。
[0100]在每個步驟中,通過端口 SRC[M-1]334,與當前存在于輸入緩沖器402中的A的NXN子矩陣對應的B的NXN子矩陣的單個的列被提供給ALU320。B的子矩陣列通過路由網格B412被發(fā)送給通道400,如圖SB中所示,網格412被配置為廣播所有的列元素給所有N個通道400。同時,通過路由網格A408,每個輸入緩沖器402發(fā)送其A的子矩陣行給通道400,如圖7B中所示,網格408被配置成使得編號I的通道400接收編號I的行。
[0101]這樣,每個通道400接收A的NXN子矩陣的N元素行(對于每個通道有不同的行)和B的NXN子矩陣的N元素列(對于所有的通道有相同的列)。函數(shù)單元500被配置為執(zhí)行乘法(a*b),而縮減單元504被配置為執(zhí)行加法,以便通道400計算行和列的點積。點積被加到循環(huán)累加器緩沖器502的累加器的內容中,其在第一個N步驟階段保持為0,且在下一個N步驟階段保持為A和B的之前的子行和子列的點積的和,以便在最后階段之后,循環(huán)累加器緩沖器502保持A的所有行與B的所有列的點積。在N個步驟的每一個步驟,從循環(huán)累加器緩沖器502中選擇不同的累加器;當達到累加器N-1時,將被選擇的下一個累加器(再次)是累加器O—這發(fā)生于下一個N步驟階段開始時。
[0102]從以上描述中可以發(fā)現(xiàn),在構成一個階段的N個步驟的每一個步驟,B的NXN子矩陣的不同列將乘以A的NXN子矩陣的所有行,更新保留所有行和所有列的(部分)點積的唯一的累加器,其中N元素子行和子列被“刪去”。
[0103]這樣,以上描述的方法允許矩陣乘法的執(zhí)行,以便當所消耗的帶寬為2*N個輸入時,N2個乘法累加運算被執(zhí)行。
[0104]該方法還具有實用優(yōu)勢,適于當矩陣B以列優(yōu)先的形式被布局于存儲器中的情形,即,其邏輯列對應于物理存儲器的行(此時其易于提供B的NXN子矩陣的列給ALU320)。這種存儲器布局在計算機視覺應用中是常見的情形,例如,在其他示例中,A的行是圖像特征而B的行是支持向量的分類。
[0105]中值濾波器
[0106]接下來是用于使用ALU320計算中值濾波器(在每個圖像像素周圍的窗口的中值)的方法。
[0107]該方法是基于更基本的方法,其用于計數(shù)在每個圖像像素周圍的窗口中低于每窗口閾值的像素數(shù)目。對于各種窗口的形狀(垂直/水平/ 二維),這種計數(shù)能夠以與線性濾波相當類似的方式進行,但具有下列區(qū)別:
[0108]?函數(shù)單元500被配置執(zhí)行比較(a〈b)而不是乘法。
[0109]?路由網格B41 2被配置為如圖8A中所示(N=8)。這樣一來,每個通道400對其從路由網格A408得到的窗口行的每個像素與相同的閾值進行比較,而每個通道400處理不同的閾值。這是為了與對于窗口中所有像素使用相同的閾值相一致,但是對于每個窗口,閾值不同(不像每個像素乘以不同的系數(shù)的濾波的情形,而是相同的濾波器用于每個窗口)。
[0110]應用這種像素計數(shù)方法,可以如下迭代計算中值。每窗口閾值被初始化為最大強度值的一半(例如,用于8位像素的128),且計數(shù)這種級別之下的像素數(shù)量。所獲得的每像素計數(shù)可以與窗口中像素的一半的數(shù)量相比較(應用的不是ALU320,而是主SMD VLIff處理器的其他計算資源)。例如,對于5X5的窗口,計數(shù)與25/2=12進行比較。對于計數(shù)超過窗口尺寸一半的像素,已知中值在最大強度值的一半之上;對于其他情況,已知中值在最大強度值以下。
[0111]實際上,已經計算出中值最高有效位——對于某些像素是1,而對于其他像素是O。從而,下一次迭代的每像素閾值將使其MSB被置位;其下一個最高有效位將再次是I。對閾值之下的像素進行計數(shù)并與窗口尺寸的一半進行比較,這將再次告訴我們對于每個像素新的位實際上是I還是O。
[0112]接著,從MSB轉移到LSB,比較中值的其他位。在每次迭代中,每像素的閾值是基于當前中值的近似數(shù)。事實上,本方法的一個優(yōu)勢是在任何時候可以停止該方法——如果中值的4位近似足夠的話,也可能在4次迭代之后停止該方法,節(jié)省剩下的迭代的運行時間。
[0113]這個方法主要的優(yōu)勢是“重的負擔(heavy lifting)”由高吞吐量的ALU320來進行。例如,關于二維FXF的窗口,每個步驟將進行NXF個比較和累加操作(并行處理N個窗口),且僅需要F X K/N個步驟(假設K位像素的K次迭代,乘以每次迭代每像素F X F次比較和累加運算,除以ALU320的吞吐量NXF)。關于N=8、K=8和F=5——8位像素的5X5的中值濾波一只需要每像素5個步驟。
[0114]局部最大值濾波器
[0115]在以下描述中,考慮了兩類局部最大值濾波器。在其中一個類型中,計算了每個圖像窗口的最大值。在另一個類型中,對于每個圖像窗口,如果在其中心的像素值大于或等于其周圍的所有像素,那么生成一個非O值,否則生成O。
[0116]第一個類型的計算類似于線性濾波器的計算,只是函數(shù)單元500和縮減塊504被不同地配置,且“B側”(路由網格B412、端口 SRC[M-1]334和函數(shù)單元500的“b”輸入)未
被有效應用。
[0117]函數(shù)單元500被配置為選擇“a”輸入——即,所選擇的函數(shù)是f (a, b)=a??s減塊504被配置為計算累加器和其N個輸入的最大值。這樣一來,如果圖像數(shù)據(jù)以與用于計算線性濾波器相同的方式流入ALU320,那么ALU320將并行地逐步更新N個圖像窗口的最大值(類似于在線性濾波器的情形中并行地用濾波器逐步更新N個圖像窗口的部分相關)。
[0118]以上用于第一類型的方法能夠被應用于通過逆轉所執(zhí)行的關系運算來計算局部最小值濾波器。
[0119]對于第二類型一每像素生成的布爾值告知其是否是局部最大值一方法呈現(xiàn)為并不依賴于能夠使用最小值或最大值作為縮減塊504中的縮減操作,而是依賴于求和作為縮減操作。該方法的優(yōu)勢是該方法使用了在由ALU320支持的其他大多數(shù)算法中所使用的縮減操作,且并不要求硬件支持更“奇異的”和代價更高的縮減操作。
[0120]類似于進行中值濾波的計數(shù),生成所要求的布爾值的方法僅僅是通過計數(shù)超過每像素閾值的像素。僅有的區(qū)別是,每像素閾值被設置為像素本身的值(而不是具有一個新位被設置的中值的當前近似數(shù))。
[0121]這樣一來,每個窗口中在這個像素之下的像素被計數(shù);如果這個數(shù)等于窗口尺寸,那么就具有局部最大值,否則沒有局部最大值。正如在中值示例中,依賴于在主SMDVLIW處理器中的其他計算資源來進行像素計數(shù)與窗口尺寸的比較。
[0122]該方法非常有效——例如,對于FXF的窗口,只需要每個輸出F/N個步驟。因為每個窗口必須執(zhí)行FXF次比較和累加運算,且每個窗口實際上執(zhí)行F/N個步驟,所以每個步驟執(zhí)行FXF/ (F/N) =NX F次有效運算。
[0123]SAD濾波器
[0124]SAD (絕對差值和)濾波被執(zhí)行,非常類似于線性濾波,只是函數(shù)單元500被配置為計算|a_b|代替a*b。注意,類似于線性濾波的情形,對于二維濾波器,每個濾波器行要求串行步驟。并行進行的是,相同濾波器的多達N個位移——即,對應于這些位移的多達N個和被并彳了更新。
[0125]這個方法對于模板匹配非常有效,其中,不可能重新使用相鄰的位置間的計算。這個方法可能沒有基于密集視差計算的積分圖像的技術有效,其中,對于圖像中每個像素必須計算出每個位移的結果,因此共享了相鄰位置的差值的和中的部分和。
[0126]然而,積分圖像可能并不有助于加快視差細化計算,對于每個像素,必須在高斯金字塔的粗糙水平上計算的位置周圍核對數(shù)量有限的位移。在視差細化中,要核對的位移從而對于每個像素是不同的,因此由于每個位移只相關于一小部分像素,每位移積分圖像是相當沒用的。這里,本方法又可以非常有效的,因為對于每個像素,可能并行更新對應于多達N個位移的差值的和。
[0127]總之,以上方法的好處是,允許執(zhí)行多達N2次I a-b I運算,而僅消耗N*3個輸入的帶寬,這些好處在那些操作不冗余且不能夠被避免的情況下(像,模板匹配和視差細化)是最突出的。
[0128]使用ALU320的常見的好處
[0129]高計算吞吐量——每個步驟比N多得多的操作,在許多情形中是N2個操作;
[0130]相對于該吞吐量的低I/O帶寬——M*N,其中M比N少得多,在以上的示例中是2或3 ;
[0131]支持關于相同的加速電路的相對廣泛的算法,特別是,應用于計算機視覺的許多
重量級算法;
[0132]支持許多輸入形狀和尺寸。
[0133]本文所應用的不定冠詞“一(a)”、“一(an)”,例如“一種算術邏輯單元”,具有“一個或多個”的意思,即“一個或多個算術邏輯單元”。
[0134]雖然已經顯示了和描述了本發(fā)明所選擇的特征,但是要理解,本發(fā)明并不限制于所描述的特征。反而,要理解的是,可以對這些特征進行改變,而不脫離本發(fā)明的原理和精神,本發(fā)明的范圍由權利要求和其等同物進行定義。
【權利要求】
1.一種算術邏輯單元ALU,包括: 第一路由網格,其被連接到多個數(shù)據(jù)通道,其中所述第一路由網格適于驅動第一數(shù)據(jù)到所述數(shù)據(jù)通道; 第二路由網格,其被連接到所述數(shù)據(jù)通道,其中所述第二路由網格適于驅動第二數(shù)據(jù)到所述數(shù)據(jù)通道; 其中,每個所述數(shù)據(jù)通道包括數(shù)量為N的多個函數(shù)單元,該函數(shù)單元具有來自所述第一路由網格的第一輸入和來自所述第二路由網格的第二輸入,其中,所述函數(shù)單元可操作為計算在各自的所述第一輸入上的相應的所述第一數(shù)據(jù)和在各自的所述第二輸入上的相應的所述第二數(shù)據(jù)的函數(shù); 其中,每個所述數(shù)據(jù)通道包括具有適于從所述函數(shù)單元接收K'位每字的輸入端的縮減單元,其中,所述縮減單元被配置為執(zhí)行縮減操作,該縮減操作被配置為輸出具有縮減了數(shù)目的j'位每字的輸出結果,其中,J'小于N乘以K'。
2.如權利要求1所述的算術邏輯單元ALU,其中,所述多個數(shù)據(jù)通道包括N個數(shù)據(jù)通道。
3.如權利要求1所述的算術邏輯單元ALU,還包括: 全局控制塊,其被配置為控制所述函數(shù)單元的函數(shù)且控制所述第一路由網格的第一路由,以及控制所述第二路由網格的第二路由。
4.如權利要求1所述的算術邏輯單元ALU,其中,所述函數(shù)在所述第一數(shù)據(jù)的數(shù)據(jù)a與所述第二數(shù)據(jù)的數(shù)據(jù)b之間被執(zhí)行,其中,所述函數(shù)是從由加法a+b、減法a-b、乘法a*b、a和b之間的關系運算、以及差的絕對值ABS (a-b)組成的組中選擇的。
5.如權利要求1所述的算術邏輯單元ALU,其中,所述縮減操作是從由加法、找出最大值和找出最小值組成的組中選擇的。
6.如權利要求1所述的算術邏輯單元ALU,其中,所述數(shù)據(jù)通道在其中相互獨立地執(zhí)行各自的計算。
7.一種使用如權利要求1中所述的ALU來執(zhí)行線性濾波、矩陣乘法、中值濾波、局部最大值濾波、局部最小值濾波和絕對差值和濾波中的任何一項的方法。
8.—種能夠由算術邏輯單元ALU執(zhí)行的計算方法,所述方法包括: 進行第一路由,從而驅動第一數(shù)據(jù)到多個數(shù)據(jù)通道; 進行第二路由,從而驅動第二數(shù)據(jù)到所述數(shù)據(jù)通道;以及 在所述數(shù)據(jù)通道中: (i)計算相應的第一數(shù)據(jù)和相應的第二數(shù)據(jù)的函數(shù)的N個實例,從而輸出具有K'位每字的N個結果; (ii)對所述N個結果執(zhí)行操作,從而輸出具有縮減了數(shù)目的J'位每字的輸出結果,其中,J'小于N乘以K'。
9.如權利要求8所述的計算方法,其中,所述函數(shù)在所述第一數(shù)據(jù)的數(shù)據(jù)a與所述第二數(shù)據(jù)的數(shù)據(jù)b之間執(zhí)行,其中,所述函數(shù)是從由加法a+b、減法a-b、乘法a*b、a和b之間的關系運算、以及差的絕對值ABS (a-b)組成的組中選擇的。
10.如權利要求8所述的計算方法,還包括: 控制所述N個實例,從而選擇所述函數(shù)并控制所述第一路由和第二路由。
11.如權利要求8所述的計算方法,還包括: 避免在所述ALU中存儲所述第一數(shù)據(jù)和所述第二數(shù)據(jù)。
12.如權利要求8所述的計算方法,還包括: 避免存儲所述第一數(shù)據(jù)和所述第二數(shù)據(jù)的所述函數(shù)的中間結果。
13.如 權利要求8所述的計算方法,其中,計算所述N個實例由所述數(shù)據(jù)通道獨立地執(zhí) 行。
【文檔編號】G06F7/57GK103793195SQ201310529403
【公開日】2014年5月14日 申請日期:2013年10月31日 優(yōu)先權日:2012年10月31日
【發(fā)明者】吉爾·伊斯雷爾·多貢, 尤斯·阿爾貝里, 約瑟夫·克雷寧 申請人:摩比萊耶科技有限公司