0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于HLS之任务级并行编程

FPGA技术驿站 来源:FPGA技术驿站 2023-07-27 09:22 次阅读

HLS任务级编程第一篇文章可看这里:

HLS之任务级并行编程

HLS的任务级并行性(Task-level Parallelism)分为两种:一种是控制驱动型;一种是数据驱动型。对于控制驱动型,用户要手工添加DATAFLOWpragma,工具会在该pragma指定的区域内判别任务之间的并行性,生成各进程之间的模块级控制信号。对于数据驱动型,用于需要明确指定可并行执行的任务。

从描述手段来看,控制驱动型本质上是由工具判定各任务能否并行执行。用户在对各函数描述时只要遵守DATAFLOW的要求即可。例如:读取输入数据应该位于DATAFLOW区域的起始位置,写入输出数据应位于该区域的终止位置。DATALOW区域内的所有变量遵循“一次读一次写”原则。除非使用hls::stream,否则不支持反馈支路。不支持在指定条件下才执行函数。不支持for在指定条件下退出(使用break语句)。但控制驱动型比较灵活,这是因为DATAFLOW的作用对象可以是for循环也可以是函数。控制驱动器适合于顺序执行的C函数。控制驱动型模型带来的好处包括:当前函数在结束执行之前后续函数可以开始执行;函数在结束执行之前可以重新开始执行;两个或更多顺序函数可以同时开始执行。我们看一个例子。如下图所示,顶层函数diamond调用了4各函数funcA~funcD。

557fca60-2c11-11ee-a368-dac502259ad0.png 在没有添加DATAFLOW的情况下,工具能自动探测出funcB和funcC的并行性,这可从Schedule视图中看到,如下图所示。

5592c2be-2c11-11ee-a368-dac502259ad0.png 添加DATAFLOW之后,对两者性能进行对比,如下图所示(NO_TLP为没有添加DATAFLOW的solution),从Latency角度看,两者相当,但从interval角度看,DATAFLOW带来的效果还是很明显的。Interval从457降到了175。

55a328e8-2c11-11ee-a368-dac502259ad0.png 再看数据驱动型。数据驱动型要求任务之前以stream作为接口,允许反馈支路。用户需要明确通过hls::task指定可并行执行的任务。对于上述函数,我们可以将其改造为数据驱动型,如下图所示。代码第98行声明了4个stream,第99行~第102行通过hls::task指定并行任务。

55b74472-2c11-11ee-a368-dac502259ad0.png 将三者放在一起对比,如下图所示。可以看到数据驱动型无论在性能还是资源上都获得最佳表现。

55ccb1ae-2c11-11ee-a368-dac502259ad0.png

那么两种类型能否混合使用呢?答案是肯定的,但是有限制的,这源于两者的自身特征。可以在控制驱动型中嵌入数据驱动型,但反过来是不允许的。我们将上面的例子改造为控制驱动型嵌入数据驱动型的模式,如下图所示。这里需要注意的是代码第137行的DATAFLOWpragma,同时代码第141行和第142行都设置了task,task接口为stream。此外也给出了Vitis HLS的Schedule视图和Dataflow视图。Dataflow视图中也显示了KPN。关于KPN可参阅这里。

https://en.wikipedia.org/wiki/Kahn_process_networks

55e44418-2c11-11ee-a368-dac502259ad0.png5605458c-2c11-11ee-a368-dac502259ad0.png5614649a-2c11-11ee-a368-dac502259ad0.png

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92404
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • HLS
    HLS
    +关注

    关注

    1

    文章

    126

    浏览量

    23683
