色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

FPGA中并行計算的流水線計算和交替計算

FPGA設計論壇 ? 來源:FPGA設計論壇 ? 作者:FPGA設計論壇 ? 2022-04-12 10:05 ? 次閱讀

用過FPGA的人應該都知道,在FPGA中,邏輯是并行地運行的,各個狀態機同時都在工作,狀態機之間可能會有信號交互,也可能毫無關系、各管各地工作。

這就給了我們一個靈感:如果我們要做的計算(例如級數求和)的規模很大,按順序一步一步算的話,其時間開銷是我們所無法忍受的,那么,我們是否可以想辦法利用FPGA的并行特性,通過讓計算并行地執行,來減小時間開銷(或者說提高計算速度)呢?

基于這個靈感,就讓我們看看,FPGA中并行計算的常規方法吧。

流水線計算

現在,我們要在FPGA中做這樣一個計算:

B = A × imes× 2 + 1

能用的計算單元為兩輸入加法器和兩輸入乘法器

為了保證時序,一個時鐘周期內加法器只能執行一次加法

為了保證時序,一個時鐘周期內乘法器只能執行一次乘法

對于上述要求完成的計算,看上去,在一個時鐘周期內既完成乘法又完成加法是不可能的了。然而,如果我們這么做呢:

1.設計一個模塊,模塊的輸入為時鐘和參數A,輸出為結果B。

2.該模塊在每個時鐘周期同時做"C=A×2"的計算和"B=C+1"的計算,其中,C為寄存器。

仿真該模塊,就可以發現:

542c19a2-b9c6-11ec-aa7f-dac502259ad0.png

從上表可以看到:

雖然從輸入A到輸出B,相差了兩個時鐘周期,但是,每個時鐘周期輸出的B,都和兩個時鐘周期前輸入的A相對應。即:等效地來看,相當于每個時鐘周期,模塊都完成了一次"B = A × imes× 2 + 1"的計算!

哇塞,好神奇!這簡直就是:

明明一次性無法完成的計算,不知怎么搞的,卻等效地"被一次性地完成了"

嗯,這種搞法,就是傳說中的"流水線計算",這里為其給出了一個不拘泥于FPGA中的情形的、更加普適的定義:

將一個計算拆分成N級(N ≥ geq≥ 2),每一級的平均數據吞吐速率都相同,前(N-1)級的計算結果在輸入下一級之前都經過了緩存,這種方法稱為"流水線計算"

注:"平均數據吞吐速率"指的是:在單位時間內,參數平均能夠輸入多少次,以及計算結果平均能夠輸出多少次。

流水線計算的結構如下圖所示("一條龍"式的結構):

543e41ae-b9c6-11ec-aa7f-dac502259ad0.png

分析定義可知:

正是由于"每一級的平均數據吞吐速率都相同",使得整個計算的平均數據吞吐速率相同,才讓輸出的結果看上去"像是被一次性地完成的"。

級間緩存在流水線計算中是必不可少的,它們起到了兩級間隔離的作用,使得"當第(n+1)級在處理第i ii個輸入對應的計算時,第n級已經在處理第( i + 1 ) (i+1)(i+1)個輸入對應的計算了"這種情況成為可能。增大級間緩存的延遲時間,會造成整個計算的延遲時間(即輸出和輸入之間的延遲時間)的加長。

總的來說,流水線計算是個好東西,不過,實際使用時,如果不留心的話,容易為級間緩存分配過長的延遲時間,從而出現"整個計算的延遲時間長"的問題,這一點需要注意。

分布式流水線計算

現在,我們要在FPGA中做這樣一個計算:

C = A × imes× 2 + B × imes× 3

能用的計算單元為兩輸入加法器和兩輸入乘法器

為了保證時序,一個時鐘周期內加法器只能執行一次加法

為了保證時序,一個時鐘周期內乘法器只能執行一次乘法

對于上述要求完成的計算,看上去,在一個時鐘周期內既完成乘法又完成加法是不可能的了。然而,如果我們這么做呢:

1.設計一個模塊,模塊的輸入為時鐘和參數A、參數B,輸出為結果C。

2.該模塊在每個時鐘周期同時做"D=A×2"的計算、"E=B×3"的計算和"C=D+E"的計算,其中,D、E為寄存器。

仿真該模塊,就可以發現:

