chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

hash算法在FPGA中的實(shí)現(xiàn)(2)

CHANBAEK ? 來(lái)源: FPGA的現(xiàn)今未 ? 作者: FPGA的現(xiàn)今未 ? 2023-09-07 17:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在前面的文章中:hash算法FPGA中的實(shí)現(xiàn)(一)——hash表的組建,記錄了關(guān)于hash表的構(gòu)建,這里記錄另外一個(gè)話題,就是hash鏈表。我們知道,只要有hash的地方,就一定有沖突,關(guān)鍵就看如何解決沖突了。這里介紹兩種常見(jiàn)的設(shè)計(jì)hash鏈表的方案。當(dāng)然,解決hash沖突也不一定就要用鏈表的方法,還有其他方案。

hash鏈表說(shuō)明

首先說(shuō)下什么hash鏈表?還是借用上一篇文章中的圖片來(lái)說(shuō)明這個(gè)問(wèn)題,如下圖所示。hash鏈表是為了解決hash沖突而建立的一種數(shù)據(jù)結(jié)構(gòu)。當(dāng)某個(gè)key計(jì)算出hash值后,對(duì)應(yīng)的hash桶中已經(jīng)有了數(shù)據(jù),出現(xiàn)了沖突,那這個(gè)時(shí)候就需要用一個(gè)鏈表來(lái)將具體相同hash值的key“鏈”起來(lái),方便后續(xù)的查詢。

圖片

圖中關(guān)于hash鏈表的示意,只是一種簡(jiǎn)單的表示,在FPGA的實(shí)際設(shè)計(jì)中,情況往往要復(fù)雜得多。

方案1——DDR

有的時(shí)候,我們并不知道鏈表到底會(huì)有多長(zhǎng),那么自然地會(huì)想到用DDR來(lái)存放鏈表。如何在DDR里組織數(shù)據(jù)結(jié)構(gòu)呢?一般來(lái)講,hash鏈表的數(shù)據(jù)結(jié)構(gòu)如下:

圖片

hash桶中除了上文所講的數(shù)據(jù)結(jié)構(gòu)外,還有一個(gè)下一鏈的地址addr1,它指向鏈表的一個(gè)節(jié)點(diǎn),該鏈表節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)和hash桶類似,也包括key值和地址,如圖中key A和addr2,對(duì)于由addr2指向的最后一鏈,只有key B和最后一鏈標(biāo)記NULL。

這樣的數(shù)據(jù)結(jié)構(gòu),在DDR中存放的時(shí)候,顯然是不高效的。因?yàn)槊刻幚硪淮蝖ash,有多少個(gè)鏈表節(jié)點(diǎn)就要讀多少次DDR。我們知道DDR的性能有2個(gè)指標(biāo),一個(gè)是Gbps,一個(gè)是Mpps。處理一次hash時(shí)讀DDR的次數(shù)越多,處理的hash次數(shù)就會(huì)越少,性能就越低,所以我們優(yōu)化鏈表的數(shù)據(jù)結(jié)構(gòu),降低對(duì)DDR的讀取次數(shù)。

優(yōu)化的思路和hash桶的數(shù)據(jù)結(jié)構(gòu)類似,如下圖所示:

圖片

在一個(gè)節(jié)點(diǎn)中,不再只存放一個(gè)key,上圖示例是存放了5個(gè)key。實(shí)際一次DDR的讀寫,可能最少是128byte或者256byte,以104bit的五元組為key來(lái)計(jì)算,可以存放9個(gè)key。一次可以讀取N個(gè)key,相比以前的鏈表方案,讀DDR的次數(shù)為原來(lái)的N分之一,性能提升N倍。

將這個(gè)話題繼續(xù)引申下,如果hash桶存放在DDR中,那又如何構(gòu)建hash表呢?如果真的需要把hash桶存放在DDR中,hash表的構(gòu)建和hash鏈表的構(gòu)建就是完全一模一樣的了。

方案二——內(nèi)部RAM

如果考慮所有的沖突次數(shù)在一定范圍之內(nèi),那么可以把所有的鏈表存放在一起,即存放在一個(gè)內(nèi)部的RAM中,實(shí)現(xiàn)對(duì)所有hash桶的鏈表管理。如下圖所示:

圖片

