AI 引擎系列 8 - 运行时比率参数简介

简介

 Versal AI 引擎 2 一文 中,我们注意到计算图 (graph) 文件中有一行内容用于为每个内核实例定义运行时比率参数。

在本文中,我们将讲解该参数如何影响 AI 引擎应用的资源使用率和性能。

 


要求

下文要求您通读前几篇 AI 引擎系列博文。

AI 引擎系列 1 - 从 AI 引擎工具开始(2022.1 更新)

AI 引擎系列 2 - AI 引擎计算图简介 (2022.1 更新)

AI 引擎系列 3 - AI 引擎内核简介

AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator(2022.1 更新)

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)

AI 引擎系列 6 - 在 Vitis 分析器中分析 AI 引擎编译结果(2022.1 更新)

AI 引擎系列 7 - 在仿真内通过追踪来可视化 AI 引擎事件(2022.1 更新)

 


什么是运行时比率?

“Run-Time Ratio"(运行时比率)是值介于 0 1 之间的参数,您应该为计算图中的所有内核定义该参数。它以百分比值的方式来定义该内核所需的单一 AI 引擎核的处理时间。

例如,运行时值为 0.5 表示内核只需 1 AI 引擎核的处理时间的 50%

根据内核的运行时比率,可将单个或多个内核映射到单个 AI 引擎。


计算任一内核的运行时比率

任一内核的运行时比率均可使用如下公式来计算:

运行时比率 = (内核运行一轮的周期数)/(周期预算)

周期预算是每个内核耗用来自其输入的数据(处理速率受限的输入数据串流时)或者在其输出上生成数据块(处理速率受限的输出数据串流时)所耗用的指令周期数。

它按如下公式来定义:

周期预算 = 块大小 * (AI 引擎时钟频率/采样频率)

假设某个内核处理窗口为 128 个样本,且输入样本频率(例如,来自 ADC)为 245.76 MHz。则此周期预算为 128*(1000/245.76) = 520 个周期。

这意味着,如果 AI 引擎阵列运行频率为 1 GHz,那么内核执行周期数需小于 520 AI 引擎时钟周期(因为在 520 个时钟周期后,下一个输入窗口将就绪)。

我们将在后续博文中详解如何估算内核运行一轮的周期数。


运行时比率对于性能或资源使用率的影响

 

现在我们使用先前博文中创建的应用示例来分析下更改运行时比率值的影响。

 Versal AI 引擎 2 一文中,针对计算图中的 2 个内核设置的运行时比率为 0.1。在 Versal AI 引擎 6 一文中,Vitis 分析器中的 2 个内核已映射到同一个拼块 (tile [25,0]) 内,因此这 2 个内核共享来自位于该拼块上的核的处理时间。

由于这 2 个内核在同一个核上运行,因此不同时执行(按顺序运行),故而改为在这 2 个内核之间例化单个缓冲器。

最后,在 Versal AI 引擎系列 5 中,仿真输出中计算图的首次迭代的最后一个样本(以 TLAST 来标记)在 714 ns 之后输出,并且第二次迭代的首个样本在仿真时间 1197 ns 后输出。

首先,我们将 2 个内核的运行时比率改为 0.4,并分析计算图所受到的影响。

打开源文件 project.h,在第 26/27 行上,将名为 first second 2 个内核的运行时比率改为 0.4

runtime<ratio>(first) = 0.4;
runtime<ratio>(second) = 0.4;

Emulation-AIE 为目标构建 Simple_application,并选择“Run As > Emulation-AIE”(运行方式 > AI 引擎仿真)来运行 aiesimulator

Vitis 分析器中打开编译汇总 (Emulation-AIE/Work/project.aiecompile_summary)。观察计算图视图,将该视图设置为按拼块分组。

可以看到,更改运行时比率对于资源使用率并无影响。这 2 个内核仍位于相同拼块内并且在相同核上运行,两者仍通过单一缓冲器来进行通信。

由于运行时比率之和仍小于 1,因此 aiecompiler 仍判定将这 2 个内核分组在一起。

您打开仿真输出文件 (Emulation-AIE/aiesimulator_output/output.txt) 即可看到计算图的首次迭代的最后一个样本仍在 714 ns 之后输出,第二次迭代的第一个样本仍在仿真时间的 1197 ns 之后输出。

请务必注意,运行时比率不用于调度内核执行。

数据可用后如果核尚未运行另一个内核,就会立即启动该内核。即使内核的运行时比率设为 0.1,该内核的运行时间仍可能占用 AI 引擎核的 100%(假定只有 1 个内核映射到该核)。在我们的示例中,由于有 2 个内核运行相同函数,因此当运行时比率设为 0.1 0.4 时,这 2 个内核的运行时间可能占 50%

