當(dāng)前位置:首頁 > 電源 > 功率器件
[導(dǎo)讀]摘要:在高性能計算、娛樂和科學(xué)計算市場,OpenCL的采用在持續(xù)增長。OpenCL的靈活性和便攜性使之成為了一個開發(fā)圖像處理應(yīng)用的優(yōu)秀平臺。然而,OpenCL尚未應(yīng)用到硬拷貝打印

摘要:在高性能計算、娛樂和科學(xué)計算市場,OpenCL的采用在持續(xù)增長。OpenCL的靈活性和便攜性使之成為了一個開發(fā)圖像處理應(yīng)用的優(yōu)秀平臺。然而,OpenCL尚未應(yīng)用到硬拷貝打印機和多功能打印機(MFP)市場。傳統(tǒng)上,打印機/MFP市場使用全定制系統(tǒng)級芯片(SoC或ASIC)、專用集成電路進行圖像處理。在本文中,我們探討了配合Altera SoC FPGA(現(xiàn)場可編程門陣列)的OpenCL在核心MFP圖像處理流水線中的應(yīng)用。核心圖像處理流水線以每分鐘大于90頁信紙大小的全色RGB持續(xù)速率運行,圖像分辨率為600DPI(每英寸點數(shù)),同時采用了成本有效的FPGA器件。相比運行在嵌入式CPU上的基于C語言的軟件流水線,OpenCL流水線可實現(xiàn)至少40倍的性能提升,在高端臺式CPU上的運行改善了5倍。

I. 引言

歷史上,MFP和打印機廠商都是開發(fā)定制ASIC或SoC器件來執(zhí)行圖像處理操作。這些ASIC/SoC器件包括圖像流水線,用以接受來自CCD或CIS傳感器的RGB數(shù)據(jù),執(zhí)行濾波、縮小/放大、色彩空間轉(zhuǎn)換、圖像分割和半色調(diào)操作。然后,由此產(chǎn)生的經(jīng)處理的圖像使用減色著色劑進行打?。呵嗌?、品紅、黃色和黑色。其目標(biāo)是在打印副本上精確地再現(xiàn)原始文檔,而不引入視覺假像。

在底層技術(shù)(如DDR內(nèi)存和USB連接)變得過時之前,ASIC/SoC器件通常有三年的有限壽命。隨著硅技術(shù)的不斷萎縮,開發(fā)一個定制ASIC/SoC所需的投資在繼續(xù)增加。一個采用雙核處理器、必要的連接、DDR3內(nèi)存控制器、圖像處理、GPU、LCD控制器等的28納米SoC的設(shè)計、開發(fā)和交付需要花費超過1000萬美元的成本。

取決于許多因素,大型SoC/ASIC器件的開發(fā)周期要花18至30個月,包括新IP的數(shù)量和大小、利用以往設(shè)計的能力、設(shè)計團隊經(jīng)驗和成熟的有針對性的硅技術(shù)。

打印機/MFP市場的產(chǎn)品周期是24到36個月的時間。打印機/MFP市場成長速度平緩,增加了以較低成本和較短開發(fā)周期提供更多功能的競爭壓力[1]。

隨著ASIC/SoC開發(fā)周期接近同一時間MFP產(chǎn)品的生命周期,MFP/打印機廠商需要一個新的平臺來縮短開發(fā)和部署周期?;赟oC的OpenCL和FPGA的組合為解決這一難題提供了一個有趣的解決方案。

II. MFP圖像處理流水線背景

一個重要的研究機構(gòu)已經(jīng)在文檔圖像處理領(lǐng)域積累了近20年的經(jīng)驗[2][3]。大部分早期工作都側(cè)重于圖像處理的基礎(chǔ)知識,包括提供統(tǒng)一色彩的校準(zhǔn)輸入傳感器數(shù)據(jù)、去除來自傳感器噪聲的濾波,實現(xiàn)圖像尺寸縮小或放大的縮放算法,以及實現(xiàn)使用二進制像素打印連續(xù)色調(diào)圖像數(shù)據(jù)的半色調(diào)。當(dāng)前的文檔圖像處理研究和開發(fā)處于圖像分析、內(nèi)容提取和數(shù)據(jù)壓縮技術(shù)領(lǐng)域。[4][5][6]

所有MFP文檔圖像處理產(chǎn)品都可執(zhí)行一系列基本功能——復(fù)印、掃描和打印。圖1用圖形說明了一臺個MFP設(shè)備的基本功能或流水線。復(fù)印和掃描的操作相類似,開始于從一個掃描設(shè)備到設(shè)備無關(guān)的彩色空間的原始RGB數(shù)據(jù)轉(zhuǎn)換。復(fù)印操作進一步處理設(shè)備無關(guān)的色彩空間圖像,并創(chuàng)建用于打印的CMYK圖像。掃描操作在設(shè)備無關(guān)的色彩空間圖像上執(zhí)行一組不同的圖像處理操作。這些操作可以包括:圖像分析、用不同頻率內(nèi)容將圖像分割為多個圖像層、OCR、光學(xué)字符識別和數(shù)據(jù)壓縮。然后,所產(chǎn)生的圖像轉(zhuǎn)被移到任一本地存儲介質(zhì),如USB閃存驅(qū)動器或網(wǎng)絡(luò)設(shè)備。

 

 

