Vitis HLS 学习笔记--HLS优化指令示例-目录

embedded/2024/9/23 11:19:36/

目录

1. 示例集合概述

2. 内容分析

2.1 array_partition

2.2 bind_op_storage

2.3 burst_rw

2.4 critical_path

2.5 custom_datatype

2.6 dataflow_stream

2.7 dataflow_stream_array

2.8 dependence_inter

2.9 gmem_2banks

2.10 kernel_chain

2.11 lmem_2rw

2.12 loop_pipeline

2.13 loop_reorder

2.14 partition_cyclicblock

2.15 plram_access

2.16 port_width_widening

2.17 shift_register

2.18 simple_vadd

2.19 wide_mem_rw

3. 学习规划


1. 示例集合概述

这个 Xilinx Vitis 加速示例集合提供了一系列的 Vitis HLS 教程和示例:Vitis HLS Examples at 2022.1Vitis_Accel_Examples. Contribute to Xilinx/Vitis_Accel_Examples development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/Xilinx/Vitis_Accel_Examples/tree/2022.1/cpp_kernels

如果您是新手,这些示例将帮助您快速上手并理解 Vitis HLS 开发环境和编程模型。对于有经验的开发者来说,这些示例可以作为性能优化和高级功能实现的参考。

2. 内容分析

2.1 array_partition

矩阵乘法(行 x 列),演示如何通过数组分区来实现更好的性能。

2.2 bind_op_storage

向量加法,如何使用BIND OP和STORAGE来获得更好的实现风格。

2.3 burst_rw

AXI4 主接口突发读写。

2.4 critical_path

展示一种普通的编程风格,可能会导致关键路径问题,并降低设计时序。通过更好的编程风格,可以改进设计时序。

2.5 custom_datatype

RGB到HSV转换的例子,用于演示C语言内核中自定义数据类型的使用。在内核操作和内核与全局内存之间的内存接口中使用自定义数据类型。

2.6 dataflow_stream

HLS的数据流允许用户将多个任务调度在一起,以实现更高的吞吐量。

2.7 dataflow_stream_array

多阶段向量加法的简单示例,用于演示HLS C内核代码中流数组的使用。

2.8 dependence_inter

使用 DEPENDENCE 编译指令,指定连续循环迭代中对缓冲区的依赖关系,使得编译器可以进行展开/流水线操作以获得更好的性能。

2.9 gmem_2banks

如何使用多个ddr和在每个DDR中创建缓冲区。

2.10 kernel_chain

级联矩阵乘法,启用了ap_ctrl_chain,以展示如何重叠多次内核调用的排队以获得更高的性能。

2.11 lmem_2rw

如何利用本地内存的两个端口。

2.12 loop_pipeline

演示使用流水线操作。

2.13 loop_reorder

一个简单的矩阵乘法(x )的例子,用于演示如何通过循环重排来获得更好的流水线II因子。

2.14 partition_cyclicblock

使用数组块和循环分区来提高内核的性能。

2.15 plram_access

矩阵乘法,使用PLRAM。

2.16 port_width_widening

如何通过调整内核端口宽度来优化资源利用率而不损失性能

2.17 shift_register

这个例子展示了如何在每个时钟周期中移动寄存器中的值。

2.18 simple_vadd

一个简单的向量加法。

2.19 wide_mem_rw

这是一个简单的向量加法示例,用于演示使用 ap_uint<512> 数据类型进行宽内存访问。基于输入参数类型,V++编译器将计算出全局内存和内核之间的内存数据宽度。对于这个示例,使用了 ap_uint<512> 数据类型,所以内存数据宽度将是16 x (整数位宽) = 16 x 32 = 512 bit

3. 学习规划

"学而时习之,不亦乐乎"就是说,学习并掌握这些优化指令,并通过社交媒体分享它们,岂不是一件令人愉悦的事情吗?掌握这些优化指令不仅能够加深我们对Vitis库的理解,而且对于高效地实现硬件算法也极为有益。我已经单独分享了一些相关内容,当我使用到某个具体的优化指令时,我会详细解释其作用和重要性。


http://www.ppmy.cn/embedded/7579.html

相关文章

最新UI发卡盗U,支持多语言,更新UI界面,支持多个主流钱包,附带系统搭建教程

环境&#xff1a;Linux系统 进入宝塔安装环境&#xff1a;Nginx 1.22.1 MySQL 8.0 php7.4 phpMyAdmin 5.2 按照说明去安装环境&#xff0c;如果没有找到MySQL8.0版本去"软件商店"搜索Mysql切换至8.0 1.上传开源源码 2.上传数据库文件 3.上传猴导入数据库文件 4.修…

STM32

1.总结串口的发送和接收功能使用到的函数 串口数据发送数据的函数&#xff1a;HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) 串口数据接收数据的函数&#xff1a;HAL_StatusTypeDef HAL_UART_Re…

Go下载安装及切换不同版本的方法

一、下载安装 Go下载地址 Go提供了Windows、MacOS(ARM64) 和 MacOS(x86-64)、Linux版本&#xff0c;也可以下载源码自己编译安装。 Linux && MacOS 下载压缩包 解压到指定目录&#xff0c;如&#xff1a;/usr/local rm -rf /usr/local/go && tar -C /usr…

提升用户体验的UUID设计策略

本文翻译自 The UX of UUIDs&#xff0c;作者&#xff1a;Andreas Thomas&#xff0c; 略有删改。 唯一标识符在从用户身份验证到资源管理的所有应用程序中起着至关重要的作用。虽然使用标准UUID将满足您的所有安全问题&#xff0c;但我们可以为用户改进很多。 这篇文章讨论了…

Python的pytest框架(1)--基本概念、入门

按基础到进阶的顺序&#xff0c;学习Python的pytest框架&#xff0c;本篇文章先讲一讲pytest的基本概念、入门使用规则。 目录 一、pytest基础知识 1、安装 2、pytest框架主要做了什么工作 二、pytest的规则约定、运行方式以及参数详解 1、编写测试用例 模块&#xff08…

Biome 1.7 发布,支持从 ESLint 和 Prettier 迁移

近日&#xff0c;Biome v1.7 正式发布&#xff01;这个新版本提供了从 ESLint 和 Prettier 迁移的简单路径。它还引入了格式化程序和 linter 的实验性机器可读报告、新的 linter 规则和许多修复。 使用以下命令更新 Biome&#xff1a; npm install --save-dev --save-exact b…

Linux操作系统

Linux操作系统 目录和文件管理文件查看文件编辑和文件比较文件搜索命令压缩打包和解压管道符号和撷取命令进程管理磁盘管理网络管理Linux搭建Web服务器Docker容器技术 目录和文件管理 [rootlocalhost ~]# cd / #改变工作目录 [rootlocalhost /]# ls #ll显示详细信息 bin dev…

python3如何提取汉字

采用正则表达式的方法对字符串进行处理。 str1 "&#xff5b;我%$是&#xff0c;《速$.度\发》中 /国、人"&#xff08;1&#xff09;提取汉字 汉字的范围为”\u4e00-\u9fa5“&#xff0c;这个是用Unicode表示的。 import re res1 .join(re.findall([\u4e00-\u9fa…