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

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

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

FPGA循環(huán)并行化應(yīng)用于先前任務(wù)并行化的推理內(nèi)核

OpenFPGA ? 來源:OpenFPGA ? 2023-04-17 09:12 ? 次閱讀

在本文中,我們將循環(huán)并行化應(yīng)用于先前任務(wù)并行化的推理內(nèi)核,并平衡層與層之間的執(zhí)行時(shí)間。

此外,當(dāng)前內(nèi)核的外部內(nèi)存訪問效率低下,因此內(nèi)存訪問也是瓶頸。在這種狀態(tài)下,即使進(jìn)行循環(huán)并行化,內(nèi)存訪問最終也會(huì)成為瓶頸。

當(dāng)前內(nèi)核瓶頸

下面轉(zhuǎn)載上一篇文章中附上的內(nèi)核執(zhí)行時(shí)間報(bào)告。

運(yùn)行時(shí)報(bào)告:

6ba95e54-dcbc-11ed-bfe3-dac502259ad0.png

實(shí)際時(shí)間:

6bc3c474-dcbc-11ed-bfe3-dac502259ad0.png

這里,每幅圖中的①、②、③分別對應(yīng)第一個(gè)卷積層(conv1)、第二個(gè)卷積層(conv2)和第一個(gè)全連接層(fc1)。執(zhí)行時(shí)間報(bào)告顯示conv2、conv1、fc1的執(zhí)行時(shí)間比例為51。另一方面,在真機(jī)實(shí)踐上,conv2:conv1的比例約為5:3,但fc1層的執(zhí)行時(shí)間與它們相比非常短。整個(gè)推理過程的執(zhí)行時(shí)間也是 12.65 ms/image,明顯長于報(bào)告的吞吐量(504098 cycles / 300MHz = 1.68 ms/image)。

HLS 報(bào)告 <-> 實(shí)際機(jī)器的性能存在這種差異的原因是,HLS 報(bào)告是在假設(shè)可以在請求外部存儲(chǔ)器的時(shí)間立即提供數(shù)據(jù)的情況下創(chuàng)建的。由于在真機(jī)上訪問外部內(nèi)存不是那么快,所以在真機(jī)上性能明顯更差。

內(nèi)存訪問優(yōu)化

我們發(fā)現(xiàn)內(nèi)存訪問效率低下,將對其進(jìn)行優(yōu)化。當(dāng)前內(nèi)核為卷積層中的每個(gè)乘法累加運(yùn)算從外部 DRAM 獲取系數(shù)數(shù)據(jù)。使用此配置,對 DRAM 的訪問以非常細(xì)的粒度進(jìn)行操作,因此 DRAM 上的負(fù)載變得非常高。

Xilinx的FPGA內(nèi)部的內(nèi)存層次結(jié)構(gòu)如下圖所示,F(xiàn)PGA中存在分布式RAM(Distributed RAM)、BRAM(Block RAM)、URAM(Ultra RAM)三種。

這些 FPGA 內(nèi)部的存儲(chǔ)器可以比 DRAM 運(yùn)行得更快,并且每個(gè)周期都可以穩(wěn)定地讀寫數(shù)據(jù)。因此,這次我們將圖像、權(quán)值大小等數(shù)據(jù)提前全部復(fù)制到FPGA中,并進(jìn)行修改,讓每一層都從FPGA的內(nèi)存中讀取數(shù)據(jù)。在這種情況下,圖像和權(quán)重大小讀取時(shí)間足夠小,因此我將堅(jiān)持使用 HLS 默認(rèn)值(BRAM 或分布式 RAM)。

要?jiǎng)?chuàng)建的電路框圖如下所示。

6be2a7a4-dcbc-11ed-bfe3-dac502259ad0.png

添加一個(gè)新電路x,x_local臨時(shí)存儲(chǔ)來自本地內(nèi)存的 DRAM 輸入的數(shù)據(jù)。至于loadweight輸出,它也是將層的數(shù)據(jù)緩沖到本地內(nèi)存中,并從端口biasfc2y_localy輸出結(jié)果。

在此圖中,為簡單起見,假定本地緩沖區(qū)是單個(gè)緩沖區(qū)。對于上次解釋的任務(wù)并行化,這個(gè)緩沖區(qū)應(yīng)該是乒乓緩沖區(qū)。

