Vitis HLS 学习笔记--Schedule Viewer 调度查看器

目录

1. 简介

2. Schedule Viewer详解

2.1 视图说明

2.1.1 Operation\Control Step

2.1.2 周期关系图

2.1.3 Schedule Viewer 菜单栏

2.1.4 属性视图

2.2 内容说明

2.2.1 实参(b)解释

2.2.2 实参(a)解释

2.2.3 变量(i)解释

2.2.4 数组操作解释

2.2.5 a*xin[i] 解释

3. 总结


1. 简介

Schedule Viewer 是一个非常有用的工具,它用于展示高级合成过程中算法的执行时间表(即调度)。它有助于您识别阻碍并行化的任意循环依赖关系、时序违例以及数据依赖关系。

大体上,schedule viewer 的用途包括:

可视化展示:Schedule viewer以图形化的方式展示了算法的执行顺序和并行执行的操作,可以看到各个操作是如何在时间线上被安排和执行的。

性能分析:分析设计中的性能瓶颈,设计者可以了解到哪些操作是并行执行的,哪些操作是顺序执行的。

资源利用:Schedule viewer还展示了各个操作使用的资源(如加法器、乘法器等),这有助于优化设计,以减少资源消耗,提高资源利用效率。

调试与优化:当设计未能达到预期性能或存在问题时,schedule viewer可用来识别问题(如数据依赖导致的延迟),并对设计进行相应的调整和优化。

2. Schedule Viewer详解

2.1 视图说明

2.1.1 Operation\Control Step

  • 在视图左侧,显示的是将在 RTL 层级中作为逻辑来实现的操作和循环的名称。
  • 括号里的名称表示操作名称。
  • 操作按拓扑顺序执行。

2.1.2 周期关系图

  • 竖轴虚线,由时钟不确定性而保留的时钟周期部分。
  • 每项操作在表中均显示为灰框。
  • 多周期操作的灰框,中间有一条水平线贯穿。
  • 灰框长度,由操作延迟占总时钟周期百分比来设置。
  • 运算符数据依赖关系显示为蓝色实线,选中时可见。

2.1.3 Schedule Viewer 菜单栏

  • 在报告视图右上角,可提供许多便捷功能。
  • 焦点控制
  • 筛选

按类型筛选可根据操作的功能来限制显示的操作。例如,仅将加法器、乘法器和函数调用可视化会移除“和”与“或”之类的所有小操作。

按集群筛选的作用是充分利用调度程序的功能对基本操作进行分组,然后将其作为单个组件来调度。可启用集群筛选设置来为集群上色,甚至可在查看器内将集群折叠为单一大型操作。这样即可提供更简洁的调度视图。

2.1.4 属性视图

可查看“Schedule Viewer”中选中的特定函数、循环或操作的详细信息。

对于函数或循环,属性视图会显示: 

  • Initiation Interval (II)(启动时间间隔)。
  • Loop Iteration Latency(循环迭代时延):表示完成循环的单次迭代所需的时钟周期数。
  • Latency(时延):表示函数计算所有输出值或者循环完成所有迭代所需的时钟周期数。
  • Pipelined(流水打拍):表示在 RTL 设计中对函数或循环进行流水打拍。
  • Slack(裕量):表示函数或循环的时序裕量。
  • Tripcount(循环次数):表示循环完成的迭代数。
  • Resource Utilization(资源利用):显示用于实现函数或循环的 BRAM、DSP、LUT 或 FF 的数量。

对于运算和存储映射,属性视图会显示:

  • Name(名称):对应包含代码的位置。
  • Op Code(运算码):表示调度的运算,例如,add、sub 和 mult。
  • Op Latency(运算时延):显示运算或存储的绑定的默认时延或指定时延。
  • Bitwidth(位宽):对应运算的位宽。
  • Impl(实现):定义用于指定运算或存储的实现。

2.2 内容说明

