写点什么

鲲鹏 DevKit 原生开发,效率倍增使能极简开发

作者:乌龟哥哥
  • 2023-04-14
    上海
  • 本文字数:4866 字

    阅读完需:约 16 分钟

今天介绍的主要内容有:鲲鹏开发框架的工具能力和使用,鲲鹏开发框架插件工具,鲲鹏编译调试工的新特性和功能

1.整体介绍


鲲鹏在最初发展存在生态不丰富问题,随着鲲鹏的发展,越来越多的应用需要在鲲鹏上进行原生开发,使用鲲鹏的算力。


通过广泛的调研,我们了解到,开发者开发鲲鹏架构应用的主要有以下痛点


不知道鲲鹏架构的特点是什么,


不知道在应用中如何最大程度地使用鲲鹏算力。


在开发过程中缺乏鲲鹏亲和开发引导


缺少针对鲲鹏特点的检查工具,


难以快速获取鲲鹏生态的三方依赖


编译调试阶段缺少应对鲲鹏多样性算力的编译和调试能力。


测试阶段,存在应用兼容性测试工作量大。


同时在开发过程中,鲲鹏开发者和爱好者难以获得完整的学习体验和测试的硬件环境,开发者需要获得面向整个开发流程的工具及配套资料。



为了解决开发者的痛点,我们推出了鲲鹏亲和开发框架,帮助开发者降低学习成本和入门门槛,提高开发者的开发效率。


目前,鲲鹏亲和开发框架提供了场景化的 SDK 启发式编程、鲲鹏亲和分析、鲲鹏调试器和远程实验室等功能,降低开发应用的难度,方便开发者使用鲲鹏架构提供的软硬协同能力,提升开发效率。



通过鲲鹏亲和开发框架,用户可以方便地获取线上实验资源、编程指南、指导手册等资料,通过简单的快速学习,赋能开发者鲲鹏架构应用开发能力,开发者可以通过工程向导创建代码工程,并利用鲲鹏场景化 SDK 示例程序快速学习鲲鹏架构特性。


开发鲲鹏亲和代码开发过程中,通过启发式建编程,可以智能提示近万条优化函数和百万级别的依赖文件。鲲鹏亲和分析可以通过各种静态检查工具,帮助开发者选择鲲鹏亲和编译选项、运行环境等,屏蔽底层的硬件差异,大大提高软件设计和开发效率。

2. 鲲鹏开发框架

鲲鹏亲和开发框架提供了多样化调试工具,通过鲲鹏调试器,用户可以针对不同的使用场景和应用类型,对通用应用程序、英伟达 GPU 应用程序和高性能集群应用程序进行调试,方便快速的定位问题代码。


同时鲲鹏开发框架还提供了远程实验室功能,免费向开发者提供远程鲲鹏软硬件资源,可以随时随地体验鲲鹏多样算力。


鲲鹏开发框架提供给开发者用户一个开发体验账号,架构亲和应用高性能、多样能力算力兼容的一个框架,帮助开发者去降低应用开发难度,提高开发效率,提供场景化的 SDK 和工程创建向导。



场景化 SDK 包括以下板块:鲲鹏 KAE 加速引擎、安全计算 Tee、高性能编译器、通信库、数学库和国密加密库等。


鲲鹏架构软硬件能力提供安全计算、、高性能计算和通用计算类场景化的 SDK,其 SDK 包含 20 余种应用场景的 demo 工程创建和管理、 demo 工程示例代码的下载、各 SDK 相关组件的下载、部署、智能和检查,帮助用户快速创建应用工程, 0 成本的学习鲲鹏开发框架,亲和的应用,

2.1 鲲鹏安全计算 SDK

随着操作系统的复杂性提升,攻击窗口也在变大,如果没有安全加固,漏洞会被利用,有些应用被设置成可信应用,具备较高的特权,但存在固有的安全漏洞被黑客利用后能够获取到用户数据。而鲲鹏开发框架基于机密计算 RUST 注入套件,向开发者提供了安全计算 SDK,可以从硬件架构上提供一种可信运行环境,在应用和系统被攻破后,黑客也无法获取应用户环境,提高了应用和数据的安全性。安全计算 SDK 提供了 CA 工程、 TA 工程、 RSA 工程、机密数据保存工程、域名投票工程、证书签发工程等 6 个参考工程,能够帮助开发者快速的学习开发环境的使用和高效的开发安全计算应用。



其中 CA 工程是运行在业务环境下的应用程序工程,它展示的主要是 CA 如何去调用一个 TA 工程,而 TA 是运行在可信执行环境下的 TE 应用程序。ISA 工程既包含了 CA 工程和 TA 工程,是基于 RSA 进行加解密签名和验签的工程。而机密数据保存工程使用 TE 安全存储接口保存机密数据,可以支持应用将敏感的数据如密钥等进行加密操作,不再需要从软件层自实现加密方案,可以替代 KMC 或者白盒加密。