圖字:

來自CCD或基于CIS掃描儀的RGB;分割

掃描儀接口;校準(zhǔn)和調(diào)整;CST(RGB到Lab);濾波器;縮放R & E;CST(Lab到CMYK);調(diào)整;誤差擴散;無損或有損壓縮;解壓縮調(diào)整和/或操作

來自網(wǎng)絡(luò)的PS/PCL/其他PDL;解譯;顯示列表;渲染器;位圖或字節(jié)圖;調(diào)整;半色調(diào);無損壓縮;圖像存儲;無損解壓縮;圖像調(diào)整;引擎接口

有損解壓縮;有損壓縮;至引擎

出口處理;至網(wǎng)絡(luò)

外部接口;微觀圖像處理操作;圖像存儲;通用CPU操作;宏觀圖像處理操作

打印功能接收一個采用PDL(頁面描述語言)的編碼,或圖形顯示接口格式的文件。在采用PDL文件的情況下,MFP設(shè)備必須首先解釋文檔語言,并創(chuàng)建一個原始對象列表。渲染器捕獲這些對象,并將其轉(zhuǎn)換成數(shù)字CMYK位圖/位圖圖像。所產(chǎn)生的數(shù)字圖像可被進一步處理和隨意壓縮。GDI打印機不需要解釋過程,因為傳送到打印機的圖像是一個顯示對象的列表。

一旦打印或復(fù)印流水線創(chuàng)建了CMYK位圖/位圖圖像,圖像即被發(fā)送到引擎在所需介質(zhì)上打印。

本文的重點是一個OpenCL MFP核心復(fù)印流水線(CCP)的開發(fā),如圖2所示。

 

 

圖字:

濾波器;縮放R & E;CST(Lab到CMYK);調(diào)整;誤差擴散

圖像存儲

源圖像5100x6600x24位LAB;目標(biāo)圖像5100x6600x32位CMYK

III. MFP核心復(fù)印流水線

CCP由5個內(nèi)核組成:7×7濾波器;用pad/crop縮放或減小與放大;色彩空間轉(zhuǎn)換;調(diào)整和誤差擴散。我們將簡要地回顧各個算法和相關(guān)的內(nèi)存需求。

A. 7×7濾波器

7×7濾波器是一個2D對稱濾波器,可降低圖像噪聲。它的每一行需要跨連續(xù)7行乘連續(xù)7個像素的49個像素的上下文(context)。MFP應(yīng)用通常使用一組系數(shù)來實現(xiàn)一個平均或銳化濾波器。7×7濾波器的一般形式是:

 

 

 

 

由于系數(shù)值經(jīng)常重復(fù),濾波處理可以避免重復(fù)的乘法和加法。相反,乘以相同系數(shù)的像素可首先加入,然后與濾波器系數(shù)相乘一次。圖4直觀地顯示了潛在的優(yōu)化。這個數(shù)字僅為了清晰起見,并不代表OpenCL設(shè)計。

 

 

圖字:

M每頁掃描線

N每掃描線像素

像素;減少的濾波矩陣;有相同顏色的條目分享共同系數(shù)

工作矩陣對稱濾波器計算的高度概括,針對左到右滑動進行了優(yōu)化,包括:

1. 針對每一個加載的新的像素欄3種加法A

2. 針對屬于圖4所示4×7矩陣中相同濾波器系數(shù)像素的18種加法

3. 針對每個系數(shù)一個C0至C9的10種乘法M

4. 計算系數(shù)乘法最終結(jié)果的9種加法

那么,計算的總數(shù)是10M + 3A + 18A + 9A = 10M + 30A。圖5示出了計算樹。

 

 

隨著濾波器在圖像上從左至右的滑動,僅需要加載最右側(cè)像素列,即7個像素。邏輯上,這涉及將內(nèi)部像素列移到左邊,并在右側(cè)加上新的像素列。

B. 縮放

縮放模塊使用雙線性插值來減小和/或放大一幅圖像。雙線性插值是一個眾所周知的算法,在所需的新輸出像素周圍使用了4個輸入像素。圖6示出了要測試像素的雙線性插值輸入和輸出網(wǎng)格。

 

 

 

 

C. 色彩空間轉(zhuǎn)換

CCP采用設(shè)備無關(guān)的色彩空間數(shù)據(jù),通常是LAB格式,并將其轉(zhuǎn)換為設(shè)備相關(guān)的CMYK色彩空間。不幸的是,沒有公式化的方法來直接轉(zhuǎn)換L*a*b*至CMYK。每臺打印機的著色劑以非線性方式進行交互。打印行業(yè)的公認方法是打印測試斑點,測量所得色,并創(chuàng)建一組C、M、Y和K查找表,即LUT。關(guān)鍵是要盡量減少LUT的大小,同時提供最高的色彩保真度。為了計算這些存儲在LUT之間的值,我們必須使用一個插值方案。有許多方法來執(zhí)行插值,但四面體插值法被廣泛認為是最準(zhǔn)確的。

顧名思義,四面體插值法使用4個已知點來計算一個中間點。在我們的L*a*b*情況下,這些已知點的每一個都具有對應(yīng)于輸入色彩空間的三個維度。三個輸入維度L、a、b形成一個我們可以用來確定輸出像素的立方體。圖7示出了色彩空間和LUT概念。注意每個輸出彩色平面都有獨立的LUT。

 

 

