通过使用以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与线上服务
xilinx vivado design suite
avnet ultra96 pynq image v2.4
介绍
牛顿物理描述了我们宇宙中的行为和非常大的物体/粒子。根据某些假设,这些定律可以应用于天文尺寸到高尔夫球(甚至更小)尺寸的物体/粒子。不同粒子之间的相互作用由以下的重力方程控制。
在n粒子系统中,每个粒子经受了其他(n-1)个粒子的力。力的组合结果导致了所述粒子的加速。类似地,所有其他(n-1)个粒子同时经历了系统中其他粒子对它作用的力。所得到的的所有粒子的加速度,结合空间里的初始位置,初始速度和时间不长分别得到所有n个粒子的新位置。为了简化模型的实现,做出了以下的假设:
1. 所有粒子都是点质量(质点模型)
2. g=1
3. 在重力计算中引入一个修正系数,以避免当两个点质量处于完全相同的坐标时候产生的误差。
该设计已经实现通过python软件加载16bit正负整数格式的初始坐标、质量、修正系数和模拟时间步长。尽管vivado环境中提供了浮点数的加法、减法和乘法,但我们还是努力设计自定义浮点数格式。
设计:概念证明
该算法采用python软件实现和仿真,以下是硬件实现之前在pc上进行粒子模拟的主要算法和屏幕截图。
由于迭代过程,该算法具有o(n2)的计算复杂度。这是在硬件中实现加速器的绝佳机会。您可以尝试使用nbody_x86.py来查看粒子模拟在软件中的运行速度。使用硬件实现的加速器可以更快地运行粒子模拟。
该算法可被矢量化,因此如果使用矢量处理器,复杂度将会降低到o(n)。下面的示例是识别计算密集型算法的关键部分,并在fabric/pl中为它们提供加速器。
假设在t0时刻,所有粒子的位置和速度信息都是已知的。
考虑双粒子系统。由第二个粒子引起第一个粒子的加速度计算如下:
a = (g*m2)/(r^2)n
为了保持加速度的方向信息:a = (g*m2*|r|)/(r^3)
n 物体问题:
1.上述概念可以扩展到n个物体的体系。
2.在grape-[x]中,修正系数“ε”用于研究尺寸的详细影响。对于此项目,is设置为0。
3.另一个修正系数用于防止不同的颗粒彼此非常接近,即防止“r~=0”,如上面python软件中的变量“sf”所示。
硬件设计
该设计采用8个并联加速器发动,可完全支持多达4000多个物体并行模拟。
使用8个并行加速器的实现
最初的设计有一个加速器以75mhz运行。并联增加7个加速器是的工作频率增加了一倍以上,功耗增加了约1w。一个加速器的数据将在后面的部分中显示,此表给出了8个并联加速器的数据。
性能
针对4000个粒子,该设计满足了200mhz的定时!通过添加管道修改了浮点加法和乘法。
仅使用200mhz的加速器实现 - 数据比较
尽管逻辑复杂,但实现在xczu3eg上使用一个单重力计算引擎消耗了以下资源。一个重力引擎可以计算1024个粒子之间的相互作用(由输入和输出的bram深度决定)。定时器成功关闭在200mhz。流水线技术在重力引擎中实现。在每个本地模块中重置流水线以实现优化全局重置绕线传播。整个设计在单个时钟源上运行。
浮点计算
由于科学计算中的数字从极小的数值到天文大值,ieee754 fp32是浮点数计算的初始选择。在ieee754 fp32中,数字由1个符号位,8个指数位和23个尾数位表示,如图所示:
然而,dsp48e2只能执行27bx18b的乘法运算。 因此,选择使用仅具有18个尾数位的自定义浮点表示。 因此,该设计中的浮点运算使用27b浮点表示。
可以这种格式表示的最小数字:+/- 1.000000000000000001 x 2 **(- 126)
可以此格式表示的最大数字:+/- 1.111111111111111111 x 2 **(127)
指数偏差为127
nan,溢出和下溢的ieee 754条件尚未最大限度地实施。
fp算法实现
实现了基于ipi的浮点运算。 为了有效使用dsp48,浮点数的加,乘法被限定为27位,而由于限制,浮点数的逆平方根被固定为单精度浮点表示法。 int16到浮点数,浮点数到int16也是使用xilinx ip完成的。
流程图
下图显示了ram,计算引擎,流水线重力引擎等的最高层视图。
重力引擎
重力引擎是设计的核心。 它是按照上图所示的算法实现的。下图显示了重力引擎和所有15个管道的实现细节。
控制和状态登记; 地址空间
所有bram均使用基于apb3总线的rtl开发的bram控制器进行控制。 axi -apb3桥在块设计中实例化。 类似地,实现了另外的apb控制和状态寄存器组以便控制计算引擎。
以下是地址段和寄存器空间:
设计层次结构
i_design_1是ps系统,i_compute_engine是pl部分中实现的硬件设计。
软件流程
python软件是在pynq框架上编写的,用于按顺序执行以下操作:
1. 计算系统中n粒子的x,y,z,m的初始条件,修正系数和模拟时间步长。
2. 通过将int16的x,y,z,m值加载到bram中来配置计算引擎
3. 启动计算引擎
4. 等待计算引擎完成一个时间间隔的步骤
5. 从txram中检索新的x,y,z
6. 使用displayport模块创建displayport框架。 将帧归零,使用新数据加载帧并将帧写入监视器。
7. 重复!
displayport配置为1280 x 720像素
粒子的新位置可能远远超出显示器尺寸。它们只是没有显示。
源科推出2U加固型固态阵列,带来革命性改变
全固态电池有何优势?
微软为其Outlook引入一种新的基于语音的数字助理
不要让不良信号摄入破坏锁相环(PLL)/合成器
详解双电源开关的工作原理
FPGA加速N粒子重力并行模拟实现和仿真案例
3D打印机和3D扫描仪是什么,两者相结合将会怎样
如何查看gpu使用率_gpu使用率99%正常吗
Microchip与机器学习软件领军企业合作,利用32位单片机简化边缘人工智能设计
工业互联网可以治理雾霾问题吗
对于5G应用市场的未来分析和介绍
共射放大电路为什么会失真?为什么没有放大?
比亚迪王传福:新能源车企不应该攀比电池能量密度
更强规格推出,华为云耀云服务器 L 实例成为双 11 最大赢家
成本的增加 华硕宣布将提高显卡和主板的价格
联想股价长期低位徘徊 联想品牌口碑错位而行
烟感器型吸顶天线与灯型吸顶天线的使用区别
NOKIA预约破50万、HTC紧急辟谣 看看谁比锤子懂情怀
220v转5v芯片ESOP-8 AH8665
印刷电路板是如何协助应急人员工作的