以下示例HLS加速代码,实现了一个简单的线性函数y = ax + b,对输入数组xin中的每个元素应用这个函数,然后将结果存储在输出数组yo中。

#include <ap_int.h>void func(ap_int<8>  xin[3],ap_int<8>  a,ap_int<8>  b,ap_int<17> yo[3])
{int i = 0;
loop:for(i = 0; i < 3; i++){yo[i] = a * xin[i] + b;}
}

完成C Synthesis后,单击Schedule Viewer可启动视图。

2.2.1 实参(b)解释

实参(b)共包含三个操作:

  • 读取操作,8bit
  • 带符号的位宽扩展(sign extension),16bit
  • 加法操作,Impl=dsp48,Op Latency=1

注:名称sext_In10,命名包含了此代码的位置信息,虽然此信息可能不准^_^。。。

2.2.2 实参(a)解释

实参(a)同样包含三个操作: 

  • 读取操作,8bit
  • 带符号的位宽扩展,16bit
  • 乘法操作,Impl=dsp48,Op Latency=2

lhs(left-hand side),左值是指赋值语句中被赋值的变量。lhs(sext)结合起来表示,将符号扩展后的值赋值给一个变量或表达式。

2.2.3 变量(i)解释

变量(i)共包含五个操作:

  • load操作,2bit
  • 整数比较icmp,输出1bit,Impl=auto,用于决定执行分支(br)
  • 加法操作,2bit,Impl=fabric,变量i的自增
  • 强制类型转换(zero extension),输出64bit,用于寻址xin数组
  • 回写操作

注:零扩展(zero extension)是一种常见的操作,用于将无符号数的低位扩展到更高的位数上,以便进行算术或逻辑运算。

关于分支(br, branch)的分析:

  • for(i = 0; i < 3; i++),i是循环变量
  • i最大值3(i=2时有效),所以占2bit
  • i被扩展为64bit,只是在HLS工具中生效,并不代表硬件实现

2.2.4 数组操作解释

从C综合报告来看,xin和yo均被映射为存储器。与FIFO的直接读取不通,操作存储器牵涉到寻址操作。

* SW-to-HW Mapping
+----------+--------------+---------+----------+
| Argument | HW Interface | HW Type | HW Usage |
+----------+--------------+---------+----------+
| xin      | xin_address0 | port    | offset   |
| xin      | xin_ce0      | port    |          |
| xin      | xin_q0       | port    |          |
| a        | a            | port    |          |
| b        | b            | port    |          |
| yo       | yo_address0  | port    | offset   |
| yo       | yo_ce0       | port    |          |
| yo       | yo_we0       | port    |          |
| yo       | yo_d0        | port    |          |
+----------+--------------+---------+----------+

存储器操作步骤:

  • xin_addr(getelementptr), get element pointer, 获取指针的偏移量,即xin数组的寻址地址。
  • rhs(load),右值是指赋值语句中的值或表达式。

该操作通常用于访问数组、结构体或其他复合数据类型中的元素,以实现指针的偏移和访问。

对于yo的操作遵循同样的逻辑。

2.2.5 a*xin[i] 解释

a*xin[i]共包含五个操作: 

  • 从lhs(sext)_In10(sext)中取得a的值
  • 从sext_In232(sext)中取得xin[i]的值
  • ret_V(*)执行乘法运算

3. 总结

简而言之,Vitis HLS中的schedule viewer是设计和优化硬件加速器过程中的一个关键工具,它通过提供算法执行的详细视图,帮助设计者理解、分析和优化他们的设计。

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

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

相关文章

Windows如何安装hadoop

Hadoop是一个开源的分布式计算平台&#xff0c;旨在处理大规模数据的存储和处理。它提供了分布式文件系统&#xff08;HDFS&#xff09;和分布式计算框架&#xff08;MapReduce&#xff09;&#xff0c;使得用户能够在大规模集群上存储和处理数据。Hadoop最初由Apache软件基金会…