圖字:

第一張圖:

L*a*b* 色彩空間

下方注解:

對于每24位輸入L*a*b*像素,可能有224個32位CMYK輸出像素。這相當(dāng)于64MB LUT!

第二張圖:

青色點陣

單位立方體

格點——憑經(jīng)驗測量

感興趣的像

要使LUT大小降低到一個合理水平,我們可執(zhí)行以下操作:

每彩色平面有各自的LUT

每個LUT有代表點陣點的4096個條目

算法首先發(fā)現(xiàn)期望像素點駐留的單位立方體

一旦算法確定了哪一個單位立方體包含要測試的輸出像素,我們必須從一組8個已知像素中計算出輸出像素。這是三線性插值的實際情形。四面體插值法利用一個單位立方體可以被劃分成一組6個非重疊四面體的方法,其每個終點都位于單位立方體的頂點。使用一個四面體(有4個點)內(nèi)插來削減一半像素數(shù)時,我們必須使用插值結(jié)果。圖8以圖形示出了六個四面體。

 

 

CST算法首先確定了輸出像素(P)駐留在哪個四面體中,并使用了4個已知輸出像素插入最終結(jié)果——見圖7。圖9示出了四面體5中的像素P。該算法計算了每個單位立方體軸端點和像素dx、dy、dz之間的距離,并使用了已知點之間的線性插值距離。

 

 

D. TRC調(diào)整

TRC調(diào)整算法是一個簡單的LUT。它允許C、M、Y、K值的進一步調(diào)整,以校正非線性色調(diào)再現(xiàn)。具體C、M、Y、K LUT條目憑經(jīng)驗來測量。

E. 誤差擴散

最后階段執(zhí)行半色調(diào)功能。彩色激光MFP產(chǎn)品使用一個激光系統(tǒng)來消除感光介質(zhì)上的電荷。無論電荷清除的是C、M、Y、K,墨粉都不能轉(zhuǎn)移到感光體。激光束掃過移動的感光體,被調(diào)制來創(chuàng)建一個倒置的圖像。調(diào)制的最小時間周期是一個像素。在反轉(zhuǎn)圖像被寫入感光體后,它經(jīng)過一個墨粉分配器附近。然后,帶有相反電荷的墨粉被吸引到電荷存在的感光區(qū)。墨粉“粘”到感光體上。最后一個步驟是將感光體上的圖像轉(zhuǎn)印到紙張或其他介質(zhì)上。單個像素或開或關(guān),實現(xiàn)二進制的1過程。來自TRC內(nèi)核的8位CMYK像素必須半色調(diào)或二進制化,以驅(qū)動打印機中的激光系統(tǒng)。有許多算法可以將連續(xù)色調(diào)數(shù)據(jù)轉(zhuǎn)換為二進制數(shù)據(jù)。誤差擴散是MFP/打印機中使用的一種通用算法。我們選擇了實施眾所周知的弗洛伊德-斯坦伯格(Floyd-Steinberg)誤差擴散算法的一個變種,它有簡單的算術(shù)修正系數(shù)[7]。[!--empirenews.page--]

弗洛伊德-斯坦伯格誤差擴散量化了基于一個閾值陣列的輸入像素,然后將剩余誤差分配到相鄰像素。在我們的案例中,我們將一個8位輸入像素減少到二進制輸出像素。因此,我們的閾值陣列是一個127的值。大于127的輸入像素成為了邏輯1。≤127的像素成為了0。該算法定義如下:

 

 

1. IP(x,y)是當(dāng)前輸入像素

2. EPP是來自以前像素的剩余閾值誤差,IP(x-1,y)

3. EP是來自以前掃描線的誤差矢量,y-1。

IV. ALTERA OpenCL編譯器

超出實際OpenCL代碼的OpenCL系統(tǒng)的最關(guān)鍵部分是編譯器。針對OpenCL 13.1,Altera SDK提供了一些獨特的功能,包括[8]:

A. 通道

B. I/O通道

C. 內(nèi)存訪問合并(coalescing)

D. 自動循環(huán)流水線

E. 移位寄存器推理

A. 通道

標(biāo)準(zhǔn)OpenCL模型假設(shè)內(nèi)核運行在基于全局內(nèi)存的數(shù)據(jù)集。由內(nèi)核#1從全局內(nèi)存讀取一個輸入塊,經(jīng)處理將其結(jié)果寫回全局內(nèi)存的不同部分。如果第二個內(nèi)核需要進一步處理來自內(nèi)核#1的結(jié)果,就必須等待,直到內(nèi)核#1完成,所有輸出數(shù)據(jù)被寫回全局內(nèi)存。只有這樣,內(nèi)核#2才能讀取和處理數(shù)據(jù)。顯然,這個連續(xù)過程導(dǎo)致了流水線延遲,每個額外內(nèi)核都以最佳線性增加的。而且,內(nèi)存的每一次進出都增加了全局內(nèi)存帶寬,并降低了流水線吞吐量。為了解決這個問題,Altera提供了內(nèi)核通道的概念,它允許來自內(nèi)核#1的輸出結(jié)果直接轉(zhuǎn)到內(nèi)核#2的輸入。Altera離線編譯(AOC)增加了所有必要的同步邏輯和FIFO存儲器,允許數(shù)據(jù)從子內(nèi)核n傳遞給內(nèi)核n+1。圖10顯示了標(biāo)準(zhǔn)OpenCL和Altera廠商擴展通道數(shù)據(jù)流。

 

 