5457be86-b9c6-11ec-aa7f-dac502259ad0.png

從上表可以看到:

等效地來看,相當于每個時鐘周期,模塊都完成了一次"C = A × imes× 2 + B × imes× 3"的計算

這種做法明顯蘊含了"流水線計算",不過又跟流水線計算的"一條龍"結構似乎不同,這種做法的結構是"樹形"的:

對于輸入的參數A和B,先是"你算你的,我算我的",分別輸出并緩存D和E。然后拿D和E計算得到結果C。

546ad8b8-b9c6-11ec-aa7f-dac502259ad0.png

對于這種做法,我稱之為"分布式流水線計算",這個名稱借鑒了計算機網絡領域的術語"分布式計算"。使用分布式流水線計算的必要前提是:

計算所需的輸入參數不止一個

分布式流水線計算可以看成是"在輸入參數不止一個的情況下,展露出計算細節的流水線計算",或者說,從本質上來講,分布式流水線計算屬于流水線計算,不要因為看上去是樹形結構就幫它"自立門戶"了。不信?沒事,我將上面的"計算C = A × imes× 2 + B × imes× 3"的模塊的結構重新畫一下你就信了:

548443d4-b9c6-11ec-aa7f-dac502259ad0.png

既然說"分布式流水線計算屬于流水線計算",那為什么還要專門在這里講分布式流水線計算呢?原因是這樣的:分布式流水線計算展露了計算細節,更加有助于邏輯開發人員弄清楚計算過程中的延時情況,防止在不知不覺間,增大了整個計算的延遲時間。比如,對于上面的"C = A × imes× 2 + B × imes× 3",如果不加注意的話,可能會變成這樣:

5496ef02-b9c6-11ec-aa7f-dac502259ad0.png

從上圖就能看出來,明明兩級就能完成的計算,一不留神就變成了三級,整個計算的延遲時間變長了。不過需要說明的是,"整個計算的延遲時間"并不是衡量"一個并行計算結構的優劣"的標準。比如,在做并行卷積計算時,采取流水線的結構可以節省計算資源(但是整個計算的延遲時間長),而采取多相的結構可以縮短整個計算的延遲時間(但是消耗更多的計算資源,雖然其實也多不了太多)。

這里展示一個更加復雜的分布式流水線計算的案例:

54afe660-b9c6-11ec-aa7f-dac502259ad0.png

交替計算

現在,我們要在FPGA中做這樣一個計算:

C = A + B

能用的計算單元為兩輸入加法器

為了保證時序,一個時鐘周期內加法器只能執行一次加法,時鐘頻率最高為100MHz

可以用寄存器來存儲數據

為了保證時序,寄存器最高只能工作在300MHz的時鐘頻率下

乍一看,這情況讓人有點迷茫:表達式都簡單成這樣了,還需要玩并行計算?別急,我們的問題是這樣的:

A和B都是在300MHz時鐘的驅動下刷新的,在這種情況下,如何才能完成"C = A + B"的計算?

呵呵,加法器最高工作頻率為100MHz,而數據的刷新頻率都飆到300MHz去了,沒法玩了好吧!咳咳,其實還是可以玩的??紤]一下這么做:

設計一個模塊,模塊的輸入為300MHz時鐘和參數A、參數B,輸出為結果C(C為寄存器)。

在300MHz時鐘的驅動下:

在第(i+1)個時鐘周期將A、B的值分別賦給A1、B1寄存器,

在第(i+2)個時鐘周期將A、B的值分別賦給A2、B2寄存器,

在第(i+3)個時鐘周期將A、B的值分別賦給A3、B3寄存器,

在第(i+4)個時鐘周期將A、B的值分別賦給A1、B1寄存器,

在第(i+5)個時鐘周期將A、B的值分別賦給A2、B2寄存器,

模塊中,將300MHz的時鐘三分頻后得到100MHz時鐘:clk100m_1,clk100m_2,clk100m_3。

三個100MHz時鐘之間的相位都相差(360°/3=)120°。

在100MHz時鐘的驅動下(假定分配的100MHz時鐘都能滿足所需的建立保持時間需求):

使用加法器,在clk100m_1的每個時鐘周期計算C1 = A1 + B1,其中,C1為寄存器。

使用加法器,在clk100m_2的每個時鐘周期計算C2 = A2 + B2,其中,C2為寄存器。

