⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè)-old > 教程中(zhōng)心(xīn) > 認識FPGA >

使用(yòng)FPGA优化(huà)視頻水(shuǐ)印(yìn)操作的(de)OpenCL應(yìng)用(yòng)

發(fà)布(bù)时(shí)間(jiān):2023-06-30   作者(zhě):FPGA大神 浏覽量(liàng):
 視頻流和(hé)下(xià)载通(tòng)常会(huì)耗掉消費者(zhě)絕大部(bù)分(fēn)互聯网(wǎng)流量(liàng),同(tóng)时(shí)也(yě)是(shì)雲(yún)計(jì)算技術(shù)發(fà)展(zhǎn)的(de)主(zhǔ)要(yào)推動(dòng)力。对(duì)視頻流和(hé)下(xià)载需求的(de)持(chí)續增长,正(zhèng)在(zài)驅動(dòng)視頻处理應(yìng)用(yòng)邁出(chū)專業系(xì)統領域,步入(rù)數據(jù)中(zhōng)心(xīn)。这(zhè)一(yī)應(yìng)用(yòng)模式的(de)轉(zhuǎn)變(biàn)需要(yào)具備快(kuài)速擴展(zhǎn)能(néng)力的(de)計(jì)算节(jié)點(diǎn)来(lái)滿足視頻內(nèi)容制作和(hé)分(fēn)發(fà)的(de)各(gè)个(gè)不(bù)同(tóng)高(gāo)計(jì)算強(qiáng)度(dù)階(jiē)段(duàn)的(de)需求,如(rú)轉(zhuǎn)碼需求和(hé)水(shuǐ)印(yìn)需求。
  我(wǒ)们(men)近(jìn)期(qī)使用(yòng)赛靈思(sī)SDAccel™開(kāi)發(fà)环(huán)境来(lái)編譯和(hé)优化(huà)專为(wèi)FPGA加速卡(kǎ)采用(yòng)OpenCLTM編写的(de)視頻水(shuǐ)印(yìn)應(yìng)用(yòng)。視頻內(nèi)容提(tí)供商使用(yòng)水(shuǐ)印(yìn)起到(dào)廣告和(hé)內(nèi)容保護的(de)作用(yòng)。我(wǒ)们(men)的(de)目的(de)是(shì)設計(jì)一(yī)種(zhǒng)能(néng)处理運行在(zài)Alpha Data ADM-PCIE-7V3卡(kǎ)上(shàng),吞吐量(liàng)为(wèi)30fps,分(fēn)辨率为(wèi)1080p的(de)高(gāo)清(qīng)(HD)視頻的(de)水(shuǐ)印(yìn)應(yìng)用(yòng)。
  SDAccel開(kāi)發(fà)环(huán)境能(néng)讓設計(jì)人(rén)員先(xiān)用(yòng)OpenCL編写應(yìng)用(yòng),然後(hòu)在(zài)无需了(le)解(jiě)底层FPGA实現(xiàn)工具的(de)情(qíng)況下(xià)把應(yìng)用(yòng)編譯到(dào)FPGA中(zhōng)。可(kě)以(yǐ)以(yǐ)这(zhè)種(zhǒng)視頻水(shuǐ)印(yìn)應(yìng)用(yòng)为(wèi)例来(lái)介紹SDAccel中(zhōng)的(de)主(zhǔ)要(yào)优化(huà)技巧。
  带(dài)标(biāo)識插入(rù)功能(néng)的(de)視頻水(shuǐ)印(yìn)
  該視頻水(shuǐ)印(yìn)算法的(de)主(zhǔ)要(yào)功能(néng)是(shì)在(zài)視頻流的(de)特(tè)定(dìng)位置覆蓋一(yī)个(gè)标(biāo)識。用(yòng)于(yú)水(shuǐ)印(yìn)的(de)标(biāo)識可(kě)以(yǐ)是(shì)活動(dòng)的(de),也(yě)可(kě)以(yǐ)是(shì)静(jìng)止的(de)。活動(dòng)标(biāo)識一(yī)般采用(yòng)簡短(duǎn)的(de)重(zhòng)複性(xìng)視頻片(piàn)段(duàn)来(lái)实現(xiàn),静(jìng)止标(biāo)識則采用(yòng)静(jìng)止图(tú)像。

  廣播企業宣傳自(zì)己視頻流最(zuì)常用(yòng)的(de)方(fāng)法是(shì)把企業标(biāo)識用(yòng)作静(jìng)止水(shuǐ)印(yìn),因(yīn)此(cǐ)成(chéng)为(wèi)我(wǒ)们(men)实例設計(jì)的(de)目标(biāo)。該應(yìng)用(yòng)根(gēn)據(jù)下(xià)列等式,以(yǐ)逐像素粒(lì)度(dù)插入(rù)静(jìng)止标(biāo)識。 

