HLS的硬件加速器设计

完整可点击跳转

目录

  • 硬件加速器的设计方法
  • 高层次综合HLS
    • HLS与电路地对应关系
    • HLS的设计规范
  • HLS优化
    • 延迟优化
      • 降低单个循环的延迟
        • 循环展开(Unroll)
        • 循环展平(Flatten)
      • 多个循环的并行化
        • 循环合并
        • 循环函数化
        • 数据流执行(Dataflow)
    • 吞吐量优化
      • 循环/函数流水线
      • 数据流
    • 优化调试

请添加图片描述

硬件加速器的设计方法

一般地,硬件加速器的设计可采用完全硬件化和部分硬件化2种设计方法。
完全硬件化 的设计方法需要根据网络结构,使用HDL(Hardware Description Language)或HLS(High-Level Synthesis)实现神经网络的每一个层。该方法的优点是硬件化程度高,可实现网络层次的流水线,并且能够获得很高的加速效果,但显然存在开发难度大、开发周期长、硬件资源消耗较多以及通用性差的缺点。
部分硬件化 的设计方法首先从神经网络的运算类型出发进行考虑,通过分析和必要的测试,得出神经网络内部各类运算的占比,然后有针对性地选择占比较大的运算进行加速;对于占比较小的运算,则仍然使用软件实现。部分硬件化设计方法的理论依据是Amdahl’s law。该方法具有开发难度较低、开发周期较短、硬件资源消耗较少的优点,同时还能够使加速器具有一定的通用性和灵活性,并且在某些情形下能够获得与完全硬件化方法相近的性能。

高层次综合HLS

HLS与电路地对应关系

一般地,软件程序中的函数最终会综合成为相应的电路模块实体,而程序中的控制流和数据流则由HLS工具中的调度和绑定程序(Scheduling and Binding Processes)映射到硬件电路当中。

软件成分对应地硬件组成
函数模块
函数的参数模块地输入/输出端口
操作符功能单元
变量线网(wire)或寄存器(reg)
数组存储器
控制流控制逻辑

HLS的设计规范

虽然HLS可将高级语言描述的程序转换成硬件电路,但HLS并没有强大到可以处理任何代码。许多在软件编程中常用的概念在硬件中很难实现,所以有时需要将HLS与HDL结合,从而使得设计更加灵活。