要在 HLS 中實(shí)現(xiàn)此電路,代碼中定義load一個(gè)store函數(shù)和一個(gè)本地storememcpy緩沖區(qū)。其實(shí)我們不需要自己定義這個(gè)函數(shù),如果我們使用C標(biāo)準(zhǔn)庫,load它會(huì)自動(dòng)生成一個(gè)高效的電路,所以我們就用它。

代碼如下所示:

111voidinference_with_local_buffer(constfloatx[kMaxSize],
112constfloatweight0[kMaxSize],constfloatbias0[kMaxSize],
113constfloatweight1[kMaxSize],constfloatbias1[kMaxSize],
114constfloatweight2[kMaxSize],constfloatbias2[kMaxSize],
115constfloatweight3[kMaxSize],constfloatbias3[kMaxSize],
116floaty[kMaxSize]){
117#pragmaHLSdataflow
118#pragmaHLSinterfacem_axiport=xoffset=slavebundle=gmem0
...
151
152conststd::size_tx_size=1*28*28;
153conststd::size_tw0_size=4*1*3*3,b0_size=4;
...
157conststd::size_ty_size=10;
158
159floatx_local[x_size];
160floatw0_local[w0_size],b0_local[b0_size];
...
164floaty_local[y_size];
165
166//fetchtolocalbuffer
167std::memcpy(x_local,x,x_size*sizeof(float));
168std::memcpy(w0_local,weight0,w0_size*sizeof(float));
...
176
177//runinferencewithlocalbuffer
178dnnk::inference(x_local,
179w0_local,b0_local,
180w1_local,b1_local,
181w2_local,b2_local,
182w3_local,b3_local,
183y_local);
184
185//storetoglobalbuffer
186std::memcpy(y,y_local,y_size*sizeof(float));
187}

第167行,將DRAM上的內(nèi)存復(fù)制到xFPGAx_local內(nèi)部的內(nèi)存中。之后,我們用來運(yùn)行x_local推理dnnk::inferencey_localmemcpy函數(shù),最終輸出到DRAM。

以下是綜合此電路并在真機(jī)上執(zhí)行的日志??梢钥闯觯拘枰?12.65 [ms/image] 的執(zhí)行時(shí)間已經(jīng)減少到 1.61 [ms/image]。

$./host/run_inference./host/inference_with_local_buffer_hw.xclbininference_with_local_buffer1
Elapsedtime:1.61029[ms/image]
accuracy:0.973

卷積層在這個(gè)內(nèi)核中的表現(xiàn)也稍好一些,因?yàn)樵純?nèi)核在卷積層內(nèi)部沒有 DRAM 訪問,將處理周期總數(shù)減少到 504898 -> 481378 個(gè)周期。481378個(gè)周期在300MHz轉(zhuǎn)換時(shí)為1.604 ms,與上述真機(jī)執(zhí)行時(shí)間(1.61 ms)相差無幾。因此,從inference_with_local_buffer可以看出,對于使用本地緩沖區(qū)進(jìn)行緩存的函數(shù),內(nèi)存訪問時(shí)間不會(huì)對整體性能產(chǎn)生不利影響。

通過循環(huán)并行化加速卷積層

到此為止,HLS報(bào)告的執(zhí)行時(shí)間和真機(jī)差不多,所以本文的主題循環(huán)并行化將從以下開始。

在卷積函數(shù)的最內(nèi)層循環(huán)中,大致進(jìn)行了以下三個(gè)過程。

像素,負(fù)載權(quán)重

像素,權(quán)重的乘積

將乘法結(jié)果添加到求和寄存器

這三個(gè)過程都是在下面的卷積函數(shù)的第31行完成的。

