一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

hash鏈表說明

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

圖片

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

方案1——DDR

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

圖片

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

這樣的數(shù)據(jù)結(jié)構(gòu),在DDR中存放的時候,顯然是不高效的。因為每處理一次hash,有多少個鏈表節(jié)點就要讀多少次DDR。我們知道DDR的性能有2個指標(biāo),一個是Gbps,一個是Mpps。處理一次hash時讀DDR的次數(shù)越多,處理的hash次數(shù)就會越少,性能就越低,所以我們優(yōu)化鏈表的數(shù)據(jù)結(jié)構(gòu),降低對DDR的讀取次數(shù)。

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

圖片

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

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

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

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

圖片

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

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

總結(jié)

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

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

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

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

    關(guān)注

    1645

    文章

    22050

    瀏覽量

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

    關(guān)注

    11

    文章

    732

    瀏覽量

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

    關(guān)注

    0

    文章

    43

    瀏覽量

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

    關(guān)注

    0

    文章

    80

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    FPGA實現(xiàn)PID算法

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

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

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

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

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

    MACFPGA的高效實現(xiàn)

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

    AESSubBytes算法FPGA實現(xiàn)

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

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

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

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

    CVSD算法分析及其FPGA實現(xiàn) 概 述眾多的語音編譯碼調(diào)制
    發(fā)表于 04-01 16:26 ?2775次閱讀
    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'>實現(xiàn)</b>

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

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

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

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

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

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

    Hash算法簡介

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

    hash算法的原理和實際應(yīng)用等幾個角度,對hash算法進行一個講解

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

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

    FPGA的設(shè)計,尤其是通信領(lǐng)域,經(jīng)常會遇到hash算法
    的頭像 發(fā)表于 09-07 17:01 ?1687次閱讀
    <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'>實現(xiàn)</b>(1)

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

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

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

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