HLS工具通常需要用户提供附加信息(通过suggestion或#pragma)来帮助完善程序,因此我们说HLS工具会同时"限制"又"加强"了一门语言。例如,HLS一般无法进行动态内存分配,且大部分HLS工具对标准库的支持也非常有限;此外,使用HLS编程时,应当避免使用系统调用和递归语句,以尽量降低程序的复杂程度。除去这些设计限制,HLS的处理范围非常广(包括DMA,数据流,Scratchpad Memory等),优化效率也较高。

一般地,使用HLS设计开发硬件电路时,应遵循的规范如下

  • 不使用动态内存分配,如malloc()、free()、new和delete等
  • 不使用系统调用,如abort()、exit()、printf()等(可在测试代码中使用系统调用,但在需要综合的代码中,系统调用将被自动忽略或删除)
  • 不使用递归语句
  • 减少使用指针对指针的操作
  • 减少使用标准库函数(HLS支持math.h中的常用函数,但仍存在不兼容)
  • 减少使用C++中的函数指针和虚函数

HLS优化

延迟吞吐量是电路设计中常用的2个性能指标。延迟值得是从输入数据到输出结果之间的耗时,而吞吐量则是两次输出结果之间的时间差。
![[…/log/Pasted image 20240301145327.png]]

延迟优化

降低单个循环的延迟

循环是代码中最常见的结构之一,如何降低循环的延迟显然是延迟优化的关键问题。

循环展开(Unroll)

HLS使用一个硬件模块实现循环体。如果循环语句的循环次数为n,则该硬件模块将被执行n次。假如现在每次循环执行m次循环体,那么完成相同的功能只需要n/m次,这就是循环展开的基本思想。循环展开的本质是牺牲更多的资源来换取加速效果。
在HLS中,可使用#pragma HLS UNROLL factor=<int>的制导语句来告诉编译器哪个地方需要做循环展开。其中,参数factor用于指示循环体应该被复制多少次。当某个循环被展开了m次后,HLS编译器将生成m个硬件模块并行执行。例如以下,对程序进行factor为2的展开:

for (int i = 0; i< N; i++){
#pragma HLS unroll factor=2a[i] = b[i] + c[i];
}

上述代码等效于:

for (int i = 0; i < N

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 使用AddListener监听事件与取消监听

在Unity中&#xff0c;有时候我们会动态监听组件中的某个事件。当我们使用代码动态加载多次&#xff0c;每次动态加载后我们会发现原来的和新的事件都会监听&#xff0c;如若我们只想取代原来的监听事件&#xff0c;那么就需要取消监听再添加监听了。 如实现如下需求&#xff…

【力扣白嫖日记】626.换座位

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 626.换座位 表&#xff1a;Seat 列名类型idintstudentvarchar id 是该表的主键&#xff08;唯一值&#xf…

寒假作业Day 06

寒假作业Day 06 一、选择题 1、关于内存管理&#xff0c;以下有误的是&#xff08; &#xff09; A: malloc在分配内存空间大小的时候是以字节为单位 B: 如果原有空间地址后面还有足够的空闲空间用来分配&#xff0c;则在原有空间后直接增加新的空间&#xff0c;使得增加新空…

初阶数据结构:二叉树(补充扩展)

目录 1. 堆排序1.1补充&#xff1a;建堆的时间复杂度1.2 堆排序&#xff1a;升序与降序 2. TopK问题3. 二叉树的链式结构及其遍历方式3.1 二叉树的链式结构3.2 二叉树的前序遍历2.2 二叉树的中序遍历2.3 后序遍历2.4 层序遍历 4. 二叉树OJ练习4.1 单值二叉树4.2 判断两棵二叉树…

Qt之QPluginLoader使用插件子项目及插件间通信(简易框架)(含部分源码+注释)

文章目录 一、项目示例1.导航栏操作页面操作示例图2.打开所有页面操作示例图3.打开指定界面操作示例图3.插件重载操作演示 二、插件逻辑个人理解1.QPluginLoader的简单使用2.子插件的基本要素 三、项目结构&#xff08;思路&#xff09;简述1.定义插件接口类2.定义插件类别一个…

C/C++ 纸张尺寸问题(蓝桥杯)

题目描述&#xff1a; 在 ISO 国际标准中定义了 A 0 A0A0 纸张的大小为 1189 m m 841 m m 1189mm841mm1189mm841mm&#xff0c;将 A 0 A0A0 纸沿长边对折后为 A 1 A1A1 纸&#xff0c;大小为 841 m m 594 m m 841mm594mm841mm594mm&#xff0c;在对折的过程中长度直接取下整…

Python自动化测试:API接口自动化——requests、webSocket

接口自动化测试1 一、requests二、简单示例1.导入/引入库2.请求与响应示例1>简单访问百度主页-GET请求2>简单的登录请求-POST请求3>保存cookies至头信息headers4>其他接口请求时携带headers 三、webSocketwebSocket连接与数据收发示例 本文介绍了借助Python的reque…

什么是同源策略?如何检测跨站点 WebSocket 劫持漏洞?post 表单跳转跨域问题、Ajax跨域请求、浏览器特性和安全策略、WebSocket 协议连接

什么是同源策略?如何检测跨站点 WebSocket 劫持漏洞?post 表单跳转跨域问题、Ajax跨域请求、浏览器特性和安全策略、WebSocket 协议连接。 同源策略(Same Origin Policy)是一种浏览器安全机制,用于保护用户的信息和数据安全。它限制了来自不同源(协议、域名、端口)的网页…

华为手环 8:返校季新宠,助力高效学习与健康生活

随着春节假期的结束&#xff0c;学生们也纷纷踏上了返校的旅途。新的学期&#xff0c;新的气象&#xff0c;让华为手环8为你的带来全新的智能生活体验。它不仅仅是一款风格多变的时尚手环&#xff0c;还拥有了智能消息提醒、100多种运动模式和睡眠监测等强大功能&#xff0c;让…

计算机设计大赛 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

基于springboot实现粮食仓库管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现粮食仓库管理系统演示 摘要 粮食作为人类生活的重要物质来源&#xff0c;在粮食流通过程中对于粮食仓库的管理不容忽视&#xff0c;随着我国粮食生产能力的提升以粮食存储管理的不断革新&#xff0c;粮食产量的增加为粮食仓储管理带来了挑战也带来了机遇&am…

蜂窝物联:物联网大数据云平台功能模块简介

蜂窝云平台可远程获取现场环境&#xff08;如温室大棚、稻田&#xff09;的空气温湿度、土壤水分温度、二氧化碳浓度、光照强度及视频图像&#xff0c;通过数据模型分析&#xff0c;可以自动控制湿帘、风机、喷淋滴灌、内外遮阳、顶窗侧窗、加温补光、增氧机等设备&#xff1b;…

MySQL面试题-锁(答案版)

锁 1、MySQL 有哪些锁&#xff1f; &#xff08;1&#xff09;全局锁 加了全局锁之后&#xff0c;整个数据库就处于只读状态了&#xff0c;这时其他线程执行以下操作&#xff0c;都会被阻塞&#xff1a; 对数据的增删改操作&#xff0c;比如 insert、delete、update等语句&…

【深度学习笔记】计算机视觉——R-CNN

区域卷积神经网络&#xff08;R-CNN&#xff09;系列 sec_rcnn 除了 sec_ssd中描述的单发多框检测之外&#xff0c; 区域卷积神经网络&#xff08;region-based CNN或regions with CNN features&#xff0c;R-CNN&#xff09; Girshick.Donahue.Darrell.ea.2014也是将深度模型…

知识图谱辅助的个性化推荐系统

知识图谱辅助的个性化推荐系统 将从下面4个方面展开&#xff1a; 推荐系统的基础知识知识图谱辅助的推荐方法介绍基于embedding的知识图谱推荐方法混合型知识图谱推荐方法 推荐系统的基础知识 1、什么是推荐系统 在当前互联网时代&#xff0c;推荐系统是所有面向用户的互联…

【深度学习笔记】计算机视觉——多尺度目标检测

多尺度目标检测 在 sec_anchor中&#xff0c;我们以输入图像的每个像素为中心&#xff0c;生成了多个锚框。 基本而言&#xff0c;这些锚框代表了图像不同区域的样本。 然而&#xff0c;如果为每个像素都生成的锚框&#xff0c;我们最终可能会得到太多需要计算的锚框。 想象一…

【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录 一、前言 二、 效果图 三、安装PHP扩展 四、添加模拟串口 五、PHP发送数据给硬件 PHP代码 前端代码 一、前言 上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据&#xff0c;这里同样是以天平为例&#xff0c;介绍怎么向硬件设备发送数据&#xff0c; 需…

深度学习500问——Chapter02:机器学习基础(3)

文章目录 2.10 主成分分析&#xff08;PCA&#xff09; 2.10.1 主成分分析&#xff08;PCA&#xff09;思想总结 2.10.2 图解PCA核心思想 2.10.3 PCA算法推理 2.10.4 PCA算法流程总结 2.10.5 PCA算法主要优缺点 2.10.6 降维的必要性及目的 2.10.7 KPCA与PCA的区别 2.11 模型评估…

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致 现在有sqlserver和mysql两个库上的表在进行同步&#xff0c;sqlserver上的是源表&#xff0c;mysql上是目标表。 我们就把sqlserver上的数据同步到mysql上 mysql 是没有数据的。 sqlserver的三个表只是创建了…

利用Python自动化日常任务

在快节奏的现代生活中&#xff0c;时间就是一切。幸运的是&#xff0c;Python提供了一系列强大的库和工具&#xff0c;可以帮助我们自动化那些乏味且重复的任务&#xff0c;从而释放我们的时间&#xff0c;让我们可以专注于更有创造性和有意义的工作。下面&#xff0c;我们将探…