圖字:

標(biāo)準(zhǔn)OpenCL模型:

系統(tǒng)內(nèi)存

主機CPU

核心1;核心N

全局內(nèi)存DDR3;內(nèi)核接口

FIFO、DMA、DDR控制器、內(nèi)存聚結(jié)器、結(jié)構(gòu)總線轉(zhuǎn)向、PLL時鐘交錯,等

內(nèi)核N;內(nèi)核;內(nèi)核;內(nèi)核1;內(nèi)核M;內(nèi)核;內(nèi)核;內(nèi)核N

本地內(nèi)存——RAM塊

內(nèi)核

FPGA

有通道廠商擴展的OpenCL:

系統(tǒng)內(nèi)存

主機CPU

核心1;核心N

全局內(nèi)存DDR3;內(nèi)核接口

FIFO、DMA、DDR控制器、內(nèi)存聚結(jié)器、結(jié)構(gòu)總線轉(zhuǎn)向、PLL時鐘交錯,等

內(nèi)核N;內(nèi)核2;內(nèi)核3;內(nèi)核4;內(nèi)核N;內(nèi)核M;內(nèi)核N+1;內(nèi)核N+2

本地內(nèi)存——RAM塊

內(nèi)核

FPGA

B. IO通道

IO通道是一個擴展通道概念,它允許外部IO直接連接到OpenCL內(nèi)核。IO通道允許外部端口,如以太網(wǎng)、串行LVDS或OEM專用接口連接到內(nèi)核,而無需首先進入全局內(nèi)存。

在我們的MFP例子中,IO通道可以允許RGB掃描儀數(shù)據(jù)饋送到校準(zhǔn)內(nèi)核,然后連接到CCP。此外,CCP誤差擴散輸出視頻數(shù)據(jù)可以饋送到在彩色打印機上打印圖像數(shù)據(jù)的一個引擎內(nèi)核。(請注意,我們尚未實現(xiàn)IO通道。這是留給未來的工作。)圖11示出了IO通道數(shù)據(jù)流。

 

 

圖字:

有通道和直接IO通道廠商擴展的OpenCL

系統(tǒng)內(nèi)存

主機CPU

核心1;核心N

全局內(nèi)存DDR3;內(nèi)核接口

FIFO、DMA、DDR控制器、內(nèi)存聚結(jié)器、結(jié)構(gòu)總線轉(zhuǎn)向、PLL時鐘交錯,等

IO接口

IO接口

內(nèi)核1;內(nèi)核2;內(nèi)核3;內(nèi)核4;內(nèi)核N;內(nèi)核M;內(nèi)核N+1;內(nèi)核N+2

本地內(nèi)存——RAM塊

內(nèi)核

FPGA

左邊紅字注解:直接IO通道允許外部IO(如以太網(wǎng)或串行Lite)和內(nèi)核之間的直接連接

右邊紅字注解:通道允許內(nèi)核之間的直接連接,而不需要訪問全局內(nèi)存

C. 內(nèi)存訪問合并

DDR內(nèi)存對于隨機訪問非常低效。它對長脈沖串順序數(shù)據(jù)效果最好。Altera的OpenCL編譯器提供靜態(tài)和動態(tài)內(nèi)存合并。編譯器將嘗試靜態(tài)識別OpenCL內(nèi)核代碼中的多個連續(xù)請求,并創(chuàng)建硬件來發(fā)出一個寬請求。例如,如果一個整數(shù)陣列被連續(xù)訪問,則編譯器將創(chuàng)建硬件用一個DDR控制器請求來一次抓取八個整數(shù)。此外,Altera的OpenCL內(nèi)存系統(tǒng)提供動態(tài)數(shù)據(jù)重新排序。DDR輸入隊列按順序接受它們收到的來自不同內(nèi)核的內(nèi)存訪問請求。內(nèi)部數(shù)據(jù)重新排序模塊,檢查輸入隊列地址和操作類型,然后動態(tài)重新排序請求。重新排序請求以優(yōu)化排序存儲在重新排序緩沖器中。內(nèi)存控制器器讀取重新排序緩沖器,并以優(yōu)化形式存儲/檢索數(shù)據(jù)。圖12示出了有排序緩沖器的高電平DDR控制器。

 

 

圖字:

全局內(nèi)存DDR3;DDR控制器;DDR隊列重新排序;DDR輸入重新排序;全局內(nèi)存總線PCIe

內(nèi)核接口

FIFO、DMA、DDR控制器、內(nèi)存聚結(jié)器、結(jié)構(gòu)總線轉(zhuǎn)向、PLL時鐘交錯,等

IO接口

IO接口

內(nèi)核1;內(nèi)核2;內(nèi)核3;內(nèi)核4;內(nèi)核N;內(nèi)核M;內(nèi)核N+1;內(nèi)核N+2

本地內(nèi)存——RAM塊

FPGA

輸入隊列檢查器

D. 自動循環(huán)流水線 - ALP