现在,我们可以尝试将这 2 个内核的运行时比率增大到 0.6

 

runtime<ratio>(first) = 0.6;

runtime<ratio>(second) = 0.6;

 

Emulation-AIE 为目标构建 Simple_application,并选择“Run As > Emulation-AIE”(运行方式 > AI 引擎仿真)来运行 aiesimulator

Vitis 分析器中打开编译汇总 (Emulation-AIE/Work/project.aiecompile_summary)

观察计算图视图可见,使用率已发生更改:

每个内核都映射到不同拼块。

名为 first 的内核在 tile [25,0] 上运行,名为 second 的内核在 tile [24,0] 上运行,因此这 2 个内核在不同的核上运行。并且根据 buf1 buf1d 2 个名称可见,现在这 2 个内核之间已实现了 1 个乒乓缓冲器。

由此可见,增加运行时参数可能增大计算图的资源使用率。

打开仿真输出文件 (Emulation-AIE/aiesimulator_output/output.txt)

可以看到,计算图的第一次迭代的最后一个样本现已在 724 ns 后输出。这意味着第一次迭代的时延稍有增加 (+10ns)。这可能是由于 2 个内核之间的乒乓缓冲器的锁定管理而导致的。但第二次迭代的首个样本在 966 ns 后到达(相比于先前结果减少了 473 ns)。

由于这 2 个内核当前从 2 个不同的核运行,因此现在可以并行运行,增加计算图的吞吐量。由此可见,增加运行时参数可能提升计算图的性能。

重要注释:

  • 将运行时比率增大至每个核 1 个内核可能不会提升计算图的性能。
  • 这是因为,它可能受到输入或输出吞吐量的限制。
  • 因此,运行时比率高于所需的值可能导致无法有效使用资源。
  •  
  • 减小运行时比率可能无法降低资源使用率。
  • 这是因为,编译器仅在合理的情况下才会把内核映射到相同的核。
  • 例如,此处 2 个内核整通过单个存储器进行通信。所有它们已相互依赖,只要其中一个内核尚未完成执行,另一个内核就无法开始处理数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023/12/25日作业

串口通信 成果图 头文件uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h" //灯初始化 void led_init(); //灯1 void led_1_on(); void led_…

vue 项目/备案网页/ip网页打包成 apk 安装到平板/手机(含vue项目跨域代理打包成apk后无法访问接口的解决方案)

下载安装HBuilder X编辑器 https://www.dcloud.io/hbuilderx.html 新建 5APP 项目 打开 HBuilder X&#xff0c;新建项目 此处项目名以 ‘test’ 为例 含跨域代理的vue项目改造 若 vue 项目中含跨域代理&#xff0c;如 vue.config.js module.exports {publicPath: "./&…

C语言中关于if else的理解

if else我们可以理解为 if(条件1) //如果条件1成立 语句1&#xff1b; //执行语句1 else //如果条件1不成立 语句2; //执行语句2 这是一个经典的if els…

智慧幼儿园视频监管方案及实施建议:AI智能技术构建新引擎

一、背景需求 随着科技的快速发展&#xff0c;智慧化监管已成为幼儿园管理的重要趋势。智慧幼儿园监管解决方案通过引入先进的技术手段&#xff0c;提高幼儿园的管理效率&#xff0c;保障幼儿的安全与健康&#xff0c;为家长提供更便捷的服务。为了保障幼儿的安全&#xff0c;…

使用TLS/SSL Pinning保护安卓应用程序

使用TLS/SSL Pinning保护安卓应用程序 在现代术语中&#xff0c;“SSL”&#xff08;安全套接层&#xff09;通常指的是“TLS”&#xff08;传输层安全&#xff09;。虽然 SSL 和 TLS 不是同一个东西&#xff0c;但 TLS 是 SSL 的改进和更安全的版本&#xff0c;并且在实践中已…

git命令和docker命令

1、git git是分布式的版本控制工具 git可以通过本地仓库管理文件的历史版本记录 # 本地仓库操作的命令 # 初始化本地库 git init # 添加文件到暂存区 git add . git checkout 暂存区要撤销的文件名称 # 提交暂存区文件 git commit -m 注释# 版本穿梭 # 查看提交记录 git log…

SOLIDWORKS Plastics基础功能详解(二)

浇口顾问 浇口顾问可迭代确定填充型腔所需的最佳注塑位置数量&#xff08;最多 10 个&#xff09;。 位置数量的默认值为自动&#xff0c;这将激活用于查找最佳注塑位置数量的迭代方法。要指定注塑位置的自定义数量&#xff0c;请选择用户定义。 具有压力相关粘度的材料 填充和…

走向边缘智能,美格智能携手阿加犀成功在高算力AI模组上运行一系列大语言模型

