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

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

简介

 
在先前的 AI 引擎系列博文中,我们以 x86 模型为目标运行了 AI 引擎编译器,并运行了 X86 仿真器来验证 AI 引擎应用的功能模型。
在本文中,我们将以 AI 引擎模型为目标来运行 AI 引擎编译器并观察生成的部分文件。


要求

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

AI 引擎系列 1 - 从 AI 引擎工具开始(2022.1 更新)
AI 引擎系列 2 - AI 引擎 graph 简介 (2022.1 更新)
AI 引擎系列 3 - AI 引擎内核简介
AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator(2022.1 更新)
 

以 AI 引擎模型为目标运行 AI 引擎编译器


在上一篇博文中所创建的工程内,打开 simple_application.prj 文件,将生效的构建配置更改为“Emulation-AIE”,这样即可为 AI 引擎模型编译应用。
 



选中“Explorer”(资源管理器)窗口中的 aie 应用 (simple_application),然后单击锤子图标构建该应用。
 



这样即可在控制台中看到该命令的运行过程。此过程与上一篇博文中用于 x86simulator 的过程非常相似。

aiecompiler -v --stacksize=1024 --heapsize=1024 -Xchess=main:darts.xargs=-nb -include="<Xilinx Installation Path>/Vitis/2022.1/aietools/include" -include="<Xilinx Installation Path>/Vitis_HLS/2022.1/include" -include="../" -include="../src" -include="../data" -include="../src/kernels" -target=hw   -platform=xilinx_vck190_base_202210_1/xilinx_vck190_base_202210_1.xpfm -workdir=./Work ../src/project.cpp 


主要区别在于目标选项 (-target) 设为 hw(硬件)。(先前构建目标为“Emulation-SW”,目标选项设为 x86)。
 

从 AI 引擎编译器生成的输出

构建完成后,即可在“Explorer”窗口中看到,已创建名为“Emulation-AIE”的新目录。

其中包含来自构建的所有输出。稍后我们再仔细查看此输出。
 



默认情况下,AI 引擎编译器会将所有输出写入 Work/ 的目录和 libadf.a 的文件。

libadf.a 文件是实际的输出文件,将在剩余 Vitis™ 流程中用于把 AI 引擎应用集成到系统其余部分。

Work/ 目录包含多个子目录和文件:

  • aie/该目录包含每个 AI 引擎各自编译的输出结果
  • arch/:该目录包含的文件用于描述 AI 引擎阵列上的应用的物理映射
  • config/:该目录包含的文件用于指定 SystemC 仿真器的选项
  • noc/:该目录包含 NoC 相关的文件
  • ps/c_rts/:该目录包含基于 C 语言的运行时协议,用于对 PS 交互进行建模
  • ps/cdo/:该目录包含生成的代码,此代码用于以配置数据对象格式 (CDO) 进行计算图 (graph) 配置和初始化。可在 SystemC-RTL 仿真和实际硬件执行期间使用。
  • reports/:该目录包含各种报告文件
  • project.aiecompiler_summary此文件可在 Vitis 分析器中打开,以便查看编译汇总信息和报告。我们将在后续博文中详细分析此文件。


运行 AI 引擎仿真器

现在,我们可以运行 AI 引擎仿真器了。

选中“AI Engine Application”(simple_application),然后单击“Run As”图标旁的箭头,单击“Run As > Launch AIE Emulator”(运行方式 > 启动 AI 引擎仿真器)
 



仿真输出会写入 Emulation-AIE/aiesimulator_output/data/output.txt 文件。

我们来仔细分析下该文件:
 



每一行值之前都有时间。这是因为,相比于 x86 仿真,AI 引擎仿真属于周期近似仿真,因此输出文件包含数据的时间戳。

可以看到,第一批输出样本于 934 ns 后到达。在 VCK190 基本平台中,AI 引擎的频率设置为 1250 GHz。这意味着需要 1167 个计算周期才能输出第一批输出样本。

