Vitis™ 新增功能

2020.2

Vitis 软件平台 2020.2 版的亮点:

  • Vitis 2020.2 首次为 Versal ACAP 平台上的应用提供加速和嵌入式软件开发支持
  • Vitis Core 开发套件首次引入 Vitis AI Engine( AI 引擎)编译器,以编译用于 Versal AI 引擎的 C / C ++ 应用。AI 引擎是 Versal AI Core 系列的一部分,是计算密集型应用的向量处理器
  • 对于加速内核编译 (Vitis) 和 C/C++ 至 RTL IP 创建流程 (Vivado),默认使用 Vitis HLS。
  • 提供 600 多个 FPGA 加速功能,遍布 13 大类性能优化库。2020.2 版引入全新 Vitis 高性能计算 (HPC) 库用于加速高性能计算类应用。多项增强或补充功能强化数据分析、图形库、线性代数 (BLAS) 库、稀疏矩阵库 (Sparse)、安全库以及数据库
  • 为评估多种实现策略提供支持,充分满足最终 FPGA 二进制的生成,进一步简化 Vitis 应用中 RTL 内核的集成
  • 针对 Vitis Core 工具,增强了 Git 版本控制、集成式主机内核 profiling 等功能。 了解更多详情 >
  • MATLAB 和 Simulink 插件:这是 Xilinx Model Composer 和 DSP System Generator 的统一。AI 引擎是一个为 MATLAB 和 Simulink 提供的插件中的新域。
    了解更多 >

Vitis 新增功能(类别)

展开以下部分,进一步了解 Vitis 2020.2 的新特性和增强功能。如欲了解有关支持平台、修改行为以及已知问题的相关信息,请参阅 Vitis 2020.2 针对 应用加速流程嵌入式软件开发流程提供的版本说明。

注:Vitis 加速库现已提供,可以单独下载。它们可以从 GitHub 中下载,也可以直接从 Vitis IDE 中下载。

  • 面向 HPC 工作负载的 FPGA 加速库。最初版本侧重于地震成像和地球物理仿真使用案例
    • 逆时偏移 (RTM) 是一种重要的地震成像技术,可精确表征地下情况。
    • 高精度多层感知器 (MLP) — 利用地震反映数据重建地下特性(地震反演)
  • 针对单精度浮点数据类型 (FP32) 进行优化,该数据类型是高性能计算应用的重要需求
  • 该库的第一个版本提供:
    • L1 模板原语、L1 MLP 激活功能(包括 Sigmoid、Relu 和 Prelu)
    • L2 2D RTM 前向内核、2D RTM 后向内核和 3D RTM 前向内核
    • L3 支持镜头平行的 2D RTM API

全新功能与特性

  • 2020.2 ISP 流水线示例设计支持的像素深度达 16 位
  • 局部色调映射
  • 自动曝光调整
  • 量化与混色
  • Color Correction Matrix
  • 黑度校正
  • 镜头阴影校正
  • 强力特征匹配
  • 模式滤波器
  • blobFromImage
  • 拉普拉斯检测算子
  • 距离转换

库基础架构与其它增强功能

  • 所有库函数都支持 Alveo U50 平台
  • 为边缘和数据中心平台提供的 GUI 支持
  • 颜色转换:支持 RGBX 或第四通道支持
  • 数据转换器中的行步支持
  • 删除 xf_axi_sdata.hpp 文件。Axiconverter 函数现在使用 HLS ap_axi_sdata.h 文件代替。

在全新 Xilinx 应用商店中推出随时可用于评估的应用