近日&#xff0c;美格智能发挥软硬件一体协同开发能力&#xff0c;融合阿加犀卓越的AI优化部署技术&#xff0c;在搭载高通QCS8550平台的高算力AI模组上&#xff0c;成功运行了一系列大语言模型&#xff0c;包括LLaMA-2、通义千问Qwen、百川大模型、RedPajama、ChatGLM2、Vicun…

Linux驱动

字符设备驱动模型 在字符设备中使用struct cdev这种结构来描述设备。 应用程序&#xff1a;读写文件&#xff0c;点灯&#xff1b;获取按键。用一些接口调用驱动程序去实现一些引用。 open这些函数&#xff0c;是C库实现的。从而进入内核&#xff0c;C库怎么进入内核&#xf…

【开源】基于JAVA语言的企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

【大厂面试】之 美团(一面经含答案)

美团 一面 tcp三次握手&#xff0c;四次挥手。time-wait、close-wait状态。MSL代表什么&#xff1f;为什么time-wait是2MSL&#xff0c;可不可以更长&#xff1f;如果不设置time-wait有什么影响 time-wait是主动关闭方的一个状态&#xff1b;close-wait是被动关闭方的一个状态…

微擎模块 出现Error: template source ‘common/message’ is not exist!解决方法

今天有会员反馈微课堂分销中心打不开&#xff0c;错误提示模板找不到&#xff1a;Error: template source ‘common/message’ is not exist!&#xff0c;看了下这模板应该微擎框架通用的&#xff0c;进公众号会员管理-会员中心网址居然也打不开&#xff0c;提示一样的错误&…

多播ip地址配置和通信理解

经常有朋友问&#xff0c;为什么相同局域网的ip需要相同网段&#xff0c;为什么组播的网段可以不同&#xff1f; 比如&#xff1a; 在您的局域网&#xff08;192.168.1.0/24 网段&#xff09;中设置多播组时&#xff0c;您可以选择一个在本地网络范围内尚未使用的多播组地址。…

绿色装配式建筑——气膜建筑

伴随新时代的到来和发展理念的深入实施&#xff0c;装配式绿色建筑已经成为建筑业发展的主流趋势。本文将深入分析气膜建筑&#xff0c;采用绿色建筑技术和装配式的建筑模式&#xff0c;形成了一套完善的建筑体系。 气膜建筑以气膜结构为主体&#xff0c;采用新型高强度柔性薄膜…

批量归一化

目录 一、BN层介绍 1、深层神经网络存在的问题 2、批量归一化的解决方案 3、BN层作用位置 4、BN层在做什么 5、总结 二、批量归一化从零实现 1、实现批量归一化操作 2、创建BN层 3、对LeNet加入批量归一化 4、开始训练 三、简明实现 1、对LeNet加入批量归一化 2…

【Spring实战】02 配置多数据源

文章目录 1. 配置数据源信息2. 创建第一个数据源3. 创建第二个数据源4. 创建启动类及查询方法5. 启动服务6. 创建表及做数据7. 查询验证8. 详细代码总结 通过上一节的介绍&#xff0c;我们已经知道了如何使用 Spring 进行数据源的配置以及应用。在一些复杂的应用中&#xff0c;…

mybatis的二级缓存使用以及禁用

目录 mybatis 二级缓存配置有两处 全局设置 mapper 设置 测试代码 执行结果 源码执行逻辑 创建 SqlSession 二级缓存配置是否添加 解析 cache 标签 XMLMapperBuilder MapperBuilderAssistant CacheBuilder PerpetualCache SerializedCache LoggingCache 将 cach…

电商数据分析-01-电商数据分析指标

电商数据指标 电商数据分析涉及多个指标&#xff0c;这些指标可以帮助企业了解其业务表现、用户行为和市场趋势。以下是一些常见的电商数据分析指标&#xff1a; 销售指标&#xff1a; 总销售额&#xff08;GMV&#xff09;&#xff1a; 衡量特定时期内所有销售交易的总值。 平…

算法学习系列(十一):KMP算法

目录 引言一、算法概念二、题目描述三、思路讲解三、代码实现四、测试 引言 这个KMP算法就是怎么说呢&#xff0c;就是不管算法竞赛还是找工作笔试面试&#xff0c;都是非常爱问爱考的&#xff0c;其实也是因为这个算法比较难懂&#xff0c;其实就是很难&#xff0c;所以非常个…

【环境配置】虚拟环境配置

创建虚拟环境 conda create -n pytorch python3.9安装成功提示 激活虚拟环境 activate pytorch安装pytorch 查看 python 版本——python 退出 python——exit() 对照 python 与 pytorch 的对应关系 pytorch 地址&#xff1a; https://pytorch.org/get-started/previous-…