在后续博文中,我们将讲解出现此时延的各种原因,但请谨记(正如 AI 引擎 3 博文中所述),此代码并未最优化为在矢量处理器上运行,因此并未充分发挥其算力。

通过观察 output.txt 中的第 64 行可以看到 TLAST 一词。这表示计算图执行完 1 次迭代需耗时 1033.6 ns
 



经过 1324.8 ns 仿真后,输出第 2 次迭代的首个样本。

现在我们可以验证,输出的数据与黄金结果仍然匹配。

选中 golden.txt 文件和新创建的 output.txt 文件,然后右键单击其中之一。随后选中“Compare With > Each Other after transformation”(比较对象 > 变换后相互比较)。
 




在弹出窗口中,单击列表图标(预定义的筛选器)。在第二个输出窗口中,启用“Remove timestamp”(移除时间戳),然后单击“OK”(确定)。在第一个弹出窗口上单击“OK”

这样将会从仿真器的输出文件中移除时间戳,仅对输出样本值进行比较。
 



2 个文件之间应不存在任何差异,这表示 AI 引擎编译结果与黄金参考之间功能上仍然匹配。
 

下一步

在下一篇博文中,我们将讲解 AI 引擎编译后生成的 Vitis 分析器报告文件。

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

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

相关文章

2011年09月21日 Go生态洞察:Go图像处理包

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Javaweb之javascript的BOM对象的详细解析

1.5.2 BOM对象 接下来我们学习BOM对象&#xff0c;BOM的全称是Browser Object Model,翻译过来是浏览器对象模型。也就是JavaScript将浏览器的各个组成部分封装成了对象。我们要操作浏览器的部分功能&#xff0c;可以通过操作BOM对象的相关属性或者函数来完成。例如&#xff1a…

【docker:容器提交成镜像】

容器创建部分请看&#xff1a;点击此处查看我的另一篇文章 容器提交为镜像 docker commit -a "sinwa lee" -m "首页变化" mynginx lxhnginx:1.0docker run -d -p 88:80 --name lxhnginx lxhnginx:1.0为啥没有变啊&#xff0c;首页&#xff1f; 镜像打包 …

【CCF-C解刊】4区逆袭到1区TOP,这本期刊实力强劲,34天录用,7天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读&#xff0c;这本期刊从4区逆袭成为中科院1区&#xff08;TOP&#xff09;&#xff0c;如此实力强劲的期刊&#xff0c;究竟如何&#xff1f; 如有相关领域作者有意向投稿&#xff0c;可作为重点关注&…

离散Hopfield神经网络分类——高校科研能力评价

大家好&#xff0c;我是带我去滑雪&#xff01; 高校科研能力评价的重要性在于它对高等教育和科研体系的有效运作、发展和提高质量具有深远的影响。良好的科研能力评价可以帮助高校识别其在不同领域的强项和薄弱点&#xff0c;从而制定战略&#xff0c;改进教学和科研&#xff…

Linux 多线程控制详解

目录 多线程编临界资源访问 互斥锁 API 简述 初始化互斥量 互斥量加锁/解锁 互斥量加锁(非阻塞方式) 互斥量销毁 程序示例 多线程编执行顺序控制 信号量 API 简述 初始化信号量 信号量 P/V 操作 信号量申请(非阻塞方式) 信号量销毁 程序示例 条件变量 创建和销毁…

node插件MongoDB(四)—— 库mongoose 的条件控制(三)

文章目录 前言一、运算符二、逻辑运算1. $or 逻辑或2. $and 逻辑与 三、正则匹配 前言 在mongodb 不能使用 > < > < ! 等运算符&#xff0c;需要使用替代符号。 一、运算符 > 使用 $gt< 使用 $lt> 使用 $gte< 使用 $lte! 使用 $ne 例子&#xff1a;获…

单片机启动流程

