精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

在FPGA上如何使用non-blocking cache設計框架

454398 ? 來源:AI加速 ? 作者:AI加速 ? 2020-11-11 17:28 ? 次閱讀

帶寬是影響FPGA加速器的重要因素,因為大量的并行計算對數據量要求很大。如果加速器對數據的訪問是不規則的,那么cache miss就會大大影響加速器性能。這篇來自FPGA2019會議的報告,向我們展示了如何來更好的處理cache miss問題,提高對緩存的利用率以及提高加速器效率。

1. Cache miss的問題

假設DDR可以提供12.8GB/s的帶寬,FPGA上的并行加速器的數據輸入帶寬為0.8GB/s,可以并列16個這種加速器。這些加速器通過arbiter來直接訪問DDR。如果它們訪問的數據是連續規則的,那么DDR的帶寬可以被充分利用。但是這些加速器需要的數據在DDR中并不是規則排列的,如圖1.1。這樣就會造成頻繁的訪問DDR,這樣DDR的帶寬就不夠用,造成的結果就是加速器會受到延遲,效率無法得到提升。就如同圖1.1所示,實際上有效利用的DDR帶寬只有0.8GB/s。

圖1.1 不規則數據需要造成頻繁訪問DDR

圖1.1 不規則數據需要造成頻繁訪問DDR

一種解決問題的方法是使用blocking cache,將還沒有用到的數據緩存起來以便之后使用。然而這樣存在兩個問題:一個是如果緩存中沒有需要的數據,那么就需要從DDR中獲取數據,這就會有很大延遲,因為對DDR的數據進行隨機訪問是非常耗時的;另一個是緩存的使用效率很低,內部大部分數據都不能被及時消耗,以便等待被利用到。

圖1.2 blocking cache的使用

圖1.2 blocking cache的使用

另外一種解決的辦法是non-blocking cache,這正是本文提出的方法。這種方法的關鍵是加速器可以允許一定數量的cache miss。Cache miss不會阻塞對后面數據的獲取。這就要求前后的數據沒有依賴關系,而且允許的cache miss數量足夠多,能夠允許在這些時間可以從DDR中獲取miss的數據,否則一樣會造成加速器等待喂數。

圖1.3 non-blocking cache

圖1.3 non-blocking cache

2. 傳統的Non-blocking cache結構

圖2.1是一個基本的non-blocking cache結構,它主要由cache array以及MSHR組成。Cache array中含有tag和數據,tag用來表示加速器請求的數據的在外存中的地址。通過tag可以判定請求的數據在cache中是否存在。MSHR首先被Kroft使用,它含有數據未被命中需要去外存獲取的具體信息:包括外存地址,用于判定加速器是否會再次命中相同的數據。還有cache的地址,用于決定從外存獲取的數據存儲到cache的位置,給哪個加速器使用。還有輸入請求確認標志,表示這個缺失的數據是否從外存讀取到。基本操作是:當加速器第一次從cache中獲取數據沒有命中,那么就在MSHR中記錄下相應的信息和狀態,當第二次相同數據miss發生,除了在MSHR中記錄信息外,則啟動從外部存儲器獲取數據,并更新到cache中。取回來的數據會根據MSHR中的信息將需要的數據發送給加速器。所以一個包含n個表項的MSHR有n個比較器用于比較數據地址,是否屬于同一個miss的數據等。使用non-blocking cache能夠提高運算效率,減少等待時間,提高帶寬利用率。但是這種傳統的MSHR消耗很多邏輯資源,不利于規模擴展。

圖2.1 non-blocking cache的基本結構和操作

圖2.1 non-blocking cache的基本結構和操作

圖2.2 更新cache

圖2.2 更新cache

圖2.3 MSHR邏輯結構

圖2.3 MSHR邏輯結構

3. 對non-blocking cache的改進

為了能夠有效擴展MSHR,可以使用多個MSHR,每個MSHR有n個表項,這樣相比于使用一個MSHR能節省邏輯資源。但是這涉及到一個問題,如果一個配置MSHR的請求在多個MSHR表都有沖突,那么就造成配置MSHR表的等待。這樣就導致了加速器運算的等待,不能夠執行下一條指令。

圖3.1 兩個MSHR被請求表項都被占用

圖3.1 兩個MSHR被請求表項都被占用

解決辦法就是Cuckoo hashing算法。假設有兩個MSHR表,T1和T2。每個r個表項。每個元素通過函數h1和h2來確定表項位置,即:T1[h1(x)],T2[h2(x)]。為了插入表項內容x,檢查T1對應位置是否空,如果空,就插入。如果非空就檢查T2,如果T2也非空,這就是沖突的情況,那么就插入到T2中,將原來的內容z替換。然后z再去查詢T1表,如此循環進行。這樣就不會造成阻塞。



圖3.2 Cuckoo hashing

還有一個問題是,MSHR中的表項subentries大小是固定的,如果要擴展表項的subentries,那么所有的內容都是同等擴展,這樣可能有一些內容并不需要那么大。所以為了能夠有效利用存儲資源,論文作者提出了動態可擴展subentries內容的方法。將tag和subentries分隔開分別存儲,這樣如果有更多加速器miss相同的數據,那么就可以在一個subentries表后再擴展需要的subentries。這樣就是在需要級聯的subentries中增加指針來級聯到下一個subentries表。

