Vitis HLS 学习笔记--Vitis Accelerated Libraries介绍

1. 简介

Vitis Accelerated Libraries,包含很多现成的库,这些库都是开源的,也就是说代码是公开的,而且已经优化过,可以让程序运行得更快。你不需要改变太多你的代码,就能让你的程序速度提升。

这些库有很多种,比如用于解算数学问题的、做基础数学运算的、处理稀疏矩阵的、数字信号处理的,还有一些其他的工具。这些都是很基础的功能,但是可以用在很多不同的程序上。

还有一些特别的库,它们是为了特定的领域设计的,比如处理图像、金融计算、高性能计算、图形处理、数据库管理、数据分析、数据压缩等等。这些库可以让这些特定领域的程序直接加速。

Vitis的库中还包括了一些特别为Versal™设备中的AI引擎优化过的功能,比如数字信号处理、矩阵运算等等。这意味着这些功能在Versal设备上会运行得特别快。

2. 库的组织结构 

2.1 结构级别L1/L2/L3

Vitis 库分为 L1、L2 和 L3 文件夹,每个文件夹与应用程序开发的不同阶段相关:

L1 Primitives

主要包含基本的原始函数(primitives),这些函数可以单独仿真,并且可以用于Vitis HLS生成Verilog HDL和IP。这些函数是底层的,通常用于硬件开发者。

L1 中的 Makefile 和源代码有助于基于 HLS 的流程进行快速检查:

  • 检查单个内核的功能(C simulation)
  • 估计资源使用情况、延迟等(Synthesis)
  • 运行周期精确模拟(Co-simulation)
  • 打包为 IP 并获取最终资源利用率/时序详细信息(Export RTL)

特点:

  • 主要提供给精通硬件的开发者,想要了解底层实现逻辑并进行性能优化
  • 包含有流接口
  • 通常为单个计算模块实现
  • 不能被主机代码直接调用

L2 Kernels

由将L1库中的原始函数与数据移动器(data movers)集成而成,这些集成函数可以被主代码调用,使用XRT运行时库。L2库的功能是基于L1库的功能进行扩展和优化。

L2 中的 Makefile 和源代码用于从内核的各种源代码(HDL、HLS 或 XO 文件)构建 XCLBIN 文件,并使用针对设备的 OpenCL/XRT 框架编写的主机代码:

  • 主要提供给了解XRT API的主机代码开发者
  • 始终具有内存(DDR/HBM)接口
  • 由 L1 原语函数与一些数据移动器模块链接而成
  • 主机可调用

L3 Software APIs

提供C、C++和Python等编程语言的接口,允许纯软件开发者将图算法操作(如BLAS)转移到AMD平台上,而无需额外的硬件配置。L3库是最高级别的,它为软件开发者提供了一个更高层次的接口。

  • 主要为纯软件工程师提供
  • 功能参数与硬件无关
  • 通常用于部署
  • 主机可调用

2.2 文件内容

L1 子目录:

  • include/hw:原始函数的头文件
  • tests/hw:顶级模块,包括数据移动器和原始函数
  • test/sw:调用原始函数的测试平台和基础设施支持

L2 子目录:

  • include/hw:内核函数的头文件
  • include/sw:调用内​​核函数的主机模块
  • test/hw:包含用于构建每个已实现的内核函数的 Makefile

L3 子目录:

  • include/sw:软件API函数的头文件
  • test/sw:包含用于测试每个已实现的软件API函数的Makefile

3. 分类介绍

3.1 blas

Basic Linear Algebra Subroutines,基本线性代数子程序,包含一些矩阵和向量运算函数。

矩阵运算函数:

  • 一般矩阵乘法

向量运算函数:

搜索向量元素位置

3.2 codec

编解码库,用于加速图像编码、解码和相关处理算法。

3.3 data_analytics

数据挖掘:分类、聚类、回归。

文本处理:非结构化信息的提取和转换。

地理空间:空间分析和空间数据挖掘。

3.4 data_compression

硬件加速压缩算法。

3.5 data_mover

在PL和DDR之间高效率传输数据。

3.6 database

SQL引擎开发,使用FPGA卡来加速查询执行。

3.7 dsp

DDS、FFT、FIRs、矩阵乘法(GeMM)和Widgets。

3.8 graph

图形库,包括相似性分析、分类、中心性分析、寻路、连通性分析、社区检测、搜索、图形格式。

3.9 hpc

高性能计算库,多层感知器(MLP)、二维反时间迁移(RTM)、三维RTM、共轭梯度求解器(CG)。