cmake进阶:定义函数的使用方法

一. 简介 前面已经将 cmake 中常用的命令 command、变量 variable 都给大家进行了详细介绍&#xff0c;通过前面的学习&#xff0c;相信大家已经掌握了 cmake 工具的基本使用方法&#xff1b; 接下来我们再进一步学习 cmake&#xff0c;本文开始学习 cmake中定义函数。 二. …

TypeScript学习日志-第十九天(namespace命名空间)

namespace命名空间 一、基本用法 namespace 所有的变量以及方法必须要导出才能访问&#xff0c;如图&#xff1a; 二、 嵌套 namespace 可以进行嵌套使用&#xff0c;如图&#xff1a; 它也必须需要导出才能访问 三、合并 当我们出现两个同名的 namespace 它就会合并这两…

EFDC模型安装及建模方法;在排污口论证、水质模拟、地表水环评、地表水水源地划分、水环境容量计算等领域中的应用

目录 专题一 EFDC软件安装 专题二 EFDC模型讲解 专题三 一维河流模拟实操 专题四 建模前处理 专题五 EFDC网格剖分介绍 专题六 EFDC二维湖库水动力模拟/非保守染色剂模拟 专题七 EFDC水质模型参数及原理介绍 专题八 EFDC一、二、三维湖库水质模拟 专题九 基于EFDC的地…

nodejs的ws+vue3编写聊天室的demo

nodejs编写ws服务是非常简单高效的&#xff0c;nodejs有众多的实现ws的库&#xff0c;如ws,SocketIO等&#xff0c;nodejs的事件线程是单线程的&#xff0c;所以不要在事件线程内做阻塞性的操作&#xff0c;耗时的操作交给工作线程或者子进程操作。 我使用nodejsvue3实现了写了…

408数据结构-二叉树的遍历 自学知识点整理

前置知识&#xff1a;二叉树的概念、性质与存储结构 二叉树的遍历 二叉树的遍历是指按某条搜索路径访问树中每个结点&#xff0c;使得每个结点均被访问一次&#xff0c;而且仅被访问一次。 二叉树的递归特性: ①要么是棵空二叉树&#xff1b; ②要么就是由“根节点左子树右子树…

【NOI】C++程序结构入门之分支结构二

文章目录 前言一、逻辑运算符1.导入2.逻辑与&#xff08;&&&#xff09;3.逻辑或&#xff08;||&#xff09;4.逻辑非&#xff08;!&#xff09; 二、例题讲解问题&#xff1a;1656. 是两位的偶数吗问题&#xff1a;1658. 游乐设施问题&#xff1a;1659. 是否含有数字5…

AI绘画:Stable Diffusion 拒绝一眼塑料味的AI质感,超写实人物图片如何制作?简单几步教会你!

今天给大家介绍一款能够对生成的人像进行皮肤调节的 lora。 上面两幅图片的生成参数一样&#xff0c;尺寸也一样&#xff0c;但右边一幅图片相较于左面图片的画面质感&#xff0c;特别是人像皮肤的质感上有很大的提升&#xff0c;看上去更加细腻有层感。 这就是我们今天要介绍…

linux下的调试工具gdb的详细使用介绍

在之前学习中我们使用的通常是集各种功能于一体的编译器&#xff0c;例如VS stdio&#xff0c;但是一个程序在编辑后还要进行编译&#xff0c;然后才能产生一个二进制的可执行文件&#xff0c;编辑和翻译工作都可以使用不同的软件进行&#xff0c;例如记事本就是一款编辑软件&a…

03.配置监控一台服务器主机

配置监控一台服务器主机 安装zabbix-agent rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm配置zabbix-agent,配置的IP地址是zabbix-server的地址&#xff0c;因为要监控这台主机 vim /etc/zabbix/zab…

免费开源线上线下交友社交圈子系统 小程序+APP+H5 可支持二开!

