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

    文章

    3556

    浏览量

    93519
  • 函数
    +关注

    关注

    3

    文章

    4273

    浏览量

    62290
  • HLS
    HLS
    +关注

    关注

    1

    文章

    128

    浏览量

    23977
收藏 人收藏

    评论

    相关推荐

    浅析HLS任务并行

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

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

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

    【正点原子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

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

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

    如何在不需要特殊库或类的情况下实现C代码并行性?

    提取实现任务 (task_level) 的硬件并行算法是设计高效的HLS IP内核的关键。 在本文中,我们将重点放在如何能够在不需要特殊的库或类的情况下修改代码风格以实现C代码实现
    的头像 发表于 02-11 11:05 1397次阅读
    如何在不需要特殊库或类的情况下实现C代码<b class='flag-5'>并行</b>性?

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

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

    基于数据驱动的任务并行多重网格应用

    多重网格是数值计算领域中一种加速迭代收敛的重要技术,被广泛应用。近年来,大规模并行计算系统向多核化、异构众核化发展,多重网格应用也亟须适应新的并行计算平台。文中采用一种数据驱动的任务并行
    发表于 05-13 10:41 8次下载

    hlsxfopencv

    vivado本身集成了opencv库以及hls视频库了,opencv不能被综合导出为RTL电路,hls视频库的功能有所欠缺,因此引入xfopencv作为既可以被综合导出为RTL电路,也能够实现opencv丰富的功能。
    的头像 发表于 09-09 15:07 1751次阅读

    FPGA基础HLS

    1、HLS简介 HLS(High-Level Synthesis)高层综合,就是将 C/C++的功能用 RTL 来实现,将 FPGA 的组件在一个软件环境中来开发,这个模块的功能验证在软件环境中来
    的头像 发表于 12-02 12:30 5051次阅读

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

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

    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><b class='flag-5'>并行</b>性的高性能设计