以4個(gè)hash桶為例子說(shuō)明鏈表的管理,key1的hash值為0,落入到hash桶0,因此時(shí)hash桶中的指針指向地址0,即addr0,addr0為空,即可以寫入key1在地址0中。同樣key2的hash值也為0,由于addr0中已經(jīng)有數(shù)據(jù),此時(shí)addr1為空,因此將key2寫入addr1中,同時(shí)把a(bǔ)ddr1寫入key1中的下一鏈,完成鏈表的構(gòu)建。

其他的key值大家可以自行推敲演練。采用這樣的方案,所有的鏈表都存放在一個(gè)ram中,處理沖突的次數(shù)是有限的,相比DDR的方案,還是簡(jiǎn)單一些。

總結(jié)

關(guān)于上述2種方案,這里做一個(gè)簡(jiǎn)單的總結(jié)。

DDR鏈表內(nèi)部RAM鏈表
應(yīng)用場(chǎng)景萬(wàn)能場(chǎng)景,使用無(wú)限制
沖突次數(shù)無(wú)限制,只要ddr有足夠空間對(duì)總體沖突次數(shù)(RAM的深度)有限制,超過(guò)后hash表無(wú)法寫入,或者需要定期老化
實(shí)現(xiàn)難易程度相對(duì)復(fù)雜,涉及到DDR的讀改寫操作相對(duì)簡(jiǎn)單,但是也要實(shí)現(xiàn)對(duì)RAM的讀改寫操作,
性能低,需要串行讀DDR,鏈表越長(zhǎng),性能越低高,雖然相比DDR鏈表性能高,同樣也是鏈表越長(zhǎng),性能越低。