使用 Vitis 视觉库开发的 FPGA 加速应用现已在全新的 Xilinx 应用商店中推出,作为容器,可用于在 Nimbix 云端或本地的 Alveo 加速卡上轻松评估和部署

  • 使用 Vitis AI 库的机器学习推断引擎和 Vitis 视觉预处理功能进行图像分类:了解更多
  • 图像传感器处理 (ISP) 流水线:了解更多
  • 立体模块匹配:了解更多
  • 文本处理 API。包括两个主要的 API — 正则表达式匹配和地理 IP 查找。前一个 API 可用于从非结构化数据(如日志)中提取内容,而后者则通常用于处理 Web 日志,以通过 IP 地址标注地理信息。该库提供了一个演示工具,其可将 Apache HTTP 服务器的日志批量转换为 JSON 文件。
  • 用于内存数据提取的 DataFrame API:DataFrame 广泛用于数据分析领域的内存数据提取,DataFrame 读写 API 应该能够帮助数据分析内核开发人员更轻松地使用 Apache Arrow DataFrame 存储临时数据或与开源软件互动。
  • 结构树的整体方法。可扩展随机森林,以包括回归。增加了基于助推方法的梯度助推结构树,支持分类与回归。也包含对分类与回归的 XGBoost 的支持,可利用损失函数的二阶导数和正则化。
  • 单源最短路径 API (singleSourceShortestPath) 2020.2 版现在不仅支持 Alveo U50 平台,而且还可为最短路径信息提供一个新的输出‘pred32’。
  • 页面排名 API: 2020.2 版现在支持 Alveo U50 平台,包括两个名为“pageRankTop”的 API — 一个用于利用单个内存通道,而另一个则用于利用多存储内存。   
  • 相似度 API: 3 个全新的 API 覆盖不同的应用:‘denseSimilarityKernel’针对密集图应用,‘sparseSimilarityKernel’针对稀疏图应用,而‘generalSimilarityKernel’则针对两种支持单核的应用。
  • 以下 API 现在支持 Alveo U50 平台:
    • 宽度优先搜索 bfs API (bfs)
    • 程度计算 API (calcuDegree)
    • 互联组件 API (connectedComponents)
    • 将格式从 CSC 转换至 CSR API (convertCsrCsc)
    • 标签传播 API (labelPropagation)
    • 高可靠互联组件 API (stronglyConnectedComponents)
    • 三角形计数 API (triangleCount)
  • 最新 L2 GEMM 内核
  • 对于 FP32 数据类型,L3 GEMM 性能从 280 GFLOPS 提高到 340 GFLOPS
  • 引入了在 Alveo U280 加速卡上利用 16 个 HBM 通道支持的 FP32 L2 CSCMV 内核(用于 CSC 压缩稀疏列格式矩阵的稀疏矩阵向量乘法)。
  • 2020.2 版不仅可为通用查询引擎 (GQE) 内核设计带来非常重要的增强功能与更新,而且还可为 JOIN 和 GROUP-BY AGGREGATE 带来全新的 3 级 API。
    • 作为输入缓冲区的列:GQE 内核将每个列作为输入缓冲区,简化了主机代码的数据准备。此外,与大量连续内存分配相比,在主机端分配多个缓冲区将减少内存不足的问题,特别是在服务器负载沉重的情况下。
    • 用于生成配置位的命令类:L2 层现在提供生成 GQE 内核配置位的命令类。开发人员不再需要深入位图表来了解在 GQE 流水线中启用或禁用某个功能时应该切换的位。因此,主机代码可能会更持久、更不容易出错。
    • 最新 3 级 API:为 JOIN 和 GROUP-BY AGGREGATE 构建最新实验性 L3 API,以增加 GQE 能够处理的问题。它们可以基于散列将各种表分解为多个部分,并以良好调度的方式多次调用 GQE 内核。执行策略与执行是分开的,因此数据库专家可以根据表格统计数据微调执行,不会干扰 OpenCL 执行部分。
  • 使用 Alveo U50 加速 LIBZ 库
    • 无缝加速 libz 标准 API:deflate、compress2uncompress
    • 随时可用的 libz.so 库,可加速所有主机代码,无需任何代码修改
    • xzlib 独立可执行文件适用于 gzip/zlib 压缩和解压缩
  • ZSTD 解压缩:提供最新实现的 Facebook ZSTD 算法
  • Snappy 双核心内核:最新实现的谷歌 Snappy 双核心内核解压缩算法可为单个文件解压缩实现吞吐量的 2 倍提升。
  • GZIP 压缩内核:提供全新 GZIP 四核压缩内核(内建、LZ77、TreeGen、Huffman 编码器)实现方案。整体资源减少 20% 以上,DDR 带宽需求减少 50%。
  • GZIP 压缩流媒体内核:提供完全符合标准的 GZIP(包括页眉和页脚)实现方案,流媒体免费运行内核。
  • Alveo U50 上的 GZIP/ZLIB L3 应用:作为 L3 API 提供的 GZIP/ZLIB 应用,针对 Alveo U50 (HBM) 和 Alveo U250 卡进行了优化。一个 FPGA 二进制文件 (xclbin) 支持 zlibgzip 压缩及解压缩格式
  • 支持 Alveo U50:所移植的库函数(LZ4、Snappy、GZIP、ZLIB)支持 Alveo U50 平台。
  • 低时延 GZIP/ZLIB 解压缩:对于 4KB/8KB/16KB 模块大小而言,初始解压缩时延从 5K 减少到 2.5K
  • API 被修改为完全支持 Vitis HLS 编译器
  • 新签名生成与验证算法:DSA、ECC、ECDSA (secp256k1) 和 EdDSA (ed25519)
  • 最新校验与算法:Adler32 和 CRC32。
  • 可验证延迟函数 (VDF) 的评估与验证:Pietrzak 的 VDF 和 Wesolowski 的 VDF。
  • 由 CAS 组成的商业密码:SM2、SM3 和 SM4。
  • 流媒体密码:XChacha20。
  • 对 RSA、GMAC、AES-GCM 和 SHA3 进行优化,以提高其性能和资源利用率。
  • 参数解析器(测试版):解析从命令行传递的选项与标志,并提供自动帮助信息生成,使开发人员能够创建测试案例与用户应用的统一体验。
  • FIFO 多路复用器:该模块封装了一个 FIFO(通过内核代码中的 hls::stream 实现),以便能够通过相同的硬件资源传递不同类型的数据。数据过宽时,它将自动使用多个周期进行传输。该模块有望使数据流代码更加紧凑、可读。