OpenCL內(nèi)核通常描述一個單線程的工作,目的在于啟動大量這樣的線程來處理一個數(shù)據(jù)集。但是,一些問題最好表達為單線程算法。濾波和誤差擴散是兩個這樣的例子。使用多線程進行濾波要么將需要過多的內(nèi)存讀取,這將在稍后討論,要么需要線程之間過多的通信。由于從當(dāng)前像素到其鄰近像素的誤差傳播,用在CCP的佛洛伊德-斯坦伯格誤差擴散算法很難并行化。

Altera OpenCL編譯器以單線程算法提供了自動流水線循環(huán)。ALP允許以自然方式表達這類算法,并仍然獲得了FPGA加速的全部好處。對于這個項目,濾波和誤差擴散內(nèi)核都通過編譯器形成了自動流水線,實現(xiàn)了每個時鐘周期一個像素的理想流水線效率。

E. 移位寄存器推理

Altera的OpenCL編譯支持所謂移位寄存器推理(SRI)的優(yōu)化。SRI對于濾波等滑動窗口操作特別有用,通常適用于上述循環(huán)流水線功能。從軟件的角度來看,一個滑動窗口操作由一個固定大小陣列(通常比要處理的數(shù)據(jù)量小得多)和定義在該陣列中固定位置的元素操作組成。此時,要處理的數(shù)據(jù)被轉(zhuǎn)換成陣列的一個元素,固定大小陣列的每個值下移一個位置,以容納新的值。每個轉(zhuǎn)移的數(shù)據(jù)值出現(xiàn)一個輸出值。圖13示出了用于7×7濾波器的移位寄存器陣列概念。

 

 

圖字:

Line Buffer 行緩沖區(qū)

乘法器/加法器樹——流水線的性能

結(jié)果

以黃色顯示了移位寄存器陣列、D型觸發(fā)器

通用時鐘到所有邏輯沒有顯示

7×7濾波器要求來自7條輸入線的7個輸入像素來計算一個輸出像素。一種簡單方法是讀取所有49個像素,計算一個輸出像素,然后重復(fù)上述過程,讀取接下來的49個像素等。但是這非常低效,因為你最終會讀取圖像N×M*49次,其中N是圖像寬度,M是圖像長度。

減少內(nèi)存帶寬的理想解決方案是一次讀取一個圖像像素,并把它們存儲在本地移位寄存器的末端。在每個讀取的像素上,移位寄存器被左移一位,濾波值是通過訪問49個抽頭點(tap point)來計算的。要執(zhí)行7×7濾波器,移位寄存器必須是6條掃描線加7個像素長。一個新輸出像素計算的是每個輸入像素讀取,除了第6條掃描線讀取。另外,圖像讀取正好一次。不過,F(xiàn)PGA片上存儲器的成本是很高的。對于一個7×7濾波器和寬度為5100像素的掃描線,6條掃描線+7個像素移位寄存器陣列是5100×6+7 = 30,607像素。在每個像素3個字節(jié)時,片上RAM塊幾乎是90KB或717Kbits。圖14是編譯器如何實例化一個移位寄存器和行緩沖陣列,減少了全局內(nèi)存帶寬的框圖:

 

 

圖字:

全局內(nèi)存;DMA讀取通道;7×7濾波器矩陣

乘法器/加法器樹——流水線的性能

Altera OpenCL編譯器可自動識別來自O(shè)penCL內(nèi)核代碼的移位寄存器設(shè)計模式,而無需編譯器提示(如程序)的幫助。你可以簡單斷言用作代碼中移位寄存器的一個固定大小陣列,而AOC將創(chuàng)建所需的硬件。

F. CCP數(shù)據(jù)流

CCP利用了所有Altera OpenCL編譯器的改進,以提供最佳的性能。第一個CCP階段是濾波,在邏輯上實現(xiàn)了3個并聯(lián)濾波器操作。每個濾波器處理3個輸入色彩空間(L*、a*和b*)中的一個。7×7濾波器從全局內(nèi)存提取數(shù)據(jù),填補移位寄存器,執(zhí)行濾波功能,最終結(jié)果存回全局內(nèi)存。存儲在全局內(nèi)存中的原始輸入數(shù)據(jù)以隔行掃描線(SI)格式結(jié)構(gòu)化。SI數(shù)據(jù)被定義為連續(xù)存儲的一個彩色平面接著下一個彩色平面的整個掃描線,即N個像素。SI數(shù)據(jù)是突發(fā)讀取全局內(nèi)存的理想選擇。我們選擇這個格式實現(xiàn)未來的CCP增強,其中的輸入數(shù)據(jù)將直接來自掃描儀。所有CCP數(shù)據(jù)均作為uchar4讀取。

CCP縮放算法目前不能進行結(jié)構(gòu)化來接受SI數(shù)據(jù)。由于縮放內(nèi)核在濾波器輸出上運行,我們要確保濾波結(jié)果以像素隔行格式寫入全局內(nèi)存。此外,后續(xù)內(nèi)核、CST、調(diào)整和ED都需要像素隔行數(shù)據(jù)。像素隔行數(shù)據(jù)被定義為一個連續(xù)存儲像素的所有四個彩色平面——Ci、Mi、Yi Ki Ci+1、Mi+1、Yi+1 Ki+1。圖15示出了CCP數(shù)據(jù)流和數(shù)據(jù)格式。

 

 

圖字:

