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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

CHANBAEK ? 來源: FPGA的現(xiàn)今未 ? 作者: FPGA的現(xiàn)今未 ? 2023-09-07 17:02 ? 次閱讀

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

hash鏈表說明

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

圖片

圖中關于hash鏈表的示意,只是一種簡單的表示,在FPGA的實際設計中,情況往往要復雜得多。

方案1——DDR

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

圖片

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

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

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

圖片

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

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

方案二——內部RAM

如果考慮所有的沖突次數(shù)在一定范圍之內,那么可以把所有的鏈表存放在一起,即存放在一個內部的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中的下一鏈,完成鏈表的構建。

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

總結

關于上述2種方案,這里做一個簡單的總結。

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

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

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

    關注

    1629

    文章

    21744

    瀏覽量

    603658
  • DDR
    DDR
    +關注

    關注

    11

    文章

    712

    瀏覽量

    65363
  • Hash算法
    +關注

    關注

    0

    文章

    43

    瀏覽量

    7383
  • 鏈表
    +關注

    關注

    0

    文章

    80

    瀏覽量

    10567
收藏 人收藏

    評論

    相關推薦

    FPGA實現(xiàn)PID算法

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

    實用AGC算法的工作原理及音頻FPGA的應用

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

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

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

    MACFPGA的高效實現(xiàn)

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

    AESSubBytes算法FPGA實現(xiàn)

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

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

    摘 要: 本文介紹了用FPGA實現(xiàn)的FIR算法,并對這種算法應用于汽車動態(tài)稱重儀表的結果做了分析。實踐證明此
    發(fā)表于 03-11 13:46 ?882次閱讀
    <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>的應用

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

    CVSD算法分析及其FPGA實現(xiàn) 概 述眾多的語音編譯碼調制
    發(fā)表于 04-01 16:26 ?2486次閱讀
    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表相當于把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算法的硬件設計及實現(xiàn)FPGA實現(xiàn)

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

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

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

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

    FPGA的設計,尤其是通信領域,經(jīng)常會遇到hash算法
    的頭像 發(fā)表于 09-07 17:01 ?1220次閱讀
    <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表及其鏈表的結構,同時說明了如何讀取表項。那表項是如何寫入的了?前期的文章中有少量的提及,這里單獨寫一篇,介紹兩種常見的方案。
    的頭像 發(fā)表于 09-07 17:02 ?783次閱讀
    <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表及其鏈表的結構,以及key值的插入方法,既然有key值的插入,那就有key值的刪除,一種刪除是CPU通過重新刷新鏈表來刪除,另外一種就是FPGA刪除了,這里主要討論
    的頭像 發(fā)表于 09-07 17:03 ?742次閱讀
    <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)