3.10 motor_control

FOC:Field-Orientated Control,场向控制。

SVPWM_DUTY / PWM_GEN:Space Vector Pulse Width Modulation,空间矢量脉宽调制(SVPWM)。

QEI:Quadrature Encoder Interface,四象限编码器接口。

3.11 quantitative_finance

L1:统计函数、数值方法和线性代数函数,支持实际用户实现高级建模,

L2:评估常见的金融衍生产品,如股权产品、利率产品、外汇(FX)产品和信贷产品。

3.12 security

安全算法:对称块密码,对称流密码,非对称加密,密码操作模式,消息认证码和哈希函数。

3.13 solver

矩阵分解操作,线性求解器和特征值求解器。

3.14 utils

实用库,高效地访问DDR、HBM或URAM中的内存执行数据分发、收集、重新排序、插入和丢弃。

3.15 vision

OpenCV视觉库

4. 总结

Vitis加速库为FPGA开发者提供了一系列优化的开源库,涵盖了从基础数学运算到专业领域应用的广泛功能。这些库分为三个层级:L1原语提供设计内核的基础算法,L2内核为性能优化的内核,而L3软件API则提供高级软件接口。特别地,对于Versal™ AI引擎,库中包含了专门优化的功能,以实现极致的运行效率。无论是在数据分析、图像处理、金融计算还是安全算法等领域,Vitis库都能显著提升程序的性能,简化开发流程,使得FPGA的强大计算能力更加易于访问和利用。这些库不仅支持广泛的应用场景,还能够根据用户需求进行定制和扩展,极大地推动了硬件加速的创新和应用。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年科学教育与现代管理国际会议(ICSEMM 2024)

2024 International Conference on Science Education and Modern Management 【1】大会信息 会议简称:ICSEMM 2024 大会时间:2024-07-22 大会地点:中国成都 截稿时间:2024-07-08(以官网为准) 审稿通知:投…

短剧APP小程序开发之小程序内存管理挑战:短剧缓存与释放策略探讨(第二篇)

在上一篇帖子中,我们探讨了小程序内存管理的限制以及缓存策略的设计。本篇将进一步探讨释放策略的具体实现以及优化方案,以支持大量短剧内容的加载和播放。 释放策略的具体实现 监听内存警告:小程序提供了监听内存警告的API,开发…

蓝牙音频解码芯片TD5163介绍,支持红外遥控—拓达半导体

蓝牙芯片TD5163A是一颗支持红外遥控、FM功能和IIS音频输出的蓝牙音频解码芯片,此颗芯片的亮点在于同时支持真立体声&单声道、TWS功能、PWM、音乐频谱和串口AT指令控制等功能,芯片在支持蓝牙无损音乐播放的同时,还支持简单明了的串口发送A…

Linux-黑马程序员

目录 一、前言二、初识Linux1、操作系统(1)硬件和软件(2)操作系统 2、Linux3、虚拟机4、FinalShell5、WSL6、虚拟机快照 三、Linux基础命令1、Linux的目录结构2、Linux命令入门(1)Linux命令基础格式&#x…

通过 LangChain 加载大模型

什么是 LangChain LangChain 是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架。 为什么是 LangChain 因为 LLM 的 API 只是提供了一个非常基础的调用方式,当我们需要构建一个复杂的 Chat Bot 时,就需要考虑如何保存聊天的上下文、网络搜索…

Android MediaMetadataRetriever获取视频宽高,Java

