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

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

3天内不再提示

关于pipeline 以及 unroll 指令的介绍

电子设计 来源:电子设计 作者:电子设计 2022-02-09 09:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文转载自: XILINX开发者社区微信公众号

HLS 优化设计的最关键指令有两个:一个是流水线 (pipeline) 指令,一个是数据流(dataflow) 指令。正确地使用好这两个指令能够增强算法地并行性,提升吞吐量,降低延迟但是需要遵循一定的代码风格。展开 (unroll) 指令是只针对 for 循环的展开指令,和流水线指令关系密切,所以我们放在一起首先我们来看一下这三个指令在 Xilinx 官方指南中的定义:

Unroll: Unroll for-loops to create multiple instances of the loop body and its instructions that can then be scheduled independently.

Pipeline:Reduces the initiation interval by allowing the overlapped execution of operations within a loop or function.

Dataflow:Enables task level pipelining, allowing functions and loops to execute concurrently. Used to optimize through output and/or latency.

Unroll 指令在 for 循环的代码区域进行优化,这个指令不包含流水线执行的概念,单纯地将循环体展开使用更多地硬件资源实现,保证并行循环体在调度地过程中是彼此独立的。

Pipeline 指令在循环和函数两个层级都可以使用,通过增加重复的操作指令(如增加资源使用量等等)来减小初始化间隔。

Dataflow 指令是一个任务级别的流水线指令,从更高的任务层次使得循环或函数可以并行执行,目的在于减小延迟增加吞吐量。

Unroll 和 Pipeline 指令相互重合的关系在于,当对函数进行流水线处理时,以下层次结构中的所有循环都会自动展开,而使用展开指令的循环并没有给定对II的约束。在最新版本的 Vitis HLS 工具中,工具会自动分析数据之间的流水线操作关系,以II=1为目标优化,但是还是会受限于设计本身的算法和代码风格。下图非常清晰地阐明了Unroll 和 Pipeline 指令的关系,Pipeline 指令放置的循环层次越高,循环展开的层次也越高,最终会导致使用更大面积的资源去实现,同时并行性也更高。

pIYBAGAJe8GAUqsaAAOfRydUAUE307.png

这里如果循环的边界是变量的话,则无法展开。这将组织函数被流水线化,可以通过添加tripcount 等指令,指定循环在综合时大概的最大最小边界。

在循环流水线优化的过程中,有一个完美循环,半完美循环和非完美循环的代码风格概念,只有当流水线循环完美或半完美时,才可以将嵌套循环彻底并行展开。

完美循环:只有最里面的循环才具有主体内容,在循环语句之间没有指定逻辑,循环界限是恒定的。

半完美循环:只有最里面的循环才具有主体 (内容), 在循环语句之间没有指定逻辑,只有最外面的循环边界可以是可变的。

非完美循环:循环的主体内容分布在循环的各个层次或内层循环的边界是变量。

pIYBAGAJfAOAJQTrAAO0fO_yjLU263.png

当我们要争去最大流水线循环的成功执行,就需要将非完美循环手动修改成完美或半完美循环。 以下代码例子给出了完美循环(左边)和非完美循环(右边)在Vitis HLS 中的执行结果。

o4YBAGAJfEGAEP37AABWikWhzdc769.png

o4YBAGAJfIGAGbXPAAKaN1p2Ycs520.png

综合完毕后,我们可以在分析窗口和综合报告中都很清晰的看出,完美循环在执行的时候,工具自动将内层循环LOOP_J和外层循环LOOP_I合并为一整个大循环,并实现了整个大循环的流水线操作,延迟的周期数为: (400-1) *1+8-1 =406个周期数,延迟大约为 408*2.5 = 1,020 ns

非完美循环中,内层和外层循环没有合并,只有内层循环LOOP_J 实现了流水线执行,进出内循环的浪费的时钟周期增加了整个循环的时钟周期,同时还有一些命令行没有办法跨越循环的层级实现调度上的优化,这些因素都导致了设计的延迟的增加。

本文关于pipeline 以及 unroll 指令的介绍到此结束,下篇文章我们将着重介绍 daraflow 指令。

