通過使用以200 MHz運(yùn)行的8個(gè)并行浮點(diǎn)加速器,展示小型ZU3EG SoC的科學(xué)計(jì)算能力。
硬件元件
96Boards Ultra96 ×1
Avnet AES-ACC-U96-PWR ×1
USB Cable Assembly, USB Type A Plug to Micro USB Type B Plug ×1
Mini displayport cable ×1
Micro SD card (Must be 8GB or larger)×1
DisplayPort monitor ×1
USB Mouse (Optional) ×1
USB Keyboard (Optional) ×1
軟件App與線上服務(wù)
Avnet Ultra96 Pynq image v2.4
介紹
牛頓物理描述了我們宇宙中的行為和非常大的物體/粒子。根據(jù)某些假設(shè),這些定律可以應(yīng)用于天文尺寸到高爾夫球(甚至更小)尺寸的物體/粒子。不同粒子之間的相互作用由以下的重力方程控制。
在N粒子系統(tǒng)中,每個(gè)粒子經(jīng)受了其他(N-1)個(gè)粒子的力。力的組合結(jié)果導(dǎo)致了所述粒子的加速。類似地,所有其他(N-1)個(gè)粒子同時(shí)經(jīng)歷了系統(tǒng)中其他粒子對它作用的力。所得到的的所有粒子的加速度,結(jié)合空間里的初始位置,初始速度和時(shí)間不長分別得到所有N個(gè)粒子的新位置。為了簡化模型的實(shí)現(xiàn),做出了以下的假設(shè):
1. 所有粒子都是點(diǎn)質(zhì)量(質(zhì)點(diǎn)模型)
2. G=1
3. 在重力計(jì)算中引入一個(gè)修正系數(shù),以避免當(dāng)兩個(gè)點(diǎn)質(zhì)量處于完全相同的坐標(biāo)時(shí)候產(chǎn)生的誤差。
該設(shè)計(jì)已經(jīng)實(shí)現(xiàn)通過python軟件加載16bit正負(fù)整數(shù)格式的初始坐標(biāo)、質(zhì)量、修正系數(shù)和模擬時(shí)間步長。盡管Vivado環(huán)境中提供了浮點(diǎn)數(shù)的加法、減法和乘法,但我們還是努力設(shè)計(jì)自定義浮點(diǎn)數(shù)格式。
設(shè)計(jì):概念證明
該算法采用python軟件實(shí)現(xiàn)和仿真,以下是硬件實(shí)現(xiàn)之前在PC上進(jìn)行粒子模擬的主要算法和屏幕截圖。
由于迭代過程,該算法具有O(N2)的計(jì)算復(fù)雜度。這是在硬件中實(shí)現(xiàn)加速器的絕佳機(jī)會。您可以嘗試使用nbody_x86.py來查看粒子模擬在軟件中的運(yùn)行速度。使用硬件實(shí)現(xiàn)的加速器可以更快地運(yùn)行粒子模擬。
該算法可被矢量化,因此如果使用矢量處理器,復(fù)雜度將會降低到O(N)。下面的示例是識別計(jì)算密集型算法的關(guān)鍵部分,并在fabric/PL中為它們提供加速器。
假設(shè)在t0時(shí)刻,所有粒子的位置和速度信息都是已知的。
考慮雙粒子系統(tǒng)。由第二個(gè)粒子引起第一個(gè)粒子的加速度計(jì)算如下:
a = (G*m2)/(r^2)n
為了保持加速度的方向信息:a = (G*m2*|r|)/(r^3)
N 物體問題:
1.上述概念可以擴(kuò)展到N個(gè)物體的體系。
2.在GRAPE-[x]中,修正系數(shù)“ε”用于研究尺寸的詳細(xì)影響。對于此項(xiàng)目,is設(shè)置為0。
3.另一個(gè)修正系數(shù)用于防止不同的顆粒彼此非常接近,即防止“r~=0”,如上面python軟件中的變量“sf”所示。
硬件設(shè)計(jì)
該設(shè)計(jì)采用8個(gè)并聯(lián)加速器發(fā)動,可完全支持多達(dá)4000多個(gè)物體并行模擬。
使用8個(gè)并行加速器的實(shí)現(xiàn)
最初的設(shè)計(jì)有一個(gè)加速器以75MHz運(yùn)行。并聯(lián)增加7個(gè)加速器是的工作頻率增加了一倍以上,功耗增加了約1W。一個(gè)加速器的數(shù)據(jù)將在后面的部分中顯示,此表給出了8個(gè)并聯(lián)加速器的數(shù)據(jù)。
性能
針對4000個(gè)粒子,該設(shè)計(jì)滿足了200MHz的定時(shí)!通過添加管道修改了浮點(diǎn)加法和乘法。
僅使用200MHz的加速器實(shí)現(xiàn) - 數(shù)據(jù)比較
盡管邏輯復(fù)雜,但實(shí)現(xiàn)在XCZU3EG上使用一個(gè)單重力計(jì)算引擎消耗了以下資源。一個(gè)重力引擎可以計(jì)算1024個(gè)粒子之間的相互作用(由輸入和輸出的BRAM深度決定)。定時(shí)器成功關(guān)閉在200MHz。流水線技術(shù)在重力引擎中實(shí)現(xiàn)。在每個(gè)本地模塊中重置流水線以實(shí)現(xiàn)優(yōu)化全局重置繞線傳播。整個(gè)設(shè)計(jì)在單個(gè)時(shí)鐘源上運(yùn)行。
浮點(diǎn)計(jì)算
由于科學(xué)計(jì)算中的數(shù)字從極小的數(shù)值到天文大值,IEEE754 FP32是浮點(diǎn)數(shù)計(jì)算的初始選擇。在IEEE754 FP32中,數(shù)字由1個(gè)符號位,8個(gè)指數(shù)位和23個(gè)尾數(shù)位表示,如圖所示:
然而,DSP48E2只能執(zhí)行27bx18b的乘法運(yùn)算。 因此,選擇使用僅具有18個(gè)尾數(shù)位的自定義浮點(diǎn)表示。 因此,該設(shè)計(jì)中的浮點(diǎn)運(yùn)算使用27b浮點(diǎn)表示。
可以這種格式表示的最小數(shù)字:+/- 1.000000000000000001 x 2 **(- 126)
可以此格式表示的最大數(shù)字:+/- 1.111111111111111111 x 2 **(127)
指數(shù)偏差為127
NaN,溢出和下溢的IEEE 754條件尚未最大限度地實(shí)施。
FP算法實(shí)現(xiàn)
實(shí)現(xiàn)了基于IPI的浮點(diǎn)運(yùn)算。 為了有效使用DSP48,浮點(diǎn)數(shù)的加,乘法被限定為27位,而由于限制,浮點(diǎn)數(shù)的逆平方根被固定為單精度浮點(diǎn)表示法。 int16到浮點(diǎn)數(shù),浮點(diǎn)數(shù)到int16也是使用Xilinx IP完成的。
流程圖
下圖顯示了RAM,計(jì)算引擎,流水線重力引擎等的最高層視圖。
重力引擎
重力引擎是設(shè)計(jì)的核心。 它是按照上圖所示的算法實(shí)現(xiàn)的。下圖顯示了重力引擎和所有15個(gè)管道的實(shí)現(xiàn)細(xì)節(jié)。
控制和狀態(tài)登記; 地址空間
所有BRAM均使用基于APB3總線的RTL開發(fā)的BRAM控制器進(jìn)行控制。 AXI -APB3橋在塊設(shè)計(jì)中實(shí)例化。 類似地,實(shí)現(xiàn)了另外的APB控制和狀態(tài)寄存器組以便控制計(jì)算引擎。
以下是地址段和寄存器空間:
設(shè)計(jì)層次結(jié)構(gòu)
i_design_1是PS系統(tǒng),i_compute_engine是PL部分中實(shí)現(xiàn)的硬件設(shè)計(jì)。
軟件流程
Python軟件是在PYNQ框架上編寫的,用于按順序執(zhí)行以下操作:
1. 計(jì)算系統(tǒng)中N粒子的x,y,z,m的初始條件,修正系數(shù)和模擬時(shí)間步長。
2. 通過將int16的x,y,z,m值加載到BRAM中來配置計(jì)算引擎
3. 啟動計(jì)算引擎
4. 等待計(jì)算引擎完成一個(gè)時(shí)間間隔的步驟
5. 從TXRAM中檢索新的x,y,z
6. 使用DisplayPort模塊創(chuàng)建DisplayPort框架。 將幀歸零,使用新數(shù)據(jù)加載幀并將幀寫入監(jiān)視器。
7. 重復(fù)!
DisplayPort配置為1280 x 720像素
粒子的新位置可能遠(yuǎn)遠(yuǎn)超出顯示器尺寸。它們只是沒有顯示。
編輯:hfy
-
加速器
+關(guān)注
關(guān)注
2文章
806瀏覽量
38037 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
84982
發(fā)布評論請先 登錄
相關(guān)推薦
評論