存储器 ​ 一个单片机中存在rom和ram&#xff0c;Soc也有rom和ram&#xff08;ddrx&#xff09;&#xff0c;部分Soc还包含MMU&#xff08;Memory Manage Unit 内存管理单元&#xff09;— &#xff08;用于系统内存管理&#xff0c;比如说虚拟内存空间&#xff0c;内存区间的…

Flink SQL自定义标量函数(Scalar Function)

使用场景&#xff1a; 标量函数即 UDF&#xff0c;⽤于进⼀条数据出⼀条数据的场景。 开发流程&#xff1a; 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数&#xff0c;名称必须叫做 eval&#xff0c;eval ⽅法签名必须是 p…

jenkins通知

构建失败邮件通知 配置自己的邮箱 配置邮件服务&#xff0c;密码是授权码 添加构建后操作 扩展 配置流水线 添加扩展 钉钉通知 Jenkins安装钉钉插件 钉钉添加机器人 加签 https://oapi.dingtalk.com/robot/send?access_token98437f84ffb6cd64fa2d7698ef44191d49a11…

为什么审计平台不适合进行数据库变更管理?

关于视源电子 广州视源电子科技股份有限公司 (CVTE) 成立于 2005 年 12 月&#xff0c;旗下拥有多家业务子公司。 截至 2022 年底&#xff0c;公司总人数超 6000 人&#xff0c;约 60% 为技术人员。公司的主营业务为液晶显示主控板卡和交互智能平板等显控产品的设计、研发与销…

C语言之文件操作(剩余部分)

上篇博客字数到极限了&#xff0c;给大家把内容补充在这一篇&#xff0c;我们还剩下文件读取结束的判定和文件缓冲区的内容没有介绍&#xff0c;让我们开始下面的学习吧&#xff01; 目录 1.文件读取结束的判定 1.1feof函数 1.2ferror函数 代码示例 2.文件缓冲区 2.1fflu…

Redis之主从复制

文章目录 一、什么是Redis主从复制&#xff1f;1.作用2.配置主从复制的原因3.环境配置 二、一主二从三、复制原理四、链路总结 一、什么是Redis主从复制&#xff1f; 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(ma…

用Go实现网络流量解析和行为检测引擎

1.前言 最近有个在学校读书的迷弟问我:大德德, 有没有这么一款软件, 能够批量读取多个抓包文件,并把我想要的数据呈现出来, 比如:源IP、目的IP、源mac地址、目的mac地址等等。我说&#xff1a;“这样的软件你要认真找真能找出不少开源软件, 但毕竟没有你自己的灵魂在里面,要不…

类与对象(2)

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月11日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

C++动态库

C动态库 动态库文件&#xff08;Dynamic Link Library&#xff0c;DLL&#xff09;是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本&#xff1a;VS2017 编程语言&#xff1a;C 2 功能介绍 使用VS2017项目模板创建C动态库生成…

Java 之 IO/NIO/OKIO

BIO blocking io AIO Asynchronous IO 从内存读取到写入--输出 从外部到内存 -- 输入 OutputStream //文件不存在则自动创建 try {OutputStream outputStream new FileOutputStream("text.txt");outputStream.write(a);outputStream.write(b);} catch (IOExcep…

Java-多态

1. 多态 1.1 多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 1.2 多态实现条件 在java中要实现多态&#xff0c;必须要满足如下几个条件&#xff0c;缺一不…

vivado时序分析-3时序分析关键概念

1、时钟相移 时钟相移对应于延迟时钟波形 &#xff0c; 此波形与因时钟路径内的特殊硬件所导致的参考时钟相关。在 AMD FPGA 中 &#xff0c; 时钟相移通常是由 MMCM 或 PLL 原语引入的 &#xff0c; 前提是这些原语的输出时钟属性 CLKOUT*_PHASE 为非零值。 时序分析期间…

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端 传统的磁盘管理&#xff1a;使用MBR先对硬盘分区&#xff0c;然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时&#xff0c;操作比较麻烦。分区使用空间已经满了&#xff0c;不再够用了&#xff…