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