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

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

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

在FPGA上如何使用non-blocking cache設(shè)計(jì)框架

454398 ? 來(lái)源:AI加速 ? 作者:AI加速 ? 2020-11-11 17:28 ? 次閱讀

帶寬是影響FPGA加速器的重要因素,因?yàn)榇罅康牟⑿杏?jì)算對(duì)數(shù)據(jù)量要求很大。如果加速器對(duì)數(shù)據(jù)的訪問(wèn)是不規(guī)則的,那么cache miss就會(huì)大大影響加速器性能。這篇來(lái)自FPGA2019會(huì)議的報(bào)告,向我們展示了如何來(lái)更好的處理cache miss問(wèn)題,提高對(duì)緩存的利用率以及提高加速器效率。

1. Cache miss的問(wèn)題

假設(shè)DDR可以提供12.8GB/s的帶寬,F(xiàn)PGA上的并行加速器的數(shù)據(jù)輸入帶寬為0.8GB/s,可以并列16個(gè)這種加速器。這些加速器通過(guò)arbiter來(lái)直接訪問(wèn)DDR。如果它們?cè)L問(wèn)的數(shù)據(jù)是連續(xù)規(guī)則的,那么DDR的帶寬可以被充分利用。但是這些加速器需要的數(shù)據(jù)在DDR中并不是規(guī)則排列的,如圖1.1。這樣就會(huì)造成頻繁的訪問(wèn)DDR,這樣DDR的帶寬就不夠用,造成的結(jié)果就是加速器會(huì)受到延遲,效率無(wú)法得到提升。就如同圖1.1所示,實(shí)際上有效利用的DDR帶寬只有0.8GB/s。

圖1.1 不規(guī)則數(shù)據(jù)需要造成頻繁訪問(wèn)DDR

圖1.1 不規(guī)則數(shù)據(jù)需要造成頻繁訪問(wèn)DDR

一種解決問(wèn)題的方法是使用blocking cache,將還沒(méi)有用到的數(shù)據(jù)緩存起來(lái)以便之后使用。然而這樣存在兩個(gè)問(wèn)題:一個(gè)是如果緩存中沒(méi)有需要的數(shù)據(jù),那么就需要從DDR中獲取數(shù)據(jù),這就會(huì)有很大延遲,因?yàn)閷?duì)DDR的數(shù)據(jù)進(jìn)行隨機(jī)訪問(wèn)是非常耗時(shí)的;另一個(gè)是緩存的使用效率很低,內(nèi)部大部分?jǐn)?shù)據(jù)都不能被及時(shí)消耗,以便等待被利用到。

圖1.2 blocking cache的使用

圖1.2 blocking cache的使用

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

圖1.3 non-blocking cache

圖1.3 non-blocking cache

2. 傳統(tǒng)的Non-blocking cache結(jié)構(gòu)

圖2.1是一個(gè)基本的non-blocking cache結(jié)構(gòu),它主要由cache array以及MSHR組成。Cache array中含有tag和數(shù)據(jù),tag用來(lái)表示加速器請(qǐng)求的數(shù)據(jù)的在外存中的地址。通過(guò)tag可以判定請(qǐng)求的數(shù)據(jù)在cache中是否存在。MSHR首先被Kroft使用,它含有數(shù)據(jù)未被命中需要去外存獲取的具體信息:包括外存地址,用于判定加速器是否會(huì)再次命中相同的數(shù)據(jù)。還有cache的地址,用于決定從外存獲取的數(shù)據(jù)存儲(chǔ)到cache的位置,給哪個(gè)加速器使用。還有輸入請(qǐng)求確認(rèn)標(biāo)志,表示這個(gè)缺失的數(shù)據(jù)是否從外存讀取到?;静僮魇牵寒?dāng)加速器第一次從cache中獲取數(shù)據(jù)沒(méi)有命中,那么就在MSHR中記錄下相應(yīng)的信息和狀態(tài),當(dāng)?shù)诙蜗嗤瑪?shù)據(jù)miss發(fā)生,除了在MSHR中記錄信息外,則啟動(dòng)從外部存儲(chǔ)器獲取數(shù)據(jù),并更新到cache中。取回來(lái)的數(shù)據(jù)會(huì)根據(jù)MSHR中的信息將需要的數(shù)據(jù)發(fā)送給加速器。所以一個(gè)包含n個(gè)表項(xiàng)的MSHR有n個(gè)比較器用于比較數(shù)據(jù)地址,是否屬于同一個(gè)miss的數(shù)據(jù)等。使用non-blocking cache能夠提高運(yùn)算效率,減少等待時(shí)間,提高帶寬利用率。但是這種傳統(tǒng)的MSHR消耗很多邏輯資源,不利于規(guī)模擴(kuò)展。