Android MediaMetadataRetriever获取视频宽高,Java public static int[] getVideoSize(Context ctx, Uri uri) {MediaMetadataRetriever retriever new MediaMetadataRetriever();int[] size {-1, -1}; //宽,高try {retriever.setDataSource(ctx, uri)…

53.Python-web框架-Django开始第一个应用的多语言

针对上一篇的功能&#xff0c;本次仅对页面做了多语言&#xff0c;大家可以看看效果。 51.Python-web框架-Django开始第一个应用的增删改查-CSDN博客 目录 部门列表 新增部门 编辑部门 部门列表 源码 <!DOCTYPE html> {% load static %} {% load i18n %} <html …

echarts学习:使用dataset管理数据

前言 在我们公司的组件库中有许多echarts图表相关的组件&#xff0c;这些组件在使用时&#xff0c;只需将图表数据以特定的格式传入组件中&#xff0c;十分方便。因此当我得知echarts 可以使用dataset集中管理数据时&#xff0c;我就决定自己一定要搞懂它&#xff0c;于是在最…

STM32硬件接口I2C应用(基于HMC5883L)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识HMC5883L 3.1 HMC5883L功能介绍 3.2 HMC5883L的寄存器 4 HMC5883L驱动程序实现 4.1 驱动函数实现 4.2 完整驱…

bean实例化

黑马程序员SSM 文章目录 一、bean是如何创建的二、实例化bean的三种方式3.1 构造方法&#xff08;常用&#xff09;3.2 静态工厂3.3 实例化工厂&#xff08;了解&#xff09;3.4 FactoryBean 一、bean是如何创建的 Spring 创建bean的时候使用的是无参构造 二、实例化bean的三…

【数组】【快慢双指针】删除有序数组中的重复项+移除元素+删除有序数组中的重复项II

今天趁热打铁&#xff0c;接着刷了几道标签是【数组】的题&#xff0c;基本都是双指针就能解决。 1、删除有序数组中的重复项 该题对应力扣网址 class Solution { public:int removeDuplicates(vector<int>& nums) {int i,j;int count 0;int n nums.size();nums.…

网络加密机的核心技术是什么

随着信息技术的飞速发展&#xff0c;网络已经成为现代社会不可或缺的基础设施。然而&#xff0c;网络空间的开放性和互联性也带来了诸多安全隐患&#xff0c;其中数据泄露和非法访问是最常见的问题。为了保障数据传输的安全性和完整性&#xff0c;网络加密机应运而生&#xff0…

为什么选择 ABBYY FineReader PDF ?

帮助用户们对PDF文件进行快速的编辑处理&#xff0c;同时也可以快速识别PDF文件里的文字内容&#xff0c;并且可以让用户们进行文本编辑&#xff0c;所以可以有效提升办公效率。 ABBYY-ABBYY Finereader 15 Win-安装包&#xff1a;https://souurl.cn/OY2L3m 高级转换功能 ABBY…

WARNING: pip is configured with locations that require TLS/SSL

在pycharm中运行pip下载软件包遇到该问题&#xff1a;WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available 原因&#xff1a;没有安装openssl&#xff1b; 到https://slproweb.com/products/Win32OpenSSL.ht…

Blender帧动画

时间线窗口Timeline用于定义帧动画 -视图&#xff1a;方法&#xff0c;平移&#xff0c;框显全部 -帧范围&#xff1a;可以调整动画共多少帧 -当前帧&#xff1a;可以拖动或手工指定 默认每秒24帧 定义一个帧动画类似unity的Timeline&#xff0c;只需定义关键帧&#xff0c…

MultiTrust:首个综合统一的多模态信任度基准(下)

2 实验 2.1 实验设计 实验设计基于对MLLMs可信度的全面理解&#xff0c;包括真实性、安全性、鲁棒性、公平性和隐私性五个主要方面。这些方面共同构成了一个综合框架&#xff0c;用于评估模型在防止不良结果和确保对用户社会影响的可靠性。 真实性&#xff08;Truthfulness&…

minIo ubuntu单节点部署

资源准备 minio二进制包 下载地址:https://dl.min.io/server/minio/release/linux-amd64/minio ubuntu-单节点部署 选择一台ubuntu18.04机器10.253.9.41、intel 或者 amd 64位处理器 上传minio到~目录 sudo cp minio /usr/local/bin/ sudo chmod x /usr/local/bin/minio 设…

变压器空载合闸励磁涌流的Simulink仿真

利用图 1所示的仿真模型分析三相变压器空载合闸过程时, 设置三相断路器模块 的切换时间为0s,仿真时间为 0.5s, 仿真算法为 ode23t 。三相断路器模块 QF2、故障模 块 Fault1 和 Fault2 在仿真中均不动作&#xff08;设置其切换时间大于仿真时间即可&#xff09;。 为了观察合闸时…

Java接口实现与类继承

学习初期发现接口实现与类继承很像&#xff0c;随着学习深入发现它们之间的联系与区别&#xff0c;整理如下&#xff1a; 经实验发现&#xff0c;实现接口的类中含有接口中的所有属性和方法&#xff0c;继承父类的子类中也含有父类中所有的属性和方法&#xff0c;可以说接口实…

车牌识别(附源代码)

完整项目已上传至github:End-to-end-for-chinese-plate-recognition/License-plate-recognition at master duanshengliu/End-to-end-for-chinese-plate-recognition GitHub 整体思路&#xff1a; 1.利用u-net图像分割得到二值化图像 2.再使用cv2进行边缘检测获得车牌区域坐…