为什么要玩社交软件&#xff1a;互联网社交软件的独特优势 首先&#xff0c;社交软件为我们提供了一个便捷的沟通方式。在传统的交往方式中&#xff0c;人们需要面对面交流&#xff0c;这种方式在时间和空间上都受到限制。而社交软件打破了这些限制&#xff0c;无论我们身处何地…

既能自动仿写公众号爆文,还能批量帮你上架闲鱼商品,打造自己的数字员工,简直yyds

「想象一下&#xff0c;如果有一个机器人在你的计算机上24小时不间断地工作&#xff0c;会不会做梦都笑着」 一、RPA机器人是什么&#xff1f; RPA——机器人流程自动化&#xff0c;它可以帮助人们完成重复性的、繁琐的工作&#xff0c;比如数据输入、网页爬取、自动化流程等…

llama3 史上最强开源大模型,赶超GTP-4,逼宫OpenAI

2024年4月18日&#xff0c;Meta公司推出了开源大语言模型Llama系列的最新产品—Llama 3&#xff0c;包含了80亿参数的Llama 3 8B和700亿参数的Llama 3 70B两个版本。Meta称其为“迄今为止最强的开源大模型”。 怪兽级性能 LLaMA3 提供了不同参数规模的版本&#xff0c;以适应…

你真的知道Show Master Status吗?

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 你真的知道Show Master Status吗&#xff1f; 前言输出字段展示file详解Position详解Binlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Set 前言 在数据库的世界里&#xff0c;每一个字段都像是一个谜团&a…

微服务---gateway网关

目录 gateway作用 gateway使用 添加依赖 配置yml文件 自定义过滤器 nacos上的gateway的配置文件 我们现在知道了通过nacos注册服务&#xff0c;通过feign实现服务间接口的调用&#xff0c;那对于不同权限的用户访问同一个接口&#xff0c;我们怎么知道他是否具有访问的权…

Verilog中求两个数的差值

根据输入信号a,b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a,b为8bit位宽的无符号数。如果a>b&#xff0c;则输出a-b&#xff0c;如果a≤b&#xff0c;则输出b-a。 接口信号图如下&#xff1a; 代码如下&#xff1a; &#xff08;CSDN代码块不支持Veril…

WPF之绑定属性值转换

1&#xff0c;使用Binding.Format属性简易设置绑定的属性数据显示格式。 <TextBox Grid.Row"2" Grid.Column"1"><TextBox.Text><Binding Path"UnitCost" StringFormat"{}{0:C3}" > …

加州大学欧文分校英语中级语法专项课程02:Adjectives and Adjective Clauses 学习笔记

Adjectives and Adjective Clauses course certificate 本文是 https://www.coursera.org/learn/adjective-clauses 这门课的学习笔记。 文章目录 Adjectives and Adjective ClausesWeek 01: Adjectives and Adjective PhrasesLearning Objectives Adjectives Introduction Le…

一个新细节,Go 1.17 将允许切片转换为数组指针!

在 Go 语言中&#xff0c;一个切片&#xff08;slice&#xff09;包含了对其支持数组的引用&#xff0c;无论这个数组是作为一个独立的变量存在于某个地方&#xff0c;还是仅仅是一个为支持分片而分配的匿名数组。 其切片基本结构都如下&#xff1a; // runtime/slice.go typ…

ChatGPT 4.0 直接用 !!!Code Copilot编程大模型、DALL-E AI绘图、绘制流程图、上传文件

嗨&#xff0c;你好呀&#xff0c;我是哪吒。 这一年最让人揪心的热点&#xff0c;就是各种层出不穷的AI技术。 原以为它只是短暂霸屏&#xff0c;但现实却赤裸裸展示了&#xff0c;什么叫AI抢走你的饭碗&#xff0c;连招呼都不打一声! 什么策划方案、公众号文案、营销卖点、…