17for(int32_tich=0;ich

粗略地說,上述內(nèi)核的處理流程如下圖所示。

6bf8bb84-dcbc-11ed-bfe3-dac502259ad0.png

這里,假設(shè)處理load需要1個(gè)周期,fmul處理需要3個(gè)周期,fadd處理需要4個(gè)周期。第一行是迭代(循環(huán)的迭代次數(shù))i,下一行是下一次迭代i+1,最后i+2是處理后的波形。在不提取循環(huán)并行度的情況下,每次迭代的處理完全不重疊,每次迭代需要8個(gè)周期的處理時(shí)間。

比如load2-9、10-17等周期,電路都沒有運(yùn)行,一直運(yùn)行可以進(jìn)一步提高性能。load電路一直運(yùn)行時(shí)的波形如下圖所示。

6c0ba654-dcbc-11ed-bfe3-dac502259ad0.png

到目前為止,下一次迭代每 8 個(gè)周期開始一次,但在本例中,下一次迭代每 1 個(gè)周期開始一次。以這種方式提取不同迭代之間的并行性稱為循環(huán)并行化。可以進(jìn)行一次迭代的時(shí)間間隔稱為II(Iteration Interval),本例中寫為II=1。

在循環(huán)并行中,并行的抽象方式與之前的任務(wù)并行幾乎相同。然而,任務(wù)并行性提取幀之間的并行性,而循環(huán)并行性提取每一層內(nèi)處理迭代之間的并行性。此外,為了提取任務(wù)并行性,需要同時(shí)處理多個(gè)幀,因此存在需要將多個(gè)幀的輸入數(shù)據(jù)預(yù)先擴(kuò)展到FPGA上的DRAM等限制。另一方面,由于循環(huán)并行僅在幀內(nèi)完成,因此可以沒有特別限制地提取并行。

循環(huán)并行化的方法很簡單,#pragma HLS pipeline II=1只需要在循環(huán)中添加符號(hào),如下所示:這樣做kw可以優(yōu)化變量的循環(huán),以便它們可以一次處理一個(gè)循環(huán)。

17for(int32_tich=0;ich

僅通過添加#pragma HLS pipeline II=1就可以實(shí)現(xiàn)II=1,但即使對上述修改后的內(nèi)核進(jìn)行綜合,也會(huì)輸出以下記錄:目標(biāo)(Target)為II=1,但實(shí)際電路(Final)為II=4。

INFO:[v++204-61]Pipeliningloop'Loop1.1'.
INFO:[v++204-61]Pipeliningresult:TargetII=1,FinalII=4,Depth=12.

這是因?yàn)樵诘?1行的處理中,下一次迭代的計(jì)算依賴于上一次迭代sum += ...的相加結(jié)果。另一方面,x[pix_idx]的加載處理和x[pix_idx]*weight[weight_idx]的乘法處理不依賴于前迭代的結(jié)果,因此可以先處理。

#pragma HLS pipeline應(yīng)用后的波形大致如下。

6c23b2ee-dcbc-11ed-bfe3-dac502259ad0.png

load, fmul可以先運(yùn)行,fadd但要等到上一次迭代完成后才能運(yùn)行,所以整體faddII受到 4 個(gè)周期延遲的速率限制。

通過復(fù)制和寄存器提高性能

前面說了這個(gè)卷積不可能每個(gè)循環(huán)都做,因?yàn)閕+1迭代的結(jié)果取決于迭代次數(shù)。i在這里,sum通過將 sum 寄存器復(fù)制成四個(gè),我們改變了依賴關(guān)系,使得i迭代依賴于迭代的結(jié)果i-4。由于用文字難以理解,目標(biāo)波形如下所示。

6c3ade74-dcbc-11ed-bfe3-dac502259ad0.png

fadd(橙色、藍(lán)色、水色和綠色)的顏色fadd代表輸出目標(biāo)寄存器,輸出目標(biāo)寄存器在每個(gè)循環(huán)中切換。這樣,從第5周期開始到第8周期結(jié)束的一次迭代i的計(jì)算結(jié)果將被fadd第9周期的迭代首次使用。

要?jiǎng)?chuàng)建的電路應(yīng)該是上面描述的那種,但是從 Vivado HLS/Vitis 創(chuàng)建它需要稍微特殊的編寫方式。以下描述基于名為 shift_register_c 的 SDAccel 教程的內(nèi)容。

下面是使用移位寄存器的卷積函數(shù)的代碼。