輸入(rù)和(hé)輸出(chū)幀为(wèi)二(èr)維阵(zhèn)列,像素使用(yòng)YCbCr色(sè)域表(biǎo)达(dá)。在(zài)該色(sè)域中(zhōng),每个(gè)像素用(yòng)三(sān)个(gè)分(fēn)量(liàng)表(biǎo)达(dá)。Y表(biǎo)示亮(liàng)度(dù)分(fēn)量(liàng),Cb表(biǎo)示色(sè)度(dù)藍(lán)色(sè)色(sè)差分(fēn)量(liàng),Cr表(biǎo)示色(sè)度(dù)紅(hóng)色(sè)色(sè)差分(fēn)量(liàng)。每个(gè)分(fēn)量(liàng)都用(yòng)一(yī)个(gè)8位值表(biǎo)达(dá),因(yīn)为(wèi)每个(gè)像素为(wèi)24位。

  該标(biāo)識是(shì)一(yī)个(gè)包(bāo)含待插入(rù)內(nèi)容的(de)二(èr)維图(tú)像。掩膜也(yě)是(shì)一(yī)个(gè)图(tú)像,但只(zhī)包(bāo)含标(biāo)識的(de)轮廓图(tú)。掩膜的(de)像素可(kě)以(yǐ)是(shì)白色(sè)或(huò)黑(hēi)色(sè)。掩膜的(de)白色(sè)像素表(biǎo)示标(biāo)識的(de)插入(rù)位置,黑(hēi)色(sè)像素則表(biǎo)示原始像素未被(bèi)觸及(jí)的(de)地(dì)方(fāng)。图(tú)1所(suǒ)示的(de),就(jiù)是(shì)这(zhè)種(zhǒng)視頻水(shuǐ)印(yìn)算法的(de)運算方(fāng)式实例。

图(tú)1 - 工作中(zhōng)的(de)視頻水(shuǐ)印(yìn)算法


 目标(biāo)系(xì)統和(hé)初始实現(xiàn)方(fāng)案(àn)
  我(wǒ)们(men)運行該應(yìng)用(yòng)的(de)系(xì)統如(rú)图(tú)2所(suǒ)示。該系(xì)統由(yóu)Alpha Data ADMPCIE-7V3卡(kǎ)組成(chéng),該卡(kǎ)通(tòng)过(guò)PCIe鍊(liàn)路(lù)與(yǔ)x86处理器通(tòng)信(xìn)。在(zài)該系(xì)統中(zhōng),主(zhǔ)機(jī)处理器從磁盤提(tí)取(qǔ)輸入(rù)視頻流,将其傳輸到(dào)設備全(quán)局(jú)內(nèi)存中(zhōng)。設備全(quán)局(jú)內(nèi)存位于(yú)FPGA卡(kǎ)上(shàng),可(kě)供FPGA直(zhí)接訪問(wèn)。除把視頻幀存放(fàng)到(dào)設備全(quán)局(jú)內(nèi)存中(zhōng)外(wài),标(biāo)識和(hé)掩膜也(yě)從主(zhǔ)機(jī)傳輸到(dào)FPGA加速器卡(kǎ)上(shàng)并存入(rù)片(piàn)上(shàng)內(nèi)存中(zhōng),以(yǐ)充分(fēn)利用(yòng)BRAM內(nèi)存的(de)低时(shí)延优勢。因(yīn)为(wèi)本(běn)應(yìng)用(yòng)使用(yòng)的(de)是(shì)一(yī)个(gè)静(jìng)止标(biāo)識,只(zhī)需在(zài)片(piàn)上(shàng)內(nèi)存中(zhōng)存儲静(jìng)止图(tú)像和(hé)布(bù)局(jú)位置數據(jù)。 