ADF:自适应数据流程

  • 编译器:
    • PLIO 或 GMIO 上的事件跟踪
    • 硬件上也支持事件跟踪
    • 热图生成:所有 AI 引擎的使用率 %
    • 支持 PL 内核和 PLIO 的不同 PL 频率
  • AI 引擎的 Vitis IDE
    • 流水线视图
    • 向量寄存器视图
    • 内存视图东、西北、南
    • 外部存储器
  • Vitis HLS 在 Vivado 中可取代 Vivado HLS(在 v2020.1 中,它已经是 Vitis 和 C 语言内核编译的默认设置)
    • 为高级功能端口新增阵列重塑和分区编译指示
  • 该工具现在与 Vitis 和 Vivado 一起安装在其自己的目录 ./Vitis_HLS/2020.2 下
  • HLS 设计偏移信息已经在 UG1391 中更新
  • Vitis HLS 用户指南是 UG1399,所有内容也在 HTML 中提供
  • 在 GitHub 上更新了 设计示例,它们也可以从 Vitis HLS GUI(从“Git 资源库”子窗口)自动加载,以便能够直接访问
  • 支持 SIMD 编程
  • 通过 bind_storage pragma(仅限 Vivado 流程)支持片上模块 RAM ECC 标志,以便监控 RAM 模块生成的错误纠正逻辑
  • GUI 简化了工具栏图标布局,为界面和 AXI4 (包括猝发)新增了报告部分
  • 非默认选项可以在“解决方案设置”→“一般”→“只显示非默认值”间续标记中进行筛选,以便快速查看
  • 用户可以使用 -p 选项在直接从 Tcl 开始的 GUI 中创建并打开一个项目,并将 Tcl 文件按照参数形式传递:vitis_hls -p .tcl
  • 通过 GUI 对 FIFO 的量进行交互式深度调整
  • 现在在 GUI 中可以看到对 AXI 接口的约束性随机测试

Versal 的专有特性

  • Vitis HLS 现在可为 DSP58 模块的浮点(加法器或乘法器)推断专用单时钟周期积累,实现高效的高吞吐量积累
  • 针对 Versal 生产目标器件更新的时序库
  • 改进的 RTL 内核整合:增强了在 Vitis 应用中按照内核形式封装整合 RTL IP 的功能,包括对用户管理的 RTL 内核的支持(不受 XRT API 控制)以及对 Vivado 中的 IP 打包器的改进,从而支持该流程。
  • 时序收敛的多个实现策略:Vitis 编译器和链接器 (v++) 现在支持在硬件构建过程中同时启动和运行多个 Vivado 实现策略。这不仅可帮助用户探索和评估所有结果,而且还可帮助他们为最终 FPGA 二进制文件 (xclbin) 的创建选择最佳策略。