82staticvoidconv2d_pipelined_v2(constfloat*x,constfloat*weight,constfloat*bias,int32_twidth,int32_theight,
83int32_tin_channels,int32_tout_channels,int32_tksize,float*y){
84staticconstintkShiftRegLength=4;
85
86for(int32_toch=0;och

主要有以下三個(gè)區(qū)別:

1、移位寄存器定義(L89-L90)

2、本地求和:重復(fù)求和寄存器(L111-L122)的求和

3、全局求和:重復(fù)求和寄存器(L130-L134)之間的求和處理

1的移位寄存器定義將4+1求和寄存器定義為FPGA上的寄存器。+1只是一個(gè)臨時(shí)寄存器,按照C語言語法只用來臨時(shí)存放加法的結(jié)果,在高級綜合時(shí)刪除。第90 行添加了一個(gè)新的 pragma(#pragma HLS array_partition)()以將移位寄存器定義為寄存器(完整),默認(rèn)情況下將其推斷為 BRAM。pragma 本身可以做很多其他事情,但我將在下一個(gè)數(shù)據(jù)并行化中觸及細(xì)節(jié)。

2 的本地求和在四個(gè)求和寄存器上累加乘法結(jié)果 (mul)。這里,glob_idx是ich、kh、kw 3個(gè)循環(huán)的索引。通常情況下,shift_reg[glob_idx % 4] += mul可以復(fù)制我們這次正在做的輸出寄存器,但是這樣,高級綜合結(jié)果II=4就不會(huì)改變。因此,這里使用官方示例中也使用的移位處理(shift_reg[i] = shift_reg[i + 1])II=1來實(shí)現(xiàn)這一點(diǎn)。每次對這兩個(gè)寄存器進(jìn)行shift_reg[0]加法mul運(yùn)算shift_reg[0]時(shí),它所包含的求和寄存器的數(shù)字(0 到 3)每個(gè)周期都會(huì)發(fā)生變化。

3 的全局求和對四個(gè)求和寄存器執(zhí)行求和運(yùn)算。#pragma HLS pipeline我們也在這里指定,但fadd由于延遲,這里我們沒有 II=1。

此修改允許kw循環(huán)的 II 為 1,從而實(shí)現(xiàn)最有效的循環(huán)并行化。另一方面,此修復(fù)程序并沒有提供 4 倍的加速,因?yàn)樗砑恿肆硪粋€(gè)全局求和循環(huán)。

評估

檢查綜合結(jié)果

比較以下三種配置的性能。

內(nèi)存訪問優(yōu)化后(無循環(huán)并行)

#pragma HLS pipeline II=1

使用移位寄存器加速后

結(jié)果總結(jié)在下表中。

方法 卷積層 II 第二層卷積迭代(二) 整個(gè)推理過程的迭代區(qū)間(二)
無循環(huán)并行 8 481377 481378
pipeline 4 257153 257154
移位寄存器后 1 127009 172482

著眼于第2個(gè)卷積層,通過pipeline改變loop parallelism -> onlypipeline獲得了約1.87倍的性能提升,通過應(yīng)用shift register -> 獲得了約2.02倍的性能提升。這里,本來是II = 4 -> II = 1,所以我們希望性能提升4倍左右,但實(shí)際上,上面描述的全局求和過程占用了很多時(shí)間,所以速度未獲得提升。

下面是應(yīng)用移位寄存器后配置的 HLS 報(bào)告。

6c4e38b6-dcbc-11ed-bfe3-dac502259ad0.png

在前面的推理過程中,瓶頸是第二個(gè)卷積層(conv2d_pipelined_v2),但這里的瓶頸是第一個(gè)卷積層(conv2d_pipelined_v2_1)。這是因?yàn)榈谝粋€(gè)卷積層是 1ch,3×3 卷積,所以一開始每個(gè)像素只執(zhí)行九次操作。在這種情況下,由于能夠執(zhí)行 II=1 的局部求和而帶來的性能增益被添加全局求和循環(huán)所帶來的性能損失所抵消,反之性能下降。另一方面,隨著輸入通道數(shù)和內(nèi)核大小的增加,局部求和處理的性能提升變得更加明顯,因此這種優(yōu)化在大規(guī)模網(wǎng)絡(luò)中變得更加有效。

總結(jié)

到目前為止通過調(diào)整的加速率如下。

方法 執(zhí)行時(shí)間(毫秒/圖像) 比以前的實(shí)施提速 相對于基線的改進(jìn)百分比
基線 20.81 1.00 1.00
任務(wù)并行化 12.65 1.65 1.65
通過本地緩沖區(qū)減少外部存儲(chǔ)器訪問 1.61 7.86 12.93
循環(huán)并行化(僅限卷積層) 0.61 2.64 34.11

盡管最初的實(shí)現(xiàn)根本不關(guān)心速度,但一些編譯指示添加和代碼修復(fù)產(chǎn)生了比基線快 34 倍的速度。

我在本文開頭所做的內(nèi)存訪問調(diào)優(yōu)目前特別有效。FPGA 的優(yōu)勢之一是其豐富的內(nèi)部 RAM 帶寬,因此隱藏對外部存儲(chǔ)器的訪問通常會(huì)產(chǎn)生顯著的性能提升,如本例所示。





審核編輯:劉清

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    599014
  • DRAM
    +關(guān)注

    關(guān)注

    40

    文章

    2282

    瀏覽量

    182979
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7366

    瀏覽量

    163102
  • HLS
    HLS
    +關(guān)注

    關(guān)注

    1

    文章

    128

    瀏覽量

    23919

原文標(biāo)題:從FPGA說起的深度學(xué)習(xí)(七)-循環(huán)并行化

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于HLS之任務(wù)并行編程

    ,用戶要手工添加DATAFLOWpragma,工具會(huì)在該pragma指定的區(qū)域內(nèi)判別任務(wù)之間的并行性,生成各進(jìn)程之間的模塊級控制信號(hào)。對于數(shù)據(jù)驅(qū)動(dòng)型,用于需要明確指定可并行執(zhí)行的
    的頭像 發(fā)表于 07-27 09:22 ?1098次閱讀
    基于HLS之<b class='flag-5'>任務(wù)</b>級<b class='flag-5'>并行</b>編程

    FPGA在人工智能中的應(yīng)用有哪些?

    FPGA(現(xiàn)場可編程門陣列)在人工智能領(lǐng)域的應(yīng)用非常廣泛,主要體現(xiàn)在以下幾個(gè)方面: 一、深度學(xué)習(xí)加速 訓(xùn)練和推理過程加速:FPGA可以用來加速深度學(xué)習(xí)的訓(xùn)練和推理過程。由于其高
    發(fā)表于 07-29 17:05

    利用NI LabVIEW的并行技術(shù)來提高測試的吞吐量

    的時(shí)候,他們必須理解不斷進(jìn)步的技術(shù),如多核處理器、現(xiàn)場可編程門陣列(FPGA)和高速數(shù)據(jù)總線,如PCI Express等等。通過將這些技術(shù)與NI LabVIEW并行編程軟件及NI TestStand
    發(fā)表于 12-12 16:02

    fpga基礎(chǔ)篇(二):三大并行結(jié)構(gòu)

    ,并行語句是同時(shí)執(zhí)行的,想想怎么讓FPGA執(zhí)行,所以FPGA從語法層次上就不允許并行并行。我把實(shí)際編程中經(jīng)常用到的
    發(fā)表于 04-13 10:23

    擾碼器的并行問題

    如果一個(gè)擾碼器現(xiàn)在做并行,例如要求輸入位寬為32位,那么本原多項(xiàng)式如何確定?在實(shí)現(xiàn)的過程中,如果想使用并行,是不是需要將同移位寄存器長一致的周期后狀態(tài)機(jī)算出來呢?不很明白為什么可以實(shí)現(xiàn)并行
    發(fā)表于 05-07 16:53

    基于FPGA的嵌入式多核處理器及SUSAN算法并行

    基于FPGA的嵌入式多核處理器及SUSAN算法并行
    發(fā)表于 08-30 18:11 ?24次下載

    利用NI LabVIEW實(shí)現(xiàn)真正的并行化處理和并行測量

    多核處理器、FPGA和PCI Express正在改變現(xiàn)代PC機(jī)的版圖,并幫助LabVIEW圖形編程根據(jù)工程師應(yīng)用邏輯的數(shù)據(jù)流向,實(shí)現(xiàn)真正的并行化處理和并行
    發(fā)表于 11-16 20:31 ?9637次閱讀
    利用NI LabVIEW實(shí)現(xiàn)真正的<b class='flag-5'>并行</b>化處理和<b class='flag-5'>并行</b><b class='flag-5'>化</b>測量

    JPEG壓縮算法并行設(shè)計(jì)

    方面并行性的優(yōu)勢,提出了基于OpenCL的JPEG壓縮算法并行設(shè)計(jì)方法。將JPEG算法功能分解為多個(gè)內(nèi)核程序,內(nèi)核之間通過事件信息傳遞進(jìn)行
    發(fā)表于 11-21 16:57 ?4次下載
    JPEG壓縮算法<b class='flag-5'>并行</b><b class='flag-5'>化</b>設(shè)計(jì)

    基于Spark的BIRCH算法并行的設(shè)計(jì)與實(shí)現(xiàn)

    在分布式計(jì)算和內(nèi)存為王的時(shí)代,Spark作為基于內(nèi)存計(jì)算的分布式框架技術(shù)得到了前所未有的關(guān)注與應(yīng)用。著重研究BIRCH算法在Spark上并行的設(shè)計(jì)和實(shí)現(xiàn),經(jīng)過理論性能分析得到并行
    發(fā)表于 11-23 11:24 ?0次下載
    基于Spark的BIRCH算法<b class='flag-5'>并行</b><b class='flag-5'>化</b>的設(shè)計(jì)與實(shí)現(xiàn)

    基于Hadoop平臺(tái)的LDA算法的并行實(shí)現(xiàn)

    基于MapReduce計(jì)算框架,采用Gibbs抽樣方法的并行LDA主題模型的建立方法。利用分布式計(jì)算框架MapReduce研究了LDA主題模型的并行實(shí)現(xiàn),并且考察了該
    發(fā)表于 12-05 13:51 ?0次下載
    基于Hadoop平臺(tái)的LDA算法的<b class='flag-5'>并行</b><b class='flag-5'>化</b>實(shí)現(xiàn)

    for 循環(huán)并行執(zhí)行的可能性

    我們將繼續(xù)介紹 Vivado HLS 所支持的 “for循環(huán)” 的優(yōu)化方法。在默認(rèn)情況下,Vivado HLS 并不會(huì)對順序執(zhí)行的 for 循環(huán)優(yōu)化為并行執(zhí)行,LOOP_MERGE 約束提供了這樣一種可能:for
    的頭像 發(fā)表于 08-01 16:59 ?2738次閱讀

    如何使用FPGA實(shí)現(xiàn)嵌入式多核處理器及SUSAN算法并行

    出了四核心嵌入式并行處理器FPEP的結(jié)構(gòu)設(shè)計(jì)并建立了FPGA驗(yàn)證平臺(tái).為了對多核處理器平臺(tái)性能進(jìn)行評測,提出了基于OpenMP的3種可行的圖像處理領(lǐng)域的經(jīng)典算法SUSAN算法的并行
    發(fā)表于 02-03 16:26 ?8次下載
    如何使用<b class='flag-5'>FPGA</b>實(shí)現(xiàn)嵌入式多核處理器及SUSAN算法<b class='flag-5'>并行</b><b class='flag-5'>化</b>

    基于數(shù)據(jù)驅(qū)動(dòng)的任務(wù)并行多重網(wǎng)格應(yīng)用

    多重網(wǎng)格是數(shù)值計(jì)算領(lǐng)域中一種加速迭代收斂的重要技術(shù),被廣泛應(yīng)用。近年來,大規(guī)模并行計(jì)算系統(tǒng)向多核、異構(gòu)眾核發(fā)展,多重網(wǎng)格應(yīng)用也亟須適應(yīng)新的并行計(jì)算平臺(tái)。文中采用一種數(shù)據(jù)驅(qū)動(dòng)的
    發(fā)表于 05-13 10:41 ?8次下載

    如何使用FPGA驅(qū)動(dòng)并行ADC和并行DAC芯片

    ADC和DAC是FPGA與外部信號(hào)的接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口和高速的并行接口。FPGA經(jīng)常用來采集中高頻信號(hào),因此使用并行ADC和DAC居多。本文將介紹如何使用
    的頭像 發(fā)表于 04-21 08:55 ?6789次閱讀

    verilog中for循環(huán)是串行執(zhí)行還是并行執(zhí)行

    在Verilog中,for循環(huán)并行執(zhí)行的。Verilog是一種硬件描述語言,用于描述和設(shè)計(jì)數(shù)字電路和系統(tǒng)。在硬件系統(tǒng)中,各個(gè)電路模塊是同時(shí)運(yùn)行的,并且可以并行執(zhí)行多個(gè)操作。因此,在V
    的頭像 發(fā)表于 02-22 16:06 ?2105次閱讀