审核编辑:何安

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

    关注

    1

    文章

    617

    浏览量

    37295
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    关于NFC镍锌铁氧体片的介绍

    关于NFC镍锌铁氧体片的介绍
    的头像 发表于 12-04 10:52 33次阅读
    <b class='flag-5'>关于</b>NFC镍锌铁氧体片的<b class='flag-5'>介绍</b>

    时钟周期、机器周期、指令周期介绍

    执行操作,以时钟作为驱动完成每一步。因此时钟周期决定了计算机的工作节奏,进而影响到计算机工作速度。 机器周期:通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU完成一个
    发表于 11-17 07:54

    欧盟CE-RED指令介绍

    欧盟CE-RED指令,全称是RadioEquipmentDirective(无线电设备指令),指令编号为2014/53/EU,是欧盟针对所有带无线发射功能设备制定的一项强制性法规。它是欧盟CE认证
    的头像 发表于 11-05 14:01 287次阅读
    欧盟CE-RED<b class='flag-5'>指令</b><b class='flag-5'>介绍</b>

    关于协处理器自定义指令的实现

    ,4种指令一共能定义出512条自定义指令。 现在指令已经介绍完了,相信学过汇编的同学都知道汇编指令中有这源操作数跟目的操作数这两个概念,源
    发表于 10-31 06:36

    关于系统链接脚本的介绍

    一、队伍介绍 本篇为蜂鸟E203系列分享第四篇,本篇介绍的内容是系统链接脚本。 二、如何实现不同的下载模式? 实现三种不同的程序运行方式,可通过makefile的命令行指定不同的链接脚本,从而实现
    发表于 10-30 08:26

    软硬件协同技术分享 - 任务划分 + 自定义指令

    开发技术。分文将分享介绍硬件加速器与软件结合的协同开发方式 软硬件任务划分 我们的硬件设计涉及到MFCC模块。直接交由CPU的一次指令的五级流水线处理在麦克风数据取入上的资源耗费可以说是
    发表于 10-28 08:03

    利用蜂鸟内核实现指令的仿真模拟

    介绍一下RISC-V的指令架构,在RSIC-V中主要有以下6种指令格式: 因此,我们在对于一条指令进行分析时,我们首先要知道其的指令类型,
    发表于 10-24 08:52

    利用蜂鸟内核来实现指令的仿真模拟

    介绍一下RISC-V的指令架构,在RSIC-V中主要有以下6种指令格式: 因此,我们在对于一条指令进行分析时,我们首先要知道其的指令类型,
    发表于 10-24 08:17

    e203进行F指令扩展的具体实现

    (EXU)中并针对F指令的相关功能执行对应操作。 IR寄存器用于存储操作数在寄存器中的索引位,并且该索引位需要完成对整数寄存器以及浮点寄存器的判断。判断索引位的位置信息以及对应寄存器信息,需要利用取值阶段
    发表于 10-21 11:51

    Jenkins Pipeline的高级应用技巧

    为一名在运维一线摸爬滚打5年的工程师,我见过太多因为CI/CD流水线配置不当而导致的生产事故。今天分享一些Jenkins Pipeline的高级应用技巧,这些都是我在实际项目中踩过坑后总结的经验,希望能帮助大家少走弯路。
    的头像 发表于 08-27 14:32 433次阅读

    通用MCU语音芯片支持串口+AT指令485通讯

    文档简单介绍AD24N的性能参数、串口通讯指令、应用方向、等内容
    的头像 发表于 07-24 11:35 484次阅读
    通用MCU语音芯片支持串口+AT<b class='flag-5'>指令</b>485通讯

    使用k230,可以使用pipeline库,将输入的视频流进行二值化处理吗?

    关于使用k230,可以使用pipeline库,将输入的视频流进行二值化处理吗
    发表于 06-16 06:46

    从技术到产品 | 士模Pipeline ADC

    流水线型(Pipeline)ADC由于能够同时满足高精度和高采样率的需求,在高性能数据采集和仪器系统、医疗设备、通信测试设备、软件无线电等领域得到了广泛应用。高采样速率往往伴随着较高的功耗,而客户群
    的头像 发表于 04-28 16:37 1110次阅读
    从技术到产品 | 士模<b class='flag-5'>Pipeline</b> ADC

    CPU的各种指令和执行流程

    、数据传输等功能。要深入理解CPU的指令,我们需要从多个维度进行分析,尤其是指令的构成、分类、执行流程以及与不同架构的关系。
    的头像 发表于 04-18 11:24 1907次阅读

    AXI握手时序优化—pipeline缓冲器

    skid buffer(pipeline缓冲器)介绍   解决ready/valid两路握手的时序困难,使路径流水线化。   只关心valid时序参考这篇写得很好的博客链接: 握手协议(pvld
    的头像 发表于 03-08 17:10 968次阅读
    AXI握手时序优化—<b class='flag-5'>pipeline</b>缓冲器