图(tú)2 - 視頻水(shuǐ)印(yìn)應(yìng)用(yòng)系(xì)統總(zǒng)覽图(tú)

創建數據(jù)後(hòu),主(zhǔ)機(jī)处理器会(huì)給(gěi)FPGA架構中(zhōng)的(de)水(shuǐ)印(yìn)內(nèi)核發(fà)送一(yī)个(gè)啟動(dòng)信(xìn)号(hào)。該信(xìn)号(hào)觸發(fà)內(nèi)核完成(chéng)三(sān)件(jiàn)工作:開(kāi)始從設備全(quán)局(jú)內(nèi)存獲取(qǔ)輸入(rù)視頻幀;在(zài)掩膜定(dìng)義的(de)位置插入(rù)标(biāo)識;将处理过(guò)的(de)幀傳輸回(huí)設備全(quán)局(jú)处理器,等待处理器調用(yòng)。

  視頻流中(zhōng)每幀的(de)數據(jù)傳輸與(yǔ)計(jì)算的(de)協調工作使用(yòng)图(tú)3所(suǒ)示的(de)代(dài)碼完成(chéng)。

图(tú)3 - 用(yòng)于(yú)協調每幀數據(jù)傳輸和(hé)計(jì)算的(de)代(dài)碼

該代(dài)碼運行在(zài)主(zhǔ)機(jī)处理器上(shàng),負責發(fà)送視頻幀到(dào)FPGA加速器卡(kǎ),啟動(dòng)加速器,然後(hòu)從FPGA加速器卡(kǎ)取(qǔ)回(huí)处理後(hòu)的(de)幀。

  FPGA水(shuǐ)印(yìn)算法的(de)首个(gè)实現(xiàn)方(fāng)案(àn)如(rú)图(tú)4所(suǒ)示。这(zhè)是(shì)一(yī)个(gè)功能(néng)正(zhèng)确的(de)應(yìng)用(yòng)实現(xiàn)方(fāng)案(àn),但沒(méi)有(yǒu)進(jìn)行任何性(xìng)能(néng)优化(huà)或(huò)为(wèi)充分(fēn)利用(yòng)FPGA架構的(de)功能(néng)進(jìn)行考慮。因(yīn)此(cǐ)該代(dài)碼在(zài)SDAccel中(zhōng)編譯完成(chéng)後(hòu),在(zài)Alpha Data卡(kǎ)上(shàng)運行得到(dào)的(de)最(zuì)大吞吐量(liàng)僅为(wèi)0.5fps。

  從图(tú)4的(de)代(dài)碼中(zhōng)可(kě)以(yǐ)看(kàn)到(dào),这(zhè)種(zhǒng)水(shuǐ)印(yìn)算法不(bù)是(shì)一(yī)種(zhǒng)高(gāo)計(jì)算強(qiáng)度(dù)的(de)設計(jì)。大多(duō)數时(shí)間(jiān)花在(zài)訪問(wèn)內(nèi)存,读(dú)取(qǔ)和(hé)写入(rù)視頻幀上(shàng)。因(yīn)此(cǐ)我(wǒ)们(men)在(zài)优化(huà)实例設計(jì)时(shí),把重(zhòng)點(diǎn)放(fàng)在(zài)优化(huà)內(nèi)存带(dài)宽(kuān)上(shàng)。

 图(tú)4 - 水(shuǐ)印(yìn)內(nèi)核的(de)初始实現(xiàn)方(fāng)案(àn)

