基于 Vitis HLS 的单个乘法 DSP 映射研究

2024-06-19 04:12

本文主要是介绍基于 Vitis HLS 的单个乘法 DSP 映射研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 自媒体账号
  • 2 引言
  • 3 整数乘法
  • 4 定点乘法
  • 5 浮点乘法
  • 6 总结

1 自媒体账号

目前运营的自媒体账号如下:

  • 哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.com

如果觉得有所收获的话,可以点击我的主页 -> 充电 -> 自定义充电 支持一下,十分感谢!

  • 微信公众号 【雪天鱼】
    |550
  • CSDN 【雪天鱼】: 雪天鱼-CSDN博客

QQ 学习交流群

  • FPGA科研硕博交流群 910055563 (进群有一定的学历门槛,长期未发言会被请出群聊,主要交流FPGA科研学术话题)
  • CNN | RVfpga学习交流群(推荐,人数上限 2000) 541434600
  • FPGA&IC&DL学习交流群 866169462

记录下自己的学习过程,个人拙见,请谨慎参考。

2 引言

ZCU106 的DSP型号为 DSP48E2,支持的最大乘法位宽是 27-bit x 18-bit;
目标:通过简单的单个元素乘法,观察 HLS 工具将不同位宽的乘法映射为几个DSP

  • Vitis HLS 2021.1
  • ZCU106

以下结论的成立的前提是相信 HLS C综合后报告结果是正确的,因为本文主要研究对于HLS工具而言,是将不同位宽的乘法映射为几个DSP。所以不会使用 Vivado 进一步进行验证。
但实际上,Vitis HLS 和 Vivado 的综合结果是会有一定的差距的。

3 整数乘法

  • 测试代码:
#include <ap_int.h>constexpr unsigned int IN_SIZE  = 20;
typedef ap_int<32> int_test;
void pixel_mul_int(int_test input[IN_SIZE],int_test weight[IN_SIZE],int_test output[IN_SIZE]){for(int i=0; i<IN_SIZE; i++){#pragma HLS PIPELINE II=1output[i] = input[i] * weight[i];}}

通过一个 for 循环实现 IN_SIZE 次元素相乘

  • 32位 x 32位
    image.png|875
    32 位整数乘法需要 3 个DSP

image.png|525
2 个时钟周期完成单次迭代计算,周期1读input和weight, 周期2 进行乘法计算

  • 27 位 x 27 位
    image.png|900
    27 位整数乘法需要 2 个DSP

  • 18位 x 18 位 | 17位 x 17位
    image.png|900
    18位整数乘法需要 1 个DSP
    问题:使用单个DSP,为什么 Iteration Latency就从 2 变成了 5
    image.png|625
    从调度图中可以看到,此时乘法需要三个时钟周期才能完成,导致完成单次迭代的时间变长

  • 16 位 x 16 位 | 14 位 x 14 位 | 12位 x 12位 | 11位 x 11位
    image.png|900


  • 10位 x 10位
    image.png|900

  • 8 位 x 8 位
    image.png|900
    不再占用DSP,使用 LUT 计算

  • 6 位 x 6 位
    image.png|900

  • 4位 x 4 位
    image.png|900

所以对于整数乘法总结如下:

  • 当被乘数位宽 > 27-bit, 乘数位宽 > 18-bit 需要3个DSP实现; 当被乘数位宽 <= 27-bit, 乘数位宽 > 18-bit 需要2个DSP实现;当被乘数位宽 <= 27-bit, 乘数位宽 <=18-bit 需要1个DSP实现;
  • 当乘数与被乘数的位宽均较小时(这里临界点是 10位整数乘法),将不会映射到DSP硬核上计算,而是采用LUT实现。并且随着位宽的继续减少,所用的LUT资源也会随之减少。

4 定点乘法

  • 测试代码:
#include <ap_fixed.h>constexpr unsigned int IN_SIZE  = 20;
typedef ap_fixed<32, 10> fixed_mul;
void pixel_mul_fixed(fixed_mul input[IN_SIZE],fixed_mul weight[IN_SIZE],fixed_mul output[IN_SIZE]){for(int i=0; i<IN_SIZE; i++){#pragma HLS PIPELINE II=1output[i] = input[i] * weight[i];}}
  • 32位有符号定点数计算 — ap_fixed<32, 20> | ap_fixed<32, 10> | ap_fixed<32, 5>
    image.png|1000
    与 32 位整数计算的综合结果一样, 且整数位的大小不影响最终结果,综合结果只和乘数和被乘数的位宽有关。即 DSP 能实现支持位宽内的定点小数乘法。

  • 27位有符号定点数计算 — ap_fixed<27, 10>
    image.png|975

  • ap_fixed<32, 10> x ap_fixed<16, 2>
    image.png

HLS 内启动 Implementation
image.png

  • 18位有符号定点数计算 — ap_fixed<18, 10>
    image.png|975

  • 10位有符号定点数计算 — ap_fixed<10, 5>
    image.png|975

5 浮点乘法

  • fp32 x fp32
    image.png
    遇到的问题:无法打开调度图,
    通过重启 Vitis HLS ,重新C综合后解决该问题
    image.png|525
    第0周期和第1周期读取输入数据,第2,3,4周期进行乘法计算,第5周期写回结果

6 总结

  • 整数乘法和定点乘法,只有乘数和被乘数的总位宽不变,乘法在 DSP 实现的策略一样,延迟和占用个数不会改变。
  • 在使用 HLS 工具进行硬件开发时,在满足精度的前提下,可以通过限制乘数和被乘数在目标 DSP 硬核的输入范围内,避免浪费DSP资源。

待解决问题:

  • Q: DSP48E2 是否可以直接支持整数运算、定点运算以及浮点运算?
    可能需要通过 Vivado 调用 DSP IP 进行更深入的研究

这篇关于基于 Vitis HLS 的单个乘法 DSP 映射研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073973

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

SuperMap iManger 单个镜像更新流程

1. 下载镜像 docker pull registry.cn-beijing.aliyuncs.com/supermap/common-dashboard-api:11.1.1-240802-amd64 label 没区分架构,在 x64 环境 pull arm64 镜像 通过 --platform=arm64 参数可以实现 docker pull mariadb:10.5.26