圖2.1 non-blocking cache的基本結(jié)構(gòu)和操作

圖2.1 non-blocking cache的基本結(jié)構(gòu)和操作

圖2.2 更新cache

圖2.2 更新cache

圖2.3 MSHR邏輯結(jié)構(gòu)

圖2.3 MSHR邏輯結(jié)構(gòu)

3. 對(duì)non-blocking cache的改進(jìn)

為了能夠有效擴(kuò)展MSHR,可以使用多個(gè)MSHR,每個(gè)MSHR有n個(gè)表項(xiàng),這樣相比于使用一個(gè)MSHR能節(jié)省邏輯資源。但是這涉及到一個(gè)問(wèn)題,如果一個(gè)配置MSHR的請(qǐng)求在多個(gè)MSHR表都有沖突,那么就造成配置MSHR表的等待。這樣就導(dǎo)致了加速器運(yùn)算的等待,不能夠執(zhí)行下一條指令。

圖3.1 兩個(gè)MSHR被請(qǐng)求表項(xiàng)都被占用

圖3.1 兩個(gè)MSHR被請(qǐng)求表項(xiàng)都被占用

解決辦法就是Cuckoo hashing算法。假設(shè)有兩個(gè)MSHR表,T1和T2。每個(gè)r個(gè)表項(xiàng)。每個(gè)元素通過(guò)函數(shù)h1和h2來(lái)確定表項(xiàng)位置,即:T1[h1(x)],T2[h2(x)]。為了插入表項(xiàng)內(nèi)容x,檢查T(mén)1對(duì)應(yīng)位置是否空,如果空,就插入。如果非空就檢查T(mén)2,如果T2也非空,這就是沖突的情況,那么就插入到T2中,將原來(lái)的內(nèi)容z替換。然后z再去查詢(xún)T1表,如此循環(huán)進(jìn)行。這樣就不會(huì)造成阻塞。



圖3.2 Cuckoo hashing

還有一個(gè)問(wèn)題是,MSHR中的表項(xiàng)subentries大小是固定的,如果要擴(kuò)展表項(xiàng)的subentries,那么所有的內(nèi)容都是同等擴(kuò)展,這樣可能有一些內(nèi)容并不需要那么大。所以為了能夠有效利用存儲(chǔ)資源,論文作者提出了動(dòng)態(tài)可擴(kuò)展subentries內(nèi)容的方法。將tag和subentries分隔開(kāi)分別存儲(chǔ),這樣如果有更多加速器miss相同的數(shù)據(jù),那么就可以在一個(gè)subentries表后再擴(kuò)展需要的subentries。這樣就是在需要級(jí)聯(lián)的subentries中增加指針來(lái)級(jí)聯(lián)到下一個(gè)subentries表。

圖3.3 可擴(kuò)展subentries

圖3.3 可擴(kuò)展subentries

圖3.4 表項(xiàng)擴(kuò)展

圖3.4 表項(xiàng)擴(kuò)展

圖3.5 整體結(jié)構(gòu)

圖3.5 整體結(jié)構(gòu)

4. 結(jié)論