使用(yòng)矢量(liàng)化(huà)优化(huà)內(nèi)存訪問(wèn)

  與(yǔ)其他(tā)软(ruǎn)件(jiàn)可(kě)編程架構相比,FPGA架構的(de)优勢之一(yī)在(zài)于(yú)靈活性(xìng)強(qiáng),能(néng)配置連(lián)接內(nèi)存的(de)總(zǒng)線(xiàn)。SDAccel能(néng)根(gēn)據(jù)具體(tǐ)的(de)應(yìng)用(yòng)內(nèi)核創建用(yòng)于(yú)連(lián)接內(nèi)存的(de)定(dìng)制化(huà)數據(jù)路(lù)徑和(hé)架構。通(tòng)过(guò)修改代(dài)碼,一(yī)次(cì)可(kě)以(yǐ)处理多(duō)个(gè)像素,從而(ér)能(néng)够從內(nèi)核中(zhōng)調用(yòng)更(gèng)高(gāo)的(de)內(nèi)存带(dài)宽(kuān)。这(zhè)个(gè)过(guò)程稱之为(wèi)矢量(liàng)化(huà)。

  矢量(liàng)化(huà)的(de)程度(dù)是(shì)否合适,取(qǔ)決于(yú)具體(tǐ)應(yìng)用(yòng)和(hé)所(suǒ)使用(yòng)的(de)FPGA加速器卡(kǎ)。以(yǐ)Alpha Data卡(kǎ)为(wèi)例,設備全(quán)局(jú)內(nèi)存接口(kǒu)宽(kuān)度(dù)为(wèi)512位,这(zhè)與(yǔ)SDAccel为(wèi)內(nèi)核提(tí)供的(de)最(zuì)大AXI互聯宽(kuān)度(dù)一(yī)致(zhì)。鉴于(yú)最(zuì)大带(dài)宽(kuān)为(wèi)512位,該應(yìng)用(yòng)調整为(wèi)每次(cì)处理20个(gè)像素(24位/像素×20像素=504位)。SDAccel完全(quán)支持(chí)矢量(liàng)數據(jù)類(lèi)型。因(yīn)此(cǐ)就(jiù)本(běn)應(yìng)用(yòng)而(ér)言,代(dài)碼的(de)矢量(liàng)化(huà)非(fēi)常簡單,就(jiù)是(shì)把所(suǒ)有(yǒu)阵(zhèn)列的(de)數據(jù)類(lèi)型修改为(wèi)char20(如(rú)图(tú)5所(suǒ)示),这(zhè)樣(yàng)吞吐量(liàng)就(jiù)能(néng)达(dá)到(dào)12fps

图(tú)5 - 矢量(liàng)化(huà)後(hòu)的(de)內(nèi)核代(dài)碼

使用(yòng)突發(fà)模式优化(huà)內(nèi)存訪問(wèn)

  虽然矢量(liàng)化(huà)能(néng)顯著改善應(yìng)用(yòng)性(xìng)能(néng),但仍不(bù)足以(yǐ)实現(xiàn)30fps的(de)吞吐量(liàng)目标(biāo)。該應(yìng)用(yòng)仍然受內(nèi)存局(jú)限,因(yīn)为(wèi)內(nèi)核每次(cì)只(zhī)能(néng)向(xiàng)內(nèi)存傳輸20个(gè)像素。为(wèi)減輕(qīng)內(nèi)存限制对(duì)應(yìng)用(yòng)造成(chéng)的(de)影響,我(wǒ)们(men)不(bù)得不(bù)修改內(nèi)核代(dài)碼,以(yǐ)生(shēng)成(chéng)到(dào)內(nèi)存的(de)突發(fà)读(dú)取(qǔ)/写入(rù)操作,從而(ér)实現(xiàn)大于(yú)20个(gè)像素的(de)數據(jù)集。修改後(hòu)的(de)內(nèi)核代(dài)碼見(jiàn)图(tú)6。

图(tú)6 - 針(zhēn)对(duì)突發(fà)數據(jù)傳輸优化(huà)的(de)內(nèi)核代(dài)碼

代(dài)碼內(nèi)核首先(xiān)修改的(de)是(shì)在(zài)內(nèi)核中(zhōng)定(dìng)義片(piàn)上(shàng)存儲,以(yǐ)便每次(cì)存儲像素块(kuài)。片(piàn)上(shàng)內(nèi)存用(yòng)內(nèi)核代(dài)碼中(zhōng)聲明(míng)的(de)阵(zhèn)列来(lái)定(dìng)義。为(wèi)啟動(dòng)到(dào)內(nèi)存的(de)突發(fà)事(shì)务处理,該代(dài)碼实例化(huà)memcpy命令,以(yǐ)将數據(jù)块(kuài)從DDR移到(dào)內(nèi)核內(nèi)的(de)BRAM存儲系(xì)統中(zhōng)。根(gēn)據(jù)片(piàn)上(shàng)內(nèi)存資源的(de)大小和(hé)待处理數據(jù)的(de)量(liàng),一(yī)个(gè)視頻幀可(kě)分(fēn)割成(chéng)20个(gè)1920×54像素块(kuài)(如(rú)图(tú)7所(suǒ)示)。