收藏 人收藏

    评论

    相关推荐

    浅析HLS任务并行

    HLS任务并行性(Task-level Parallelism)分为两种:一种是控制驱动型;一种是数据驱动型。
    的头像 发表于 07-27 09:21 622次阅读
    浅析<b class='flag-5'>HLS</b>的<b class='flag-5'>任务</b>级<b class='flag-5'>并行</b>性

    AMD-Xilinx的Vitis-HLS编译指示小结

    dataflow / pragma HLS stream dataflow指令通常和stream指令一起使用,可以启用任务流水打拍,允许函数和循环在其操作过程中重叠,增加 RTL 实现的并发度,并增加设计的整体
    发表于 12-31 21:20

    熟悉Vivado HLS基本功能要多少时间?

    您好Xilinx的用户和员工,我们正在考虑购买Zynq 7000用于机器视觉任务。我们没有编程FPGA的经验,并希望使用Vivado HLS来指导和加速我们的工作。关于这种方法的一些问题:您对
    发表于 03-25 09:04

    UCOSIII任务优先任务抢占的影响

    有两个任务:task1任务优先 3task2任务优先 4(当设置task2的优先小于10时
    发表于 05-05 04:36

    如何并行编程多个Artix 7 FPGA?

    我正在设计一个子板,上面有40个Artix 7(AC7A12T)设备。每台设备都应具有相同的图像。我不是一次编程链1中的每个器件的串行链,而是希望并行执行任务,以便所有FPGA同时进行编程
    发表于 05-14 07:01

    【正点原子FPGA连载】第一章HLS简介-领航者ZYNQHLS 开发指南

    主要可以从“设计的重用”和“抽象层级的提升”这两个方面来考虑。Xilinx推出的Vivado HLS工具可以直接使用C、C++或System C来对Xilinx系列的FPGA进行编程,从而提高抽象的层级
    发表于 10-10 16:44

    阻止任务级别并行性的常见情况

    粗粒度并行优化的任务流水阻止任务级别并行性的常见情况
    发表于 03-09 06:58

    FPGA高层次综合HLSVitis HLS知识库简析

    1、HLS最全知识库介绍高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象语言描述的电路模型的过程。对于AMD Xilinx而言
    发表于 09-07 15:21

    HLS-1Hin人工智能训练系统

    Habana Labs System 1H(HLS-1H)为数据中心带来了新水平的Al计算性能和电源效率,以及大规模的可扩展性。 HLS-1Hin包含四个Gaudi HL-205 Mezzanine
    发表于 08-04 06:06

    简易的并行编程

    说明:适用于没用烧写ATmega8并行编程器的朋友,初用ATmega8的工程师常常在串行编程时写错熔丝位,及加密位,造成不能再串行编程的不便,没并行
    发表于 07-16 13:04 97次下载

    FPGA并行编程:基于HLS技术优化硬件设计

    作为集成电路设计领域现场可编程门阵列 (FPGA) 技术的创造者之一,赛灵思一直积极推广高层次综合 (HLS) 技术,通过这种能够解读所需行为的自动化设计流程打造出可实现此类行为的硬件。赛灵思刚刚推出了一本专著,清晰介绍了如何使用 HL
    发表于 11-10 11:01 2779次阅读

    Dataflow | 粗粒度并行优化的任务级流水

    在本文中,我们将重点放在如何能够在不需要特殊的库或类的情况下修改代码风格以实现C代码实现并行性。Xilinx HLS 编译器的显着特征是能够将任务级别的并行性和流水线与可寻址的存储器
    发表于 03-02 06:19 12次下载
    Dataflow | 粗粒度<b class='flag-5'>并行</b>优化的<b class='flag-5'>任务</b>级流水

    研讨会:如何利用最新Vitis HLS提高任务并行性?

    当前在 AI、无线、视频/图像处理、医疗和消费领域使用的算法,复杂性已显著提升。 Vitis  高层次综合 (HLS) 可通过在选定的 AMD 器件上将 C/C++ 代码综合为可编程逻辑的 RTL
    的头像 发表于 07-05 08:15 308次阅读
    研讨会:如何利用最新Vitis <b class='flag-5'>HLS</b>提高<b class='flag-5'>任务</b>级<b class='flag-5'>并行</b>性?

    Vitis HLS相关问答详解

    需要手工在 C++ 代码里明确指定可并行执行的任务(用 task,添加头文件 hls_task.h),同时可并行执行的 task 接口(对应 C++ 函数的形参)必须是 stream
    的头像 发表于 08-11 11:23 409次阅读

    Vitis HLS:使用任务并行性的高性能设计

    电子发烧友网站提供《Vitis HLS:使用任务并行性的高性能设计.pdf》资料免费下载
    发表于 09-13 17:21 0次下载
    Vitis <b class='flag-5'>HLS</b>:使用<b class='flag-5'>任务</b>级<b class='flag-5'>并行</b>性的高性能设计