圖3.3 可擴展subentries

圖3.3 可擴展subentries

圖3.4 表項擴展

圖3.4 表項擴展

圖3.5 整體結構

圖3.5 整體結構

4. 結論

本文主要總結了non-blocking cache的設計框架,以及在FPGA上如何使用。介紹比較簡略,更詳細的資料還需要了解CPU體系中non-blocking cache的具體結構。作者也處于學習之中,歡迎討論。

文獻
1 Stop Crying Over Your Cache Miss Rate:
Handling Efficiently Thousands of Outstanding Misses in FPGAs, Mikhail Asiatici and Paolo Ienne, February 26, 2019

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

    關注

    1626

    文章

    21677

    瀏覽量

    601990
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10827

    瀏覽量

    211179
  • 加速器
    +關注

    關注

    2

    文章

    795

    瀏覽量

    37772
  • DDR
    DDR
    +關注

    關注

    11

    文章

    711

    瀏覽量

    65237
收藏 人收藏

    評論

    相關推薦

    dm6467t使用ti的codec怎么才能實現8路d1 h264編碼?

    dm6467t工作990Mhz,根據datasheet 1_20_02_00 介紹使用non-blocking方式可以實現大約8路d1編碼,但是怎么才能實現non-blocking呢? 我目前使用async后wait的方式沒有
    發表于 05-31 03:13

    Verilog函數中function里的過程語句該怎么寫

    Verilog用函數方式描述一個4選1選擇器,function里的過程語句該怎么寫啊我這么寫報錯:functions can't contain non-blocking
    發表于 04-17 06:35

    請問C6748的socket怎么設置為非阻塞模式?

    請問C6748使用NDK時如何把socket設置為非阻塞(non-blocking)模式
    發表于 08-15 14:02

    UCOSIII內建消息,使用OS_OPT_PEND_NON_BLOCKING任務不能切換

    我使用UCOSIII內建消息機制,想通過任務A給任務B發送一個消息,任務B根據接收到消息并打印,同時任務B還有其他工作要做,想通過OS_OPT_PEND_NON_BLOCKING,檢查如果沒有接收
    發表于 05-05 04:36

    介紹一種多級cache的包含策略(Cache inclusion policy)

    級別的cache不包含(exclusive )較低級別的cache。如果較高級cache的內容既不嚴格包含也不排除較低級cache,則稱為非包含非排他(
    發表于 07-20 14:46

    小白請教一下ARM開發板中的non-cache該怎么去理解呢?

    小白請教一下ARM開發板中的non-cache該怎么去理解呢?
    發表于 11-03 15:27

    AX88783 pdf datasheet(雙端口以太網交換

    AX88783是一款雙端口以太網交換芯片,其第三個埠為8/16/32位Non-PCI/SRAM-like主機接口。內建的二層交換模塊支持non-blocking線速封包轉送,還提供進階的交換器規格,包括tag/port-based虛擬
    發表于 08-05 10:45 ?127次下載

    LMH6580/LMH6581,pdf datasheet

    The LMH® family of products is joined by the LMH6580 andthe LMH6581, high speed, non-blocking
    發表于 10-08 09:38 ?27次下載

    LMH6583,pdf datasheet (16x8 55

    The LMH® family of products is joined by the LMH6583, a highspeed, non-blocking, analog
    發表于 10-08 09:40 ?14次下載

    Cache中Tag電路的設計

    摘要:SoC系統中,片緩存(Cache)的采用是解決片處理器和片外存儲器之間速度差異的重要方法,Cache中用來存儲標記位并判斷
    發表于 05-08 09:26 ?11次下載

    SN65LVCP204,pdf(2.5Gbps 4x4 Cr

    The SN65LVCP204 is a 4×4 non-blocking crosspoint switch in a flow-through pinout that allows
    發表于 08-26 15:56 ?10次下載

    DSPCache C64+ 系列中的應用(1)

    C64+ 系列DSPCache 的應用(第一部分)
    的頭像 發表于 06-13 01:08 ?4114次閱讀
    DSP<b class='flag-5'>上</b><b class='flag-5'>Cache</b> <b class='flag-5'>在</b> C64+ 系列中的應用(1)

    DSPCache C64+ 系列中的應用(2)

    C64+ 系列DSPCache 的應用(第二部分)
    的頭像 發表于 06-13 01:01 ?3907次閱讀
    DSP<b class='flag-5'>上</b><b class='flag-5'>Cache</b> <b class='flag-5'>在</b> C64+ 系列中的應用(2)

    fpga工業的應用

    fpga工業的應用有哪些?
    發表于 09-19 09:09 ?3256次閱讀

    如何正確保護共享數據編寫并行程序

    非阻塞型同步 (Non-blocking Synchronization) 簡介 如何正確有效的保護共享數據是編寫并行程序必須面臨的一個難題,通常的手段就是同步。同步可分為阻塞型同步
    的頭像 發表于 11-09 09:39 ?433次閱讀
    如何正確保護共享數據編寫并行程序