使用加法器,在clk100m_3的每個時鐘周期計算C3 = A3 + B3,其中,C3為寄存器。

在300MHz時鐘的驅動下:

在第(k+1)個時鐘周期將C1的值賦給C,(其中,k=i+4)

在第(k+2)個時鐘周期將C2的值賦給C,

在第(k+3)個時鐘周期將C3的值賦給C,

在第(k+4)個時鐘周期將C1的值賦給C,

在第(k+5)個時鐘周期將C2的值賦給C,

上述模塊的時序如下圖所示:

54c6f7ba-b9c6-11ec-aa7f-dac502259ad0.png

從上圖可以看到:

加法器都工作在100MHz的時鐘下

A、B、C的刷新頻率都是300MHz

可見,我們利用3個最高工作頻率100MHz的加法器,等效地實現了1個最高工作頻率300MHz的加法器。

這里所采用的方法通常被稱為是"乒乓計算"(或者"乒乓操作"),不過,竊以為這個名稱不夠形象,因此,為這種方法取了個新名稱:“交替計算”。交替計算的基本思想是:

將計算單元復制若干份,交替地將輸入的參數分配給各個計算單元,并且交替地將各個計算單元的計算結果輸出,從而實現"以N倍的計算單元換取N倍的計算速度"。

交替計算的基本結構如下圖所示:

54dc91c4-b9c6-11ec-aa7f-dac502259ad0.png

混合型并行計算

在實際的FPGA并行計算中,常常將流水線計算、交替計算混合使用,來滿足計算需求。嗯,這就是所謂的"混合型并行計算",沒毛病。

用一句話將本論述歸納總結一下,那就是:

FPGA中并行計算的基本常規方法為:流水線計算和交替計算。

原文標題:FPGA學習-FPGA中并行計算的常規方法

文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅

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

    關注

    1629

    文章

    21729

    瀏覽量

    603013
  • 并行計算
    +關注

    關注

    0

    文章

    27

    瀏覽量

    9431