匿名投票系统基于 RSA 和 IES 加密。匿名投票示例工程可以在保证数据隐私安全的情况下完成匿名投票,可在业务执行环境中查看用户是否已投票,但是无法获取其投票的选项。这块主要展示 Python 从 web 端到后端再到 TE,整个调用流程可以满足部分场景下的三方语言来调用 CA 和 TA 应用的样例。证书签发工程主要用于用户签发 X509 证书场景,主要功能是通过创建证书支持。目前,证书签发支持 RSA 和 SM2 算法,对用户提交的证书请求文件进行签名,生成 X509 证书,使用 TE 对证书的私钥加密保存,保证私钥不会泄露更证书生成和用户证书的签发。


Hypompi 是整个高性能计算的关键组件,它实现了并行计算、网络通讯技功能,可以用来支持制造、气象等应用场景。同时该通信库也可扩展应用于 AI、大数据等通用领域。鲲鹏数学库提供了基于鲲鹏平台优化的高性能数学库。基础数学库运算库主要实现了基本的数学运算,包括三角函数、双曲函数、指数函数、对数函数等,广泛应用于科学计算,如气象、制造、化学等行业。



电信代数运算库则提供线性方程组运算,包括方程组求解、特征值和歧义值问题的求解等。基础线性代数库基于鲲鹏架构,提供了三个层级的高性能向量运算。向量矩阵运算和矩阵运算是计算机数值矩计算的基石,这在制造机器学习大数据领用有广泛的应用。稀疏线性代数库基于鲲鹏架构,为压缩格式的稀疏矩阵提供了高性能向量矩阵运算。快速傅里叶变换库实现快速计算序列的离散傅里叶变换或其逆变换的方法,广泛的应用于工程科学和数学领域。这些都是包含在高性能计算 SDK 中。

2.2 通用计算 SDK


通用计算 SDK 包括加速库工程,加速库应用和硬件加速应用,同构加速应用三种场景。


硬件加速应用主要针对的是基于应用、基 KAE 驱动,利用鲲鹏芯片的能力实现对上层应用的硬件加速场景,包括压缩和加解密两种 demo 工程,其中加解密支持 IES 算法和国密 SM4 算法。加速库应用鲲鹏芯片自带的加速指令,利用鲲鹏架构的特性对应用实现软件加速。支持 help scan 正则表达式匹配库、GZIP 压缩库,还有 IES 加解密,而鲲鹏同构加速工程则提供了一套友好的 APII,让用户可以自主的在业务代码中添加 Java 注解的方式来实现指定代码卸载到指定节点进行执行,从而实现代码的加速效果。

2.3 代码工程管理:按场景推荐工程目标、一键创建代码工程

上述介绍的几个场景基于 SDK 来介绍,主要通过 SDK 和工程创建。鲲鹏开发框架,提供了工程创建向导,可以逐步引导开发者创建工程代码。在创建过程中,鲲鹏开发框架能向开发者展示 SDK 模块架构图,开发者可以清晰的了解到 STK 所需要的组件及它在系统中的所处的位置。开发者还可以了解到当前组件的使用说明和介绍。用户可以选择自动部署或者下载后手动部署 SDK 到远程服务器。部署完成后,用户可以通过整个组件架构图的提示来查看部署是不是完成。



标绿色部分就是说明检查是通过的,整个 SDK 和工程是完整的,这块就是最终工程创建完成后,鲲鹏开发框架会展示下载好的模板、工程和代码,还有工程的目录树。用户可以通过阅读和调试这些样例代码,了解鲲鹏架构的特性,学习和使用场景化 SDK 来提供的各种鲲鹏软硬件能力,并基于这些样例代码可以进行二次开发。

2.4 Demo 工程展示

下面是一个 ISA 工程的运行结果,属于安全计算部分。开发者在开发鲲鹏亲和应用中,可以使用鲲鹏开发框架的启发式编程功能,以提高开发效率和质量。鲲鹏开发框架会自动下载鲲鹏的字典库数据,字典数据下载完成后,插件会启用针对加速库函数的语法高亮语法、高亮函数定义、跳转以及代码自动补全。其借助启发式编程搜索功能,用户可以获得相关的函数在线说明文档和使用介绍。帮助开发者在开发阶段使用更高效的鲲鹏加速库,检查应用软件的鲲鹏亲和性,更高效地使用鲲鹏算力。目前支持压缩库、系统库和加解密库、媒体库、数学库五类加速分析优化。目前提供了 20 款 Linux 版本的鲲鹏兼容性检查和获取途径,鲲鹏开发框架还支持对源文件和构建文件的检查。