不管采用哪種方案,高效地組建表項(xiàng),減少對(duì)hash表和鏈表的訪問(wèn)次數(shù)是hash處理性能的關(guān)鍵。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1650

    文章

    22207

    瀏覽量

    626892
  • DDR
    DDR
    +關(guān)注

    關(guān)注

    11

    文章

    740

    瀏覽量

    68028
  • Hash算法
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    7583
  • 鏈表
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    10966
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA實(shí)現(xiàn)PID算法

    本帖最后由 發(fā)燒友LV 于 2014-12-29 20:13 編輯 FPGA實(shí)現(xiàn)PID算法,面臨著小數(shù)的計(jì)算,請(qǐng)問(wèn)大家一般是怎么處
    發(fā)表于 12-03 21:59

    實(shí)用AGC算法的工作原理及音頻FPGA的應(yīng)用

    放大調(diào)整后,確保了通信系統(tǒng)信號(hào)輸出的幅度可基本維持恒定的狀態(tài)。文中將AGC算法應(yīng)用于音頻信號(hào)處理,可實(shí)現(xiàn)FPGA,并可有效降低音頻信號(hào)輸
    發(fā)表于 10-21 16:42

    1HASH函數(shù)軟件自保護(hù)的應(yīng)用

    本文介紹了HASH 函數(shù)的原理,并重點(diǎn)討論了其中的SHA-1 算法及其軟件自保護(hù)的應(yīng)用和實(shí)現(xiàn)技術(shù)。關(guān)鍵詞:
    發(fā)表于 08-07 09:28 ?17次下載

    MACFPGA的高效實(shí)現(xiàn)

    乘累加器DSP算法中有著舉足輕重的地位?,F(xiàn)在,很多前端DSP算法都通過(guò)FPGA實(shí)現(xiàn)。結(jié)合FPGA
    發(fā)表于 08-06 14:41 ?29次下載

    AESSubBytes算法FPGA實(shí)現(xiàn)

    介紹了AES,SubBytes算法FPGA的具體實(shí)現(xiàn).構(gòu)造SubBytes的S-Box轉(zhuǎn)換表可以直接查找ROM表來(lái)
    發(fā)表于 11-09 16:42 ?25次下載

    FPGA實(shí)現(xiàn)的FIR算法汽車動(dòng)態(tài)稱重儀表的應(yīng)用

    摘 要: 本文介紹了用FPGA實(shí)現(xiàn)的FIR算法,并對(duì)這種算法應(yīng)用于汽車動(dòng)態(tài)稱重儀表的結(jié)果做了分析。實(shí)踐證明此
    發(fā)表于 03-11 13:46 ?1027次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b>的FIR<b class='flag-5'>算法</b><b class='flag-5'>在</b>汽車動(dòng)態(tài)稱重儀表<b class='flag-5'>中</b>的應(yīng)用

    CVSD算法分析及其FPGA實(shí)現(xiàn)

    CVSD算法分析及其FPGA實(shí)現(xiàn) 概 述眾多的語(yǔ)音編譯碼調(diào)制
    發(fā)表于 04-01 16:26 ?2895次閱讀
    CVSD<b class='flag-5'>算法</b>分析及其<b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    FPGA實(shí)現(xiàn)CRC算法的程序

    Xilinx FPGA工程例子源碼:FPGA實(shí)現(xiàn)CRC算法的程序
    發(fā)表于 06-07 15:07 ?28次下載

    hash表的實(shí)現(xiàn)原理

    軟件開(kāi)發(fā),一個(gè)hash表相當(dāng)于把n個(gè)key隨機(jī)放入到b個(gè)bucket,以實(shí)現(xiàn)n個(gè)數(shù)據(jù)b個(gè)單位空間的存儲(chǔ)。 我們發(fā)現(xiàn)
    發(fā)表于 09-28 14:31 ?0次下載
    <b class='flag-5'>hash</b>表的<b class='flag-5'>實(shí)現(xiàn)</b>原理

    基于SHA-1算法的硬件設(shè)計(jì)及實(shí)現(xiàn)FPGA實(shí)現(xiàn)

    算法進(jìn)行深入研究,面向Xilinx K7 410T FPGA 芯片設(shè)計(jì)SHA-1算法實(shí)現(xiàn)結(jié)構(gòu),完成SHA-1算法編程,進(jìn)行測(cè)試和后續(xù)應(yīng)用。該
    發(fā)表于 10-30 16:25 ?4次下載
    基于SHA-1<b class='flag-5'>算法</b>的硬件設(shè)計(jì)及<b class='flag-5'>實(shí)現(xiàn)</b>(<b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b>)

    Hash算法簡(jiǎn)介

    區(qū)塊Hash值時(shí)(即挖礦的過(guò)程),都使用了Hash算法,特別是SHA256算法。比特幣系統(tǒng)本身也就是加密算法的衍生物。
    的頭像 發(fā)表于 06-08 14:01 ?5433次閱讀

    hash算法的原理和實(shí)際應(yīng)用等幾個(gè)角度,對(duì)hash算法進(jìn)行一個(gè)講解

    由于hash的原理是將輸入空間的值映射成hash空間內(nèi),而hash值的空間遠(yuǎn)小于輸入的空間。根據(jù)抽屜原理,一定會(huì)存在不同的輸入被映射成相同輸出的情況。那么作為一個(gè)好的hash
    的頭像 發(fā)表于 06-03 17:34 ?3874次閱讀
    從<b class='flag-5'>hash</b><b class='flag-5'>算法</b>的原理和實(shí)際應(yīng)用等幾個(gè)角度,對(duì)<b class='flag-5'>hash</b><b class='flag-5'>算法</b>進(jìn)行一個(gè)講解

    hash算法FPGA實(shí)現(xiàn)(1)

    FPGA的設(shè)計(jì),尤其是通信領(lǐng)域,經(jīng)常會(huì)遇到hash算法
    的頭像 發(fā)表于 09-07 17:01 ?1855次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實(shí)現(xiàn)</b>(1)

    hash算法FPGA實(shí)現(xiàn)(3)

    在前面的文章主要介紹了hash表及其鏈表的結(jié)構(gòu),同時(shí)說(shuō)明了如何讀取表項(xiàng)。那表項(xiàng)是如何寫入的了?前期的文章中有少量的提及,這里單獨(dú)寫一篇,介紹兩種常見(jiàn)的方案。
    的頭像 發(fā)表于 09-07 17:02 ?1283次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實(shí)現(xiàn)</b>(3)

    hash算法FPGA實(shí)現(xiàn)(4)

    在前面的文章主要介紹了hash表及其鏈表的結(jié)構(gòu),以及key值的插入方法,既然有key值的插入,那就有key值的刪除,一種刪除是CPU通過(guò)重新刷新鏈表來(lái)刪除,另外一種就是FPGA刪除了,這里主要討論
    的頭像 發(fā)表于 09-07 17:03 ?1226次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實(shí)現(xiàn)</b>(4)