LAB輸入圖像(掃描線交錯);LAB過濾后的圖像(像素交錯);存儲在內(nèi)存中的CMYK半色調(diào)圖像(像素交錯)

EHPS DDR內(nèi)存

可選FPGA DDR內(nèi)存

uchar4(L1,A1,B1,X1)

為了保持內(nèi)存BW像素隔行數(shù)據(jù)隨uchar4寫入,

第4像素未使用。雖然這增加了33%的內(nèi)存緩

沖區(qū),仍會大大改善內(nèi)存BW

BWuchar4(Ci,Mi,Yi,Ki)

為了便于觀看PC上的結(jié)果,誤差擴散位沒有被打包成二進制8位量,

而是留作字節(jié),無論是0x00或0xFF(uchar4)。在一臺真正的MFP

應(yīng)用中,二進制輸出將打包成字節(jié),然后進行存儲

濾波器;縮放R&E;CST(Lab到CMYK);調(diào)整;誤差擴散

通道數(shù)據(jù)通路

全局內(nèi)存數(shù)據(jù)通路

V. OPENCL系統(tǒng)級接口

一旦OpenCL內(nèi)核代碼被寫入并進行了編譯,它必須加以打包、加載并在參考板上執(zhí)行。Altera提供了完整的SW架構(gòu)來實現(xiàn)FPGA的匯編構(gòu)建、加載和利用[8][9]。Altera OpenCL編譯器采用OpenCL內(nèi)核,并創(chuàng)建了一個優(yōu)化的Verilog RTL映射。然后,采用Altera的AOC設(shè)計流程來處理Verilog代碼,從而得到FPGA二進制編程文件,名為.sof。與創(chuàng)建FPGA.sof文件并行,一個標(biāo)準(zhǔn)C編譯器(如gcc)用來編譯與OpenCL內(nèi)核通信的C主機代碼。通信機制是通過一組鏈接到主機可執(zhí)行文件的Altera OpenCL運行程序庫實現(xiàn)的。圖16示出了創(chuàng)建.sof和.exe文件的Altera OpenCL工具流程[9][10]。

 

[!--empirenews.page--]

 

圖字:

LLVM前端;系統(tǒng)描述;C編譯器;AC運行程序庫

未優(yōu)化LLVM IR

優(yōu)化程序

優(yōu)化的LLVM IR

RTL發(fā)生器;Verilog

A. Altera參考板

Altera提供與OpenCL兼容的多種解決方案:可作為PCIe子卡的FPGA板和獨立的SoC/FPGA板。我們選擇了Altera Cyclone V SoC FPGA作為開發(fā)平臺[11]。OpenCL Cyclone V SoC參考平臺包含以下內(nèi)容:

● 雙核ARM Cortex A9 - 800MHz

● 1GB的DDR3 HPS,硬處理器系統(tǒng),內(nèi)存采用Linux,也可以直接訪問FPGA。它是OpenCL全局內(nèi)存的首選地點。

● 1GB的DDR31GB只可訪問FPGA。它可用作OpenCL內(nèi)核的“暫存(scratch pad)”全局內(nèi)存。

● 千兆以太網(wǎng)與外部PC的通信

● Cyclone V FPGA5CSXFC6D6F31C8N FPGA

圖17是我們的設(shè)計和測試中所使用的Altera參考板的框圖[12]:

 

 

B. Altera OpenCL接口

OpenCL定義了4個一組的模型:平臺;執(zhí)行;內(nèi)存和編程[13]。在平臺模型級別,主機是Cyclone V SoC ARM內(nèi)核,器件是FPGA架構(gòu)。在器件內(nèi),我們采用了多個計算單元(CU)。

Altera OpenCL將內(nèi)核模擬為通過其工作項目流動的深度流水線硬件架構(gòu)。它定義了作為1個計算單元的內(nèi)核流水線實例。程序員可以選擇指定計算單元內(nèi)核實例化的數(shù)量,以實現(xiàn)空間與吞吐量的權(quán)衡。指定較大數(shù)量的計算單元可消耗更多的FPGA架構(gòu),并在提高有效吞吐量的同時帶來了全局內(nèi)存爭用和恒定緩存爭用。在CCP例子中,我們采用了5個OpenCL內(nèi)核,即7×7濾波器、縮放、CST、調(diào)整和誤差擴散,每個都同時作為1個計算單元運行。

執(zhí)行模型采用Altera的OpenCL上下文、命令隊列和內(nèi)存對象。CCP流水線是在一個ARM內(nèi)核上運行的基于C語言的程序。它管理FPGA加速器架構(gòu)中的主機程序和CU之間的所有切換。圖18是一個簡化系統(tǒng)軟件接口圖,示出了哪些單元是由用戶提供的,Altera公司又提供了什么。

 

 

圖字:

應(yīng)用SW MFP復(fù)印流水線

程序;OpenCL上下文;OpenCL命令隊列;內(nèi)存對象

內(nèi)核;內(nèi)核

OpenCL HAL

OpenCL用戶空間驅(qū)動程序

FPGA非OpenCL部分Linux內(nèi)核空間驅(qū)動程序;OpenCLLinux內(nèi)核空間驅(qū)動程序

器件——FPGA

內(nèi)核;本地內(nèi)存;內(nèi)核;本地內(nèi)存;內(nèi)核;本地內(nèi)存