Versal 的专有特性

  • 在 2020.2 中,只要硬件设计不变,aiecompiler 只有在 AIE 程序修改后才会重新编译软件并对其进行更新。v++ 链接阶段不会重新运行,而是直接转到封包步骤。这允许用户在硬件修复后轻松快速地针对 AIE 程序进行迭代。
  • 提供系统级模板,包括 AIE、PL 和 PS 设计文件。
  • AIE 工具特性整合在 Vitis IDE 中,如显示流水线信息、存储视图以及并行编译等。
  • Vitis 项目的版本控制:针对 Vitis 项目与 Git 版本控制整合,可实现在多个开发人员和团队间协作。
  • 对项目层级的改进:加速内核和主机应用现在是顶级系统项目下的独立项目,有助于用户对主机应用和硬件内核进行分开编译。
  • 对板级支持包 (BSP) 构建时间的改进:对于具有独立域的平台项目,板级支持包 (BSP) 驱动程序可进行并行编译,从而可缩短应用的构建时间。
  • 主机应用调试的易用性:处理系统寄存器现在可以作为一个文件,从 Vitis GUI 导出,用于调试。
  • 配置文件系统项目:顶级系统项目现在可通过 Vitis GUI 为 Vitis 应用加速流程提供针对指定配置文件特性的更多控制。
  • 改进了针对使用硬件仿真创建平台的支持:除了将方框图作为顶层之外,硬件仿真模式现在还支持平台中的 RTL 来源,其可作为顶层模块或在没有封装的情况,作为方框图中的参考 RTL。您可以像在 Vivado 中那样添加 RTL 测试平台。它可为部署之前的验证设计提供更高的灵活性。
  • 在仿真过程中保存信号,以供调试:仿真时将信号保存到 Xilinx 仿真器 (XSIM) 波形文件中。运行硬件仿真时,用户可将 -wcfg-file-path 传递给 launch_hw_emu.sh
  • 仿真支持从桥接特性(Alveo 平台):请参阅 Alveo 平台文档,了解有关从桥接特性的更多详情。
  • 用于仿真 AXI Stream IO 的 Python/C++ API:在仿真 AXI Stream 内核时,使用简单的 Python 或 C++ API 通过平台上的 IO 端口提供模拟数据流,使您能够在设计周期的早些时候仿真和调试支持编程流量模式的完整系统
  • 为 U250 Alveo 平台提供 Questa 仿真器支持:除了 Xilinx 仿真器 (XSIM) 外,Vitis 中针对 U250 Alveo 平台的硬件仿真现在还支持 Questa。安装通过 V++ 配置文件或 Vitis IDE 完成。
  • HLS 内核死锁检测:使用 v++ config param=compiler.deadlockDetection=true 编译 HLS 内核,可以在硬件仿真期间检测到 HLS 内核中的死锁或活锁代码。

Versal 的专有特性

  • 第三方仿真器支持(Questa、Xcelium、VCS):除了 Xilinx 仿真器 (XSIM) 之外,Vitis 中针对 Versal 嵌入式平台的硬件仿真现在也支持 Linux 上的第三方仿真器,如 Questa 和 Xcelium 等。早期访问阶段支持 VCS。安装通过 V++ 配置文件或 Vitis IDE 完成。
  • Vitis AI Profiler 数据整合:对于使用深度学习处理单元 (DPU) 执行 AI 推断的应用而言,您可以在 Vitis 分析器中访问 Vitis AI Profiler 信息,包括 DPU 吞吐量、DDR 读写速率以及时间轴跟踪信息,以便评估端到端应用加速。
  • 查看软件包总结报告:在 Vitis 分析器中查看软件包总结报告,从性能和优化的角度全面了解应用状态。软件包总结由 v++ 命令在链接构建一个软件包之后创建,所构建的软件包可以用于软件或硬件仿真,也可以引导并在硬件设备上运行。
  • 整合的主机和内核配置:Vitis 2020.2 增加了为用户事件提供 API 配置的功能。除了可用于加速内核的固有配置功能之外,您还可以在主机代码中调用 Xilinx 运行时库 (XRT) API 来分析设计的任意部分,并针对总体应用性能优化做出决策。
  • 其它增强功能:可在 Vitis 分析器内访问所有报告间的全局搜索,可灵活地保存/恢复自定义用户查看性能报告的布局,直观的指导信息分组可在一个地方查看相关信息,对利用率报告的改进,有助于查看每个超级逻辑区域 (SLR) 上的统计信息,以实现更深入的洞察。

Versal 的专有特性

  • 配置文件总结报告将有特定的 AIE 设计条目。更多的 AIE 相关数据将在编译/运行总结报告中显示,如 AIE 热图,它主要显示运行在硬件上的内核工作/暂停周期。
  • 增强了调试可见性:在 Xilinx 仿真器 (XSIM) 事务处理查看器中提供的 AXI-S 事务处理层面视图主要用于硬件仿真设计的 System-C 部分,可在事务处理层面更好的了解设计,充分满足调试需求。
  • 在实时波形查看器中查看 FIFO 状态:在硬件仿真期间,可在实时波形查看器中查看用户级 FIFO 的状态(在内核代码中表示为hls:streams),从而可查看静态 FIFO 深度、FIFO 元素和 FIFO 的使用,以确定加速内核的性能瓶颈