本文主要總結(jié)了non-blocking cache的設(shè)計(jì)框架,以及在FPGA上如何使用。介紹比較簡(jiǎn)略,更詳細(xì)的資料還需要了解CPU體系中non-blocking cache的具體結(jié)構(gòu)。作者也處于學(xué)習(xí)之中,歡迎討論。

文獻(xiàn)
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
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    1630

    文章

    21777

    瀏覽量

    604733
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10890
  • 加速器
    +關(guān)注

    關(guān)注

    2

    文章

    804

    瀏覽量

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

    關(guān)注

    11

    文章

    712

    瀏覽量

    65425
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    dm6467t使用ti的codec怎么才能實(shí)現(xiàn)8路d1 h264編碼?

    dm6467t工作990Mhz,根據(jù)datasheet 1_20_02_00 介紹使用non-blocking方式可以實(shí)現(xiàn)大約8路d1編碼,但是怎么才能實(shí)現(xiàn)non-blocking呢? 我目前使用async后wait的方式?jīng)]有
    發(fā)表于 05-31 03:13

    Verilog函數(shù)中function里的過(guò)程語(yǔ)句該怎么寫(xiě)

    Verilog用函數(shù)方式描述一個(gè)4選1選擇器,function里的過(guò)程語(yǔ)句該怎么寫(xiě)啊我這么寫(xiě)報(bào)錯(cuò):functions can't contain non-blocking
    發(fā)表于 04-17 06:35

    請(qǐng)問(wèn)C6748的socket怎么設(shè)置為非阻塞模式?

    請(qǐng)問(wèn)C6748使用NDK時(shí)如何把socket設(shè)置為非阻塞(non-blocking)模式
    發(fā)表于 08-15 14:02

    UCOSIII內(nèi)建消息,使用OS_OPT_PEND_NON_BLOCKING任務(wù)不能切換

    我使用UCOSIII內(nèi)建消息機(jī)制,想通過(guò)任務(wù)A給任務(wù)B發(fā)送一個(gè)消息,任務(wù)B根據(jù)接收到消息并打印,同時(shí)任務(wù)B還有其他工作要做,想通過(guò)OS_OPT_PEND_NON_BLOCKING,檢查如果沒(méi)有接收
    發(fā)表于 05-05 04:36

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

    級(jí)別的cache不包含(exclusive )較低級(jí)別的cache。如果較高級(jí)cache的內(nèi)容既不嚴(yán)格包含也不排除較低級(jí)cache,則稱(chēng)為非包含非排他(
    發(fā)表于 07-20 14:46

    小白請(qǐng)教一下ARM開(kāi)發(fā)板中的non-cache該怎么去理解呢?

    小白請(qǐng)教一下ARM開(kāi)發(fā)板中的non-cache該怎么去理解呢?
    發(fā)表于 11-03 15:27

    AX88783 pdf datasheet(雙端口以太網(wǎng)交換

    AX88783是一款雙端口以太網(wǎng)交換芯片,其第三個(gè)埠為8/16/32位Non-PCI/SRAM-like主機(jī)接口。內(nèi)建的二層交換模塊支持non-blocking線速封包轉(zhuǎn)送,還提供進(jìn)階的交換器規(guī)格,包括tag/port-based虛擬
    發(fā)表于 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
    發(fā)表于 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
    發(fā)表于 10-08 09:40 ?14次下載

    Cache中Tag電路的設(shè)計(jì)

    摘要:SoC系統(tǒng)中,片緩存(Cache)的采用是解決片處理器和片外存儲(chǔ)器之間速度差異的重要方法,Cache中用來(lái)存儲(chǔ)標(biāo)記位并判斷
    發(fā)表于 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
    發(fā)表于 08-26 15:56 ?10次下載

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

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

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

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

    fpga工業(yè)的應(yīng)用

    fpga工業(yè)的應(yīng)用有哪些?
    發(fā)表于 09-19 09:09 ?3344次閱讀

    如何正確保護(hù)共享數(shù)據(jù)編寫(xiě)并行程序

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