如何使用开发框架工具快速部署SDK并创建工程
发表于 2023/11/28
0
本小节课程将以通用计算工程的循环校验为例,讲解如何通过开发框架工具快速部署通用计算SDK,创建通用计算循环校验工程并在鲲鹏平台上运行。程序运行后可以通过程序的输出来对比通用计算加速前后的效果。
本小节的实验步骤将在远程实验室的云开发环境中进行演示,使用自备环境的开发者也可以根据本小节实验步骤进行学习。
通用计算工程中涉及到的很多加速场景都是利用鲲鹏加速库来完成的,接下来的章节将讲解鲲鹏加速库和循环校验的内容,了解鲲鹏加速库是如何帮助开发者的应用进行加速的。同时创建工程提供的功能有基本的了解。
鲲鹏加速库
鲲鹏加速库是对软件基础库做深度性能优化,构建常用软件库在鲲鹏平台上的性能竞争力,硬件加速+软加速库,现已完成18个加速库,是基于鲲鹏平台指令优化和软硬件结合的加速技术。
鲲鹏加速库提供基于ARM指令深度优化和基于鲲鹏KAE(鲲鹏硬件加速引擎)开发的加速库,覆盖系统库、压缩、加解密、媒体、数学库、存储、网络等7类加速库,为大数据加解密、分布式存储压缩、视频转码等应用场景提供高性能加速。
从上面的图片中可以看到,鲲鹏加速库的实现方式分为基于鲲鹏指令的软加速和基于鲲鹏加速引擎的硬加速。
鲲鹏指令性加速就是基于ARM指令深度优化,主要包含系统基础库、压缩、媒体、数学库等。以Gzip为例,Gzip(GNU zip)是一款发布较早并已广泛应用的压缩软件。鲲鹏优化版本在官网发布的Gzip-1.10 Release版本基础上,通过数据预取、循环展开、CRC指令替换等方法,来提升其在鲲鹏计算平台上的压缩和解压缩速率,尤其对文本类型文件的压缩及解压具有更明显的性能优势。
而鲲鹏硬加速是基于鲲鹏加速引擎完成的,鲲鹏加速引擎系统逻辑架构如下图所示:
(1)芯片加速器子系统、BIOS子系统和BMC子系统为基于鲲鹏920服务器自带子系统。
(2)加速器驱动子系统,向上层提供各子加速器模块统一的驱动接口,是本系统的核心子系统。
(3)应用库子系统(OpenSSL/zlib),向上层应用提供标准接口。
(4)应用系统(APPs),指上层应用系统,包括大数据应用、Web应用等,属于用户层面系统。
以KAEzip为例,KAEzip是鲲鹏加速引擎的压缩模块,使用鲲鹏硬加速模块实现deflate算法,结合无损用户态驱动框架,提供高性能Gzip/zlib格式压缩接口。在分布式存储场景,使用硬压缩加速,大数据块混合读写性能提升14%+。
循环校验CRC32
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。
CRC本质上是选取一个合适的除数,也就是生成多项式,要进行校验的数据是被除数,然后做模2除法,得到的余数就是CRC校验值。
CRC检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。
鲲鹏平台采用的是ARM架构,ARM架构为了提高程序运算性能,提供了NEON指令加速,让数据的运算变的更快。后续章节将以CRC32为例,展示通用计算工程的创建过程,同时针对CRC32程序在NEON指令加速前后的时间进行对比。
使用开发框架工具完成应用创建
进入VScode IDE页面,点击鲲鹏DevKit插件图标登录DevKit工具。
登录成功后,点击左侧鲲鹏DevKit工具开发页签,展开应用开发选项,
点击“创建”工程,选择“通用计算应用”,
选择“加速库”应用,
选择模板工程中的“循环校验”,指定CRC32工程存放到本地的位置后,点击“下一步”,
这里不必配置目标节点,选择“否”后,点击“创建工程”,
等待鲲鹏加速库应用工程创建成功之后,点击“打开工程”,
即在资源管理器代码区打开CRC32_Project工程代码。可以使用DevKit工具对该工程进行编译调试和调优。
注:如果页面提示工程创建失败,请检查当前电脑的网络连通性。
使用编译调试工具完成工程的快速编译
点击左侧鲲鹏DevKit工具开发页签,展开编译调试选项,
点击“编译”按钮,弹出“编译”配置页签,
点击“添加目标服务器”,打开“目标服务器管理”设置,
再次点击“添加目标服务器”,弹出“添加目标服务器”配置信息,
将目标服务器配置信息填写完整,选择私钥所在路径,上传公钥选“否”。
点击“确定”后,提示添加目标服务器成功。
再次点击“编译”按钮,在远程服务器配置中选择目标服务器,修改默认的编译命令后,点击“开始编译”,
等待其编译完成。
使用编译调试工具进行远程调试
打开鲲鹏DevKit工具开发页签,展开编译调试选项,点击“调试”按钮,弹出“调试”配置页签,
选择“通用应用调试”,在远程服务器配置中选择目标服务器,其中应用程序填入刚编译完成的二进制文件/home/KunpengProject/workspace/CRC32_Project/src/crc32/build/crc32_demo,应用程序参数填入用于测试的数据文件,可以为任意文件,本例以/home/KunpengProject/gcc-9.3.0.tar.gz为例。填写完成后,点击“开始调试”。
进入调试模式,使用vscode原生调试方式进行调试。
单击代码行号前位置进行添加断点,或点击左边栏断点选项卡的“+”按钮输入函数名增加断点。
点击功能区的“继续”按钮运行至下一处断点
点击“逐过程”,“单步调试”或“单步跳出”等按钮进行调试
点击左边栏查看变量和调用栈等信息
继续调试直至程序运行结束或者点击“结束”按钮提前结束调试。
使用编译调试工具完成性能验证
打开鲲鹏DevKit工具开发页签,编译调试选项,点击“运行”按钮,弹出“运行”配置页签。若已配置过“调试”配置项,工具将根据“调试”配置项直接运行程序
选择“通用应用调试”,在远程服务器配置中选择目标服务器,其中应用程序填入刚编译完成的二进制文件
/home/KunpengProject/workspace/CRC32_Project/src/crc32/build/crc32_demo,应用程序参数填入用于测试的数据文件,可以为任意文件,本例以/home/KunpengProject/gcc-9.3.0.tar.gz为例。填写完成后,点击“开始运行”。
在终端输出中观察到结果如下:
通过结果输出可以看到,NEON指令加速前的运算时间为767ms,经过鲲鹏平台的NEON指令加速,运算速度快了近8倍,达到了93ms,极大地提升了循环校验程序的运算速度。
本页内容