VI. 效果

所有CCP算法都是采用運行在x86 PC的標(biāo)準(zhǔn)C語言開發(fā)的。我們創(chuàng)建了一個簡單的基于C語言的CCP流水線來順序執(zhí)行算法。然后,在x86和Cyclone V SoC ARM Cortex A9 CPU上同時執(zhí)行基于C語言的流水線?;贑語言的流水線性能和效果是我們的標(biāo)準(zhǔn)參考。

之后,將每個基于C語言的CCP算法移植到OpenCL,并在x86上重新測試內(nèi)核。然后,使用AOC重新編譯標(biāo)準(zhǔn)OpenCL內(nèi)核,并在Cyclone V SoC開發(fā)平臺上進行測試。最后一步是修改OpenCL內(nèi)核和包括Altera的通道廠商特定優(yōu)化。

基于C語言的CCP運行于頻率為3.1GHz的單核i7-3770,以及輸出16.6 PPM的32GB的DDR3內(nèi)存。同樣基于C語言的CCP在一個Cyclone V SoC Cortex A9內(nèi)核上執(zhí)行,運行頻率為800MHz,還有輸出1.4PPM的1GB的DDR3內(nèi)存。

 

 

請注意,在基于C語言的CCP實驗中,我們使用了最高水平的GCC Linux優(yōu)化——O3選項。不過沒有嘗試使用GPU/NEON協(xié)處理器。

在一個CSXFC6D6F31C8N Cyclone V器件上以74MHz運行的標(biāo)準(zhǔn)OpenCL內(nèi)核輸出10PPM。包括Altera的廠商增強的優(yōu)化的CCP實現(xiàn)了72PPM。由于Altera的通道最大限度地減少了進/出全局內(nèi)存的讀取/寫入結(jié)果,以及內(nèi)核中的循環(huán)流水線,性能提升了7倍。

 

 

A. CCP多頁性能

利用Altera通道擴展,具體內(nèi)核執(zhí)行時間不再是疊加性的。一旦數(shù)據(jù)進行了處理,并由內(nèi)核N生成了結(jié)果,內(nèi)核N+1即可開始其處理。這種并行處理使得CCP以最緩慢的內(nèi)核速度執(zhí)行,可忽略因流水線充填和排空造成的延遲。圖19 CCP通道排序顯示了這些通道的性能優(yōu)勢。

由于非順序輸入訪問模式,我們當(dāng)前的縮放內(nèi)核實現(xiàn)方法不能接收來自通道的數(shù)據(jù)。像這樣的濾波器結(jié)果必須首先寫入內(nèi)存,然后可以啟動縮放內(nèi)核。進一步的通道優(yōu)化有可能消除中間全局內(nèi)存存儲/檢索操作。三個通道和每個通道2行緩沖陣列將消除濾波器到定標(biāo)器(Scaler)全局內(nèi)存操作。

 

 

圖字:

輸入圖像;每幅圖像約100MB

濾波器內(nèi)核

縮放內(nèi)核

CST內(nèi)核

TRC內(nèi)核;每幅圖像約132MB

誤差擴散內(nèi)核;每幅圖像約16MB

FCOT;2-N COT;流水線完成延遲

N份總時間;時間

首次復(fù)印時間(FCOT)是測量完成第一張圖像處理需要多長時間。2-N-COT是處理第二張和任何后續(xù)圖像所需要的時間。在圖19中我們看到,在濾波器和擴展內(nèi)核處理完第一張圖像后,它們可以立即開始處理第二張圖像。隨著處理的圖像數(shù)目增加,CCP啟動延遲和空延遲可以分?jǐn)偟綀D像總數(shù)N。

 

 

圖字:

OpenCL復(fù)印流水線加速

輸入頁數(shù)

在C8速度等級測量的OpenCL CCP性能是最低成本/最低性能的Cyclone V系列。圖20示出了作為輸入頁面數(shù)量函數(shù)的基準(zhǔn)CCP性能。Cyclone V C6速度等級最快,會增加20%的性能。

相比Cyclone V C6,Altera的Arria V SoC系列FPGA預(yù)計將提高15%的性能。圖21顯示了三個速度等級的實際和預(yù)期性能。

 

 

圖字:

OpenCL復(fù)印流水線加速

Cyclone V PPM C6速度等級 Cyclone V PPM C8速度等級

Cyclone V PPM C6速度等級

Arria V SoC PPM

輸入頁數(shù)

B. 器件利用率

與所有Altera的擴展一起優(yōu)化的CCP消耗83%的5CSXFC6D6F31C8N邏輯資源。崩潰(breakdown)總結(jié)于表3中。

 

 

VII. 擴展和增強

A. 擴展CCP到整個系統(tǒng)

下一步驟是采用CCP并將其連接到數(shù)據(jù)輸入的掃描裝置和數(shù)據(jù)輸出的打印裝置。這將需要增加一個校準(zhǔn)內(nèi)核和簡單的CST將RGB轉(zhuǎn)換為L*a*b*。根據(jù)在掃描設(shè)備中使用的傳感器陣列類型,即電荷耦合器件或接觸式圖像傳感器,紅、綠和藍行數(shù)據(jù)可能無法在垂直方向?qū)?zhǔn)。行數(shù)據(jù)的對準(zhǔn)可能需要幾十行緩沖區(qū),這在FPGA內(nèi)存資源方面是非常昂貴的。為了緩解這一問題,原始RGB數(shù)據(jù)將使用DMA暫時保存在HPS內(nèi)存中。然后,紅、綠、藍、行數(shù)據(jù)的對準(zhǔn)可以使用DMA指針和偏移來完成。然后校準(zhǔn)對準(zhǔn)的RGB數(shù)據(jù),并通過通道傳遞到基本CST內(nèi)核。