图(tú)7 - 把視頻幀分(fēn)區(qū)成(chéng)數據(jù)块(kuài)

當memcry命令把數據(jù)块(kuài)放(fàng)置到(dào)內(nèi)核阵(zhèn)列中(zhōng),該算法就(jiù)会(huì)在(zài)數據(jù)块(kuài)上(shàng)執行水(shuǐ)印(yìn)算法,然後(hòu)把結果(guǒ)放(fàng)回(huí)內(nèi)核阵(zhèn)列。數據(jù)块(kuài)处理的(de)結果(guǒ)随後(hòu)使用(yòng)memcry命令傳送回(huí)DDR內(nèi)存。反(fǎn)複執行这(zhè)个(gè)操作20次(cì),直(zhí)至(zhì)給(gěi)定(dìng)幀中(zhōng)所(suǒ)有(yǒu)的(de)數據(jù)块(kuài)处理完畢。通(tòng)过(guò)修改內(nèi)核代(dài)碼,系(xì)統性(xìng)能(néng)达(dá)到(dào)了(le)38fps,超过(guò)了(le)既定(dìng)的(de)30fps目标(biāo)。

  應(yìng)用(yòng)前(qián)景廣泛

  使用(yòng)SDAccel開(kāi)發(fà)本(běn)文(wén)介紹的(de)这(zhè)類(lèi)應(yìng)用(yòng)时(shí)所(suǒ)進(jìn)行的(de)必要(yào)优化(huà)屬于(yú)软(ruǎn)件(jiàn)优化(huà)。因(yīn)此(cǐ)这(zhè)些优化(huà)工作與(yǔ)從其他(tā)处理架構中(zhōng)(如(rú)GPU)獲取(qǔ)性(xìng)能(néng)所(suǒ)開(kāi)展(zhǎn)的(de)优化(huà)類(lèi)似。使用(yòng)SDAccel後(hòu),讓PCIe鍊(liàn)路(lù)工作、驅動(dòng)程序、IP布(bù)局(jú)和(hé)互聯等细(xì)节(jié)都不(bù)是(shì)問(wèn)題(tí),使我(wǒ)们(men)就(jiù)像設計(jì)人(rén)員一(yī)樣(yàng)只(zhī)需集中(zhōng)精力開(kāi)發(fà)目标(biāo)應(yìng)用(yòng)。

  我(wǒ)们(men)在(zài)水(shuǐ)印(yìn)應(yìng)用(yòng)中(zhōng)所(suǒ)做的(de)优化(huà)适用(yòng)于(yú)使用(yòng)SDAccel編譯过(guò)的(de)所(suǒ)有(yǒu)應(yìng)用(yòng)。事(shì)实上(shàng)視頻水(shuǐ)印(yìn)應(yìng)用(yòng)就(jiù)是(shì)一(yī)个(gè)很棒的(de)技巧講解(jiě)案(àn)例,詳细(xì)介紹了(le)赛靈思(sī)SDAccel中(zhōng)推出(chū)的(de)优化(huà)方(fāng)法。


温(wēn)馨提(tí)示:明(míng)德揚除了(le)培訓学習還(huán)有(yǒu)項目承接業务,擅长的(de)項目主(zhǔ)要(yào)包(bāo)括的(de)方(fāng)向(xiàng)有(yǒu)以(yǐ)下(xià)幾(jǐ)个(gè)方(fāng)面(miàn):

1. MIPI視頻拼接
2. SLVS-EC轉(zhuǎn)MIPI接口(kǒu)(IMX472 IMX492)
3. PCIE采集系(xì)統
4. 图(tú)像項目
5. 高(gāo)速多(duō)通(tòng)道(dào)ADDA系(xì)統
6. 基于(yú)FPGA板卡(kǎ)研發(fà)
7. 多(duō)通(tòng)道(dào)高(gāo)靈敏電(diàn)荷放(fàng)大器
8. 射頻前(qián)端

http://old.mdy-edu.com/xmucjie/2023/0201/1865.html

點(diǎn)擊→了(le)解(jiě)項目承接業务詳情(qíng)


需要(yào)了(le)解(jiě)相關(guān)信(xìn)息可(kě)以(yǐ)聯系(xì):吴老(lǎo)师(shī)18022857217(微信(xìn)同(tóng)号(hào))



   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