原文標題:FPGA學習-FPGA中并行計算的常規方法

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA并行計算的圖像處理案例

    圖像處理算法在各種場景中都有廣泛應用,借助于FPGA并行計算的優勢可以將算法性能有效提升,但為了提升系統整體性能,僅僅提升某一部分的性能是不夠的,一個好的方法是在FPGA內實現全部視頻輸入輸出接口
    的頭像 發表于 11-04 12:07 ?3542次閱讀

    arm系統并行計算優化

    fpga的硬件換成我們自己的arm設備。不過經過研究這種設想不可行。個人看法,也許不對哦。?。。。rm是一款多核心,單進程處理器,目前為止arm處理器都不支持多線程。所以多線程概念不能將并行計算優化
    發表于 12-30 14:33

    FPGA流水線設計

    Tpd+Tco,每級消耗一個時鐘周期,流水線需要 2 個時鐘周期來獲得第一個計算結果,稱 為首次延遲,它要 2*( Tpd+Tco),但是執行重復操作時,只要一個時鐘周期來獲得最后的計算結果,稱為吞吐延遲
    發表于 10-26 14:38

    什么是異構并行計算

    先了解什么是異構并行計算同構計算是使用相同類型指令集和體系架構的計算單元組成系統的計算方式。而異構計算主要是指使用不同類型指令集和體系架構的
    發表于 07-19 08:27

    現代RISC流水線技術

    流水線技術是提高系統吞吐率的一項強大的實現技術,并且不需要大量重復設置硬件。20世界60年代早期的一些高端機器第一次采用了流水線技術。第一個采用指令流水線的機器是IBM7030(又稱
    發表于 03-01 17:52

    基于流水線技術的并行高效FIR濾波器設計

    基于流水線技術的并行高效FIR濾波器設計 基于流水線技術,利用FPGA進行并行可重復配置高精度的FIR濾波器設計。使用VHDL可以很方便地
    發表于 03-28 15:12 ?813次閱讀
    基于<b class='flag-5'>流水線</b>技術的<b class='flag-5'>并行</b>高效FIR濾波器設計

    流水線的相關培訓教程[3]

    流水線的相關培訓教程[3] (1) 寫后讀相關(RAW:Read After Write) (命名規則) :j 的執行要用到 i 的計算結果,當它們在流水線
    發表于 04-13 16:02 ?845次閱讀

    并行計算和嵌入式系統實踐教程

    Linux微機應用十分普遍. 高性能并行計算機數量多. 并行計算,我國有自己的理論. 對并行計算的基本原理,算法,程序設計與實現,優化,成熟軟件應用的推廣不夠. 制約并行計算在研究和工
    發表于 05-09 15:54 ?48次下載

    并行計算和分布式計算的區別和聯系

    并行計算或稱平行計算是相對于串行計算來說的。所謂并行計算可分為時間上的并行和空間上的并行。 時間
    發表于 12-08 09:59 ?3.7w次閱讀

    基于云計算的電磁問題并行計算方法

    針對電工裝備性能分析與優化所需的易用高性能計算問題,使用云計算技術搭建了彈性集群,實現了典型電磁問題在彈性集群并行計算。使用虛擬化技術將計算
    發表于 03-20 13:56 ?1次下載
    基于云<b class='flag-5'>計算</b>的電磁問題<b class='flag-5'>并行計算</b>方法

    并行計算的黃金時代到了?

    “未來幾十年將進入并行計算黃金時代,并行計算軟件和算法的開發將從技術驅動轉向應用驅動,需要計算與應用等不同領域的專家共同合作開發?!敝袊こ淘涸菏坷顕苋涨氨硎?。
    的頭像 發表于 04-03 17:18 ?2285次閱讀

    淺析云計算并行計算

    并行計算可以劃分成時間并行和空間并行。時間并行流水線技術,空間并行使用多個處理器執行并發
    的頭像 發表于 05-03 12:01 ?4628次閱讀
    淺析云<b class='flag-5'>計算</b>和<b class='flag-5'>并行計算</b>

    CRC校驗碼并行計算FPGA實現

    了按字節并行計算 CRC 校驗碼的 原理 ,并以常見的 CRC - 16 和 CRC - CCITT 為例 ,用 VHDL 語言進行了可綜合設計。結果表明這種實現方法在速度和占 用資源方面優于常見的設計 ,適合在 FPGA
    發表于 03-28 09:34 ?30次下載
    CRC校驗碼<b class='flag-5'>并行計算</b>的<b class='flag-5'>FPGA</b>實現

    什么是流水線 Jenkins的流水線詳解

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發表于 05-17 16:57 ?1083次閱讀

    Google GPipe為代表的流水線并行范式

    但在實際應用,流水線并行并不特別流行,主要原因是模型能否均勻切割,影響了整體計算效率,這就需要算法工程師做手調。因此,今天我們來介紹一種應用最廣泛,最易于理解的
    的頭像 發表于 05-26 14:40 ?1025次閱讀
    Google GPipe為代表的<b class='flag-5'>流水線</b><b class='flag-5'>并行</b>范式
    主站蜘蛛池模板: 久久天堂视频| 亚洲中文有码字幕日本| 女教师公车痴汉在线播放| 久久精品亚洲AV中文2区金莲| 国产日韩欧美三级| 国产精品女主播主要上线| 国产成人综合在线观看| 国产 在线 亚洲 欧美 动漫| 成人综合在线观看| 国产偷国产偷亚州清高| 国内精品视频久久久久免费| 精品区2区3区4区产品乱码9| 久久精品免费电影| 嫩小性性性xxxxbbbb| 日韩精品AV一区二区三区| 午夜天堂一区人妻| 亚洲视频欧美视频| 中文字幕无码他人妻味| 92电影网午夜福利| 2020亚洲 欧美 国产 日韩| 51精品少妇人妻AV一区二区| 亚洲永久精品AV在线观看| 夜色帮首页| www.免费视频| 总攻催眠受的高h巨肉np| 97视频在线观看免费视频| 99热精品在线av播放| 高清无码中文字幕在线观看视频 | 97在线视频免费| 哺乳溢出羽月希中文字幕| 国产精品97久久AV色婷婷| 国内精品久久影视免费| 美女搜查官被高难度黑人在线播放| 欧美eee114| 午夜福利理论片在线播放| 一本之道高清在线观看免费| 999久久久国产| 国产免费69成人精品视频| 麻豆精品传媒卡一卡二传媒短视频| 欧美激情精品久久久久久不卡| 无码国产色欲XXXX视频|