基本CST內(nèi)核將依次使用通道直接將數(shù)據(jù)傳遞到濾波器輸入模塊。我們的期望是,這些額外內(nèi)核將適合未使用的邏輯和內(nèi)存資源。圖22顯示了完整的復(fù)印流水線。請注意,除了有全掃描儀接口的CCP,分割、無損壓縮模塊和引擎級都不適合Cyclone V SoC器件。完整的圖像路徑將需要更大型的FPGA。

B. ARM內(nèi)核和NEON協(xié)處理

除了FPGA架構(gòu)和OpenCL,Altera SoC系列器件還采用了雙核ARM Cortex A9內(nèi)核和NEON協(xié)處理器。圖像處理流水線的某些模塊可以卸載到CPU。在分割操作和完成壓縮/解壓縮功能的特定部分可以使用NEON提供的有SIMD加速的CPU來完成。

C. 動態(tài)FPGA可重編程性

Altera SoC FPGA提供的動態(tài)重新配置允許用戶重新編程FPGA架構(gòu),同時CPU運算繼續(xù)運行。這個特點在MFP中特別有用,而其中的一些操作永遠不可能同時發(fā)生。例如,掃描和復(fù)印操作共享6個共同輸入功能,如圖22所示。其余的復(fù)印操作、CST壓縮,以及剩下的掃描輸入功能、JPEG壓縮將永遠不會同時運行。因此,我們可以創(chuàng)建兩套內(nèi)核,其中包括共同的掃描儀功能和多種后端功能。這些流水線可以在給定所需時間基于MFP操作來動態(tài)加載。在一個傳統(tǒng)ASIC中,這些模塊和數(shù)據(jù)通路都必須包括在內(nèi)。動態(tài)圖像路徑的重新配置可以實現(xiàn)更小的FPGA,從而實現(xiàn)更低成本的圖像路徑。

D. Arria V和Arria 10 SoC

Altera的Arria V和最近發(fā)布的Arria10 SoC為功能齊全的MFP圖像路徑解決方案提供了一個可擴展平臺。增加的內(nèi)存、更快的時鐘速度,加上更高性能ARM內(nèi)核的大型FPGA架構(gòu)為圖像處理和一般計算要求提供了完整解決方案。

 

 

圖字:

復(fù)印流水線

來自CCD或基于CIS掃描儀的RGB;分割;圖像內(nèi)存;無損解壓縮;圖像調(diào)整;引擎接口

掃描儀接口;校準(zhǔn)和調(diào)整;CST(RGB到Lab);濾波器;縮放R & E;CST(Lab到CMYK);調(diào)整;誤差擴散;無損壓縮;至引擎

掃描出口流水線

來自CCD或基于CIS掃描儀的RGB;分割;圖像內(nèi)存;JGEG解壓縮;至網(wǎng)絡(luò)

掃描儀接口;校準(zhǔn)和調(diào)整;CST(RGB到Lab);濾波器;縮放R & E;JGEG壓縮;JGEG壓縮;出口處理;無損壓縮

通用內(nèi)核/模塊;流水線特定內(nèi)核/模塊

VIII. 總結(jié)和結(jié)論

OpenCL和Altera的工具鏈有助于2名全職OpenCL軟件工程師、1名全職硬件工程師和其他兼職人員的一個小型團隊在約4.5個月內(nèi)實現(xiàn)CCP。團隊可從C語言算法開始,創(chuàng)建一個高水平的基于C語言的CCP圖像流水線,將算法移植到OpenCL,在x86平臺上測試OpenCL以驗證基本功能,增加廠商特定擴展,學(xué)會Altera OpenCL工具流程,最后在Altera的參考平臺上測試結(jié)果。團隊還可開發(fā)一個測試環(huán)境來驗證位級別OpenCL結(jié)果的正確性。此外,團隊可創(chuàng)建一個基于Web的應(yīng)用,允許用戶選擇源圖像,通過一個基于C語言的CCP和OpenCL加速的CCP運行圖像,顯示半色調(diào)圖像,并提供計時結(jié)果。軟件工程師可以沒有以往的FPGA經(jīng)驗,硬件工程師也可以沒有以往的OpenCL經(jīng)驗。

這種新模式演示了一個小型團隊如何可以快速從一組算法到全面功能,優(yōu)化以硬件實現(xiàn)的流水線。大約50%的開發(fā)時間專注于優(yōu)化,包括最大限度地提高性能和最大限度地減少FPGA資源利用。該團隊預(yù)計,后續(xù)項目開發(fā)時間可減少50%。

MFP廠商不再需要投入數(shù)百萬美元和多年時間來開發(fā)ASIC或SoC。OpenCL和Altera SoC器件提供了一種在最短時間內(nèi)實現(xiàn)高性能、低成本MFP控制器的新模式。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