HLS开发学习-14- Vivado HLS 函数层面的优化

简介: HLS开发学习-14- Vivado HLS 函数层面的优化

写在前面


本文是本系列专题的第十四篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了Vivado HLS 函数层面的优化。

代码风格


编码风格对函数的主要影响在于函数参数和接口。如果函数的参数是明确的,Vivado HLS可以通过使用HLS库中的精度的类型进行定义数据类型。没有必要为每个变量创建任意的精度类型。

下面的示例是默认状态和使用ap_int的两种情况的对比。从结果中可知,使用ap_int更节约资源。

image.png

内联(inline)


函数内联删除了函数层次结构。函数可以使用INLINE指令进行内联。内联函数可以改进区域,允许函数中的组件与调用函数中的逻辑更好地共享或优化。HLS可能会自动内联小的函数,以提高结果质量(QoR)。你可以通过向任何自动内联的函数添加带有off选项的内联指令来防止这种情况。

从下面这个例子中可以看出,如果只是把inline简单关闭的话,延迟会增大,资源使用也会变多。

image.png

分配(allocation)


他为资源分配指定实例限制。它定义并限制用于实现特定功能或操作的RTL实例的数量。简单来说就是同样的一份电路,在RTL级中被调用的次数进行规划。

image.png

使用allocation,在默认情况,limit = 1,limit = 2 的对比。可得出,在limit = 2 时延时最小,同时用到的资源也是最多的。

image.png

任务级流水线:DATAFLOW


之前DATAFLOW只是应用于函数内部,这里将DATAFLOW应用于函数之间。

image.png

DATAFLOW的优化方法可以将一系列的串行任务进行优化,这里的任务可以是函数,可以是循环,或者两种都有。使用这一系列顺序任务,DATAFLOW优化创建了一个并行流程架构。上图所示的通道确保任务不需要等待前一个任务完成所有操作后才能开始。所以DATAFLOW允许任务之间有交叠,也就是并行化处理,这种方法提高了数据的吞吐量,减少了延迟。

下面这个例子。在不使用dataflow的处理指令,执行周期是8,而进行优化过后,执行周期变成了5。

image.png

使用示例:

image.png

小结


  • 任意精度类型可以帮助缩小面积。
  • 函数内联可以提高QoR。
  • 分配能帮助实现一个延迟和面积直接的权衡。
  • 数据流优化是提高设计吞吐量的一种强大方法。
目录
相关文章
|
1月前
|
编解码 网络协议 Unix
相较于ffmpeg我更倾向于使用socket实现推流工作
相较于ffmpeg我更倾向于使用socket实现推流工作
59 0
|
9月前
|
编解码 Android开发
Android平台GB28181设备接入、RTMP推送模块如何实现高效率的视频编码
我们在做Android平台RTMP推送、轻量级RTSP服务和GB28181设备接入模块的时候,有一个点是逃不掉的:如何高效率的实现视频数据编码?
156 0
|
安全 API 索引
ffplay整体框架
ffplay播放器实现原理源码走读
86 0
|
存储 人工智能 监控
HLS实践 - 06 - 优化设计(一)
HLS实践 - 06 - 优化设计
239 0
HLS实践 - 06 - 优化设计(一)
|
缓存 数据处理 索引
HLS实践 - 06 - 优化设计(二)
HLS实践 - 06 - 优化设计
184 0
HLS实践 - 06 - 优化设计(二)
|
测试技术
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
187 0
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
HLS开发学习-15- HLS优化指令汇总
HLS开发学习-15- HLS优化指令汇总
299 0
HLS开发学习-15- HLS优化指令汇总
|
算法 C语言 C++
HLS开发学习-03-VIVADO HLS设计流程
HLS开发学习-03-VIVADO HLS设计流程
292 0
HLS开发学习-03-VIVADO HLS设计流程
HLS实践 - 03 - 接口优化设计(二)
HLS实践 - 03 - 接口优化设计
324 0
HLS实践 - 03 - 接口优化设计(二)
HLS实践 - 03 - 接口优化设计(一)
HLS实践 - 03 - 接口优化设计
275 0
HLS实践 - 03 - 接口优化设计(一)