Versal 的专有特性

  • 事件跟踪增强:Vitis 2020.2 在 AIE 事件跟踪特性上有一些增强功能,例如支持通过 XRT 实现的卸载、支持多个跟踪流流程的增强功能以及监控 PL/AIE 边界的功能(即使图中定义了 PL 内核)等。同时,PL/PS/AIE 事件跟踪被合并到一个通用时间轴中,可更好地监控整个设计。

注:Xilinx 运行时库 (XRT) 现已提供,可单独下载。请参考启动设计信息,查看下载和安装说明。

  • 增强了对 HBM 平台的支持:利用高带宽内存 (HBM) 平台的优势,通过 v++ --sp HBM[#:#] 指定 HBM 存储的内核端口连接 Xilinx 运行时库 (XRT) API 还可以自动分配 HBM 存储并帮助主机应用分配一个或多个任意大小的 HBM 区段 缓冲区 (256Mb+)(在 HBM 区段边界上)。
  • 新一代 Xilinx 开发板管理实用程序(预览):现在可预览新一代 Xilinx 开发板管理实用程序(xbutil、xbmgmt)。它们可为支持它们的 Xilinx 平台实现从桥接和 DDR 保留特性。注:这一代开发板管理实用程序将在 2021.1 中移至维护模式,新特性只添加至新一代实用程序。

Versal 的专有特性

  • 新增 AIE 支持,以支持 RTP、错误处理、全阵列重新配置和图形 API。

Alveo 软件包下载选项卡访问 Alveo 加速卡的最新 Vitis 目标平台

请查看 UG1120 — Alveo 数据中心加速卡平台用户指南,了解更多详情,并随时了解最新 Vitis 目标平台版本的最新信息,因为其即将推出

U200/U250 XDMA 平台

  • Alveo 平台 U200 XDMA 2RP — 生产
    • 特性:ERT、CMC、PLRAM、DRM 功能的平面布局图、XDMA、2RP、P2P、M2M、GT 内核、PCIe 从桥接器和 DDR 自刷新
  • Alveo 平台 U250 XDMA 2RP — 生产
    • 特性:ERT、CMC、PLRAM、DRM 功能的平面布局图、XDMA、2RP、P2P、M2M、GT 内核、PCIe 从桥接器和 DDR 自刷新

Shell 升级 DFX — 2RP(2 个重新配置分区)

  • 小型静态区域:基本
    • PCIe 功能性
    • 带内 FPGA 部分重配置
  • 最新重新配置分区:Shell
    • 更新 DMA 和实用程序功能
    • 在不重启服务器的情况下,在平台之间进行动态倒换
  • 第 2 个重新配置分区:用户逻辑
    • 加速器内核功能

AXI Slave Bridge

  • 由内核直接访问主机内存
  • DMA 旁路功能,提供 AXI-Slave 512 位接口,用户可以提供其自己的数据移动设备

数据保留 — DDR4 自刷新

  • 在重新配置过程中使用 DDR4 自刷新提供在 FPGA 内存中保留的数据环境
  • 避免复制到作为不同 XCLBIN 的临时存储的主机 RAM 上
  • 最大限度减少大型数据集的移动

注:嵌入式平台的 Vitis 目标平台(包括预先构建的 linux 内核、根文件系统和 sysroot)现已提供,可在 Vitis 嵌入式平台选项卡上单独下载

  • ZYNQ-7000 和 ZYNQ UltraScale+ MPSoC 基础平台功能保持不变,但重新构建了平台源代码。为了便于理解,对目录进行了重命名;多个平台之间的通用源文件组合在一起。重复使用平台源代码并将其移植到新平台上会更便捷。
  • 当从源代码构建平台时,除了从头编译 PetaLinux 之外,如果用户使用下载的通用软件组件,则增加了一种全新的端到端编译方法。在构建平台时,用户可以指向这些组件并跳过 PetaLinux 编译。

VCK190 平台有灵活的 DDR + LPDDR 内存子系统,支持加速内核的 63 种中断。它可以与 Vitis 内核开发套件一起使用,满足应用加速与嵌入式处理器软件开发需求,如 Versal AI 引擎程序员指南 (UG1076) 所述。该平台支持各种设计开发,包括:

  • AI 引擎图和内核
  • 可编程逻辑内核
  • 主机应用,目标是运行在 Versal 器件中的 Arm 处理器上的 Linux 或裸机操作系统。
  • 请参考 Vitis / Versal ACAP 平台入门,了解更多信息。
  • 支持 Kubernetes(K8s) 集群:Xilinx FPGA 资源管理器 (XRM) 现在可以与 Kubernetes 一起使用,不仅能在连接至服务器的多个 Alveo 加速卡之间运行和管理计算单元 (CU),而且还能将应用扩展到带 Alveo 卡的多个服务器上。
2020.1