相同的应用程序在 X86 平台上和鲲鹏平台上运行,计算的结果可能会有不同的精度损失,导致数值计算结果存在一个差异。而这些计算的差异对于计算结果和精度有比较高要求的行业是无法忍受的。因此在对这些行业的应用程序迁移到鲲鹏服务器时,工具能够分析应用程序在 X86 平台和鲲鹏平台计算精度的差异点,分别在 X86 和鲲鹏平台上运行,最终通过对比输出的结果来分析平台精度差异,并指出有差异函数列表及位置,方便开发者去定位计算结果异常点。


3. 鹏编译调试工具

3.1 鲲鹏编译调试工具


鲲鹏编译调试工具,之前介绍的是一个通用应用程序编译调试功能,现在增加了本地远程 GPU 程序的调试,还有 HPC 并行调试的能力。


在实际开发场景中,开发者经常需要在服务器上进行开发、编译、调试和运行操作。由于绝大多数开发者就是更喜欢在本地 windows 环境上使用 IDE 编码,这样需要开发者每次编写好代码后就手动上传到远程服务器,然后在服务器上进行编译调整等一系列操作。若编译调试报错,则还需要在本地修改代码再继续上传。若运行报错,则需要开发者在远端服务器进行跟踪定位,最后在本地上修改代码在上传编译运行,而这个过程相对来说是比较低效,开发效率比较低下。为了解决这个由于开发编译调试环境分离造成的开发效率低下的问题,鲲鹏亲和开发框架提供了鲲鹏编译调试能功能,该功能可以简化在服务器上程序的开发流程,提高开发效率,可以在本地 IDE 中实现开发同步代码。


3.2 远程编译

通过配置一个简装节点,部署编译器,当我们配置配置好远端服务器,在编译之前用户可以使用键部署编译器功能,将选择的编译器一键部署到目标服务器上。目前可选部署的编译器支持毕生编译器、毕生 JDK 还有 GCC for openEur 的部署。在部署完成后,用户可以在创建一个编译任务前,通过一键同步代码功能将代码同步到远端节点。代码同步完成后,通过点击按钮执行远程编译操作。编译过程中的结果可以在我终端显示,整个过程无需频繁的在 IDE 和远端服务器之间进行一个切换,实现了 DE 一站式部署开发。

3.3 远程调试

本次新增的 CUDA 程序的调试功能,鲲鹏亲和开发框架提供的编译调试插件在原有的功能上增加了扩大程序调试器,可以在本地 ID 上调试远程服务器上的 CUDA 应用程序。 CUDA 程序调试器基于 CUDA GDB 工具构建,将用户的 GUDA 程序调试从繁琐的 Linux 控制台中解放出来,通过图形化页面的方式向用户提供扩大程序调试能力。功能更加贴近于用户的开发习惯,简单易用,降低了用户的使用门槛还有学习成本,提升了整个代码的调试效率。CUDA 调试器支持两种模式,一种是 launch,还有一种是 attach 调试方式,其中 launch 模式支持选择 GPU 设备进行调试。 CUDA 调试支持多线程调试,在调试过程中可以进行一个线程切换,支持对应线程的堆栈、变量等信息的一个展示。


3.4 编译调试

编译调试是针对大规模的 MPI 集群应用的一个调试能力。HPC 并行程序具有复杂逻辑、并发量大、计算节点多、进程数多、状态切换迅速且复杂等特点,非常难以进行一个集群调试。针对这个问题,鲲鹏调试器提供了 HPC 并行调试功能,鲲鹏调试器支持模式启动,最多是支持 256 个本地或远程的 MPI 集群应用进行调试,在调试过程中左边栏将会显示 MPI 机型运用的一个通信分组情况。开发者可以实时的查看每个进程的全局 rank 排序所在的计算节点,方便开发者查找指定的进程,同时开发者可以通过按键切换来显示源文件数,源文件的那个目录数,查看被调用程序的源代码列表,切换不同源代码阅读,能够直接对应匹配上源码位置。



鲲鹏调试器支持按照全局单进程或者单通讯组的方式进行同步调试,当程序执行到某一关键步骤时,开发者可以选择单独调试,执行这一关键的一个或者一个组的进程,排除其余进程对该调试的干扰,在非关键步骤情况下再切回全局进行调试。


4. 总结

本文主要介绍鲲鹏开发套件 DevKit 产生的背景以及全部工具链,让开发者快速熟悉鲲鹏 DevKit 中每个工具的主要功能和特色。鲲鹏调试器在开发完成之后到最终的编译运行阶段,编译阶段提供能够提在鲲鹏上提升应用,在运行过程中,如果遇到一些程序 bug 调试,鲲鹏调试器能够方便用户进行问题的定位和解决。本地没有部署环境也可以使用鲲鹏远程实验室。整体来说,鲲鹏 devkitd 非常方便迁移相关开发者的使用,极大地提高了迁移效率。

发布于: 刚刚阅读数: 3
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021-03-16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
鲲鹏DevKit原生开发,效率倍增使能极简开发_鲲鹏 DevKit_乌龟哥哥_InfoQ写作社区