摘要:鲲鹏开发套件Kunpeng DevKit可实现两人天快速完成代码迁移,提供全栈开发工具,集代码迁移、编译调试、性能调优、异常诊断等工具和功能于一体。

本文分享自华为云社区《【云驻共创】鲲鹏DevKit实现两人天高效迁移汇编代码》,原文作者:Victue。

一、鲲鹏之志

1.1 鲲鹏平台

鲲鹏平台,为全世界的开发者提供了一种新的算力选择。从硬件的开放,到系统软件的开源,涵盖从底层硬件、基础软件到上层行业应用的全产业链条,在国计民生的各个行业取得了重大效果或者进展。工欲善其事必先利其器,鲲鹏开发套件Kunpeng DevKit是华为公司为了广大鲲鹏开发者打造的一把屠龙之刃,帮助开发者高效开发,一键迁移。

1.2 Kunpeng DevKit

鲲鹏开发套件Kunpeng DevKit提供全栈开发工具,集代码迁移、编译调试、性能调优、异常诊断等工具和功能于一体。将开发者的工作各个环节一一串联,提供了一个方便、快捷和专业的工具包,通过鲲鹏DevKit可以帮助用户高效开发,一展宏图。

真正的武林高手,内功很强,外功同样很强!DevKit产品设计和用户体验同样优秀!

时间有限,本文着重分享汇编翻译技术Kunpeng DevKit产品体验

二、汇编自动翻译

2.1 汇编代码

众所周知,汇编语言历史悠久,上手难度较高,是任何一种计算机或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集

一种汇编语言专用于某种计算机系统结构,如x86_64或aarch64汇编。这意味着在某种程度上汇编语言可以真正的操控硬件,可以完成高级语言不能完成的任务。同样,正因为汇编语言接近硬件平台,所以汇编语言也是晦涩难懂、难以上手。

2.2 汇编样式

每一个计算机平台都对应着自己的计算机平台,内存、寄存器等语法格式错综复杂。

汇编语言使用方式也多样,单指令简单嵌入汇编、多指令简单嵌入汇编、全汇编文件。这相当于在我们现代社会讲古文古诗,全篇都使用文言文或者其中引用两句古诗词。

2.3 意义和挑战

将代码从一个平台迁移到另一个平台,如果其中需要牵涉到汇编语言翻译,其代码迁移难度巨大。

目标是两人天完成应用迁移,然而如果代码中包含汇编语言,有可能12人都无法完成迁移。不行,不可以!华为必须开发汇编迁移工具!

“代码千万行,汇编就几行,迁移没工具,开发泪两行”

2.4 使用场景

在使用汇编语言时,嵌入汇编的指令数大部分是小于三条指令,使用都较简单,指令也比较集中。

全汇编文件中SIMD指令占了绝大多数,指令相对集中。

可以发现,常用汇编指令和SIMD指令占了汇编语言大半江山。只要能够解决常用指令和SIMD指令,项目就成功了一大半。

2.5 总体思路

目标是识别所有X86汇编,自动翻译(大多数场景且性能尽量不衰减)。

在开始时,对于常用的指令进行翻译,而后随着用户规模的扩大和使用量的增加,根据用户需求,逐步加入用户所需要的指令。

第一个技术点:自动化

第二个技术点:技术复用

整体技术架构面向未来,拥有生命力。所有就有了下列设计原则

设计原则

  • 使用便利 - 一键迁移
  • 可扩展性 - 翻译范围
  • 可维护性 - 源码翻译
  • 架构重用 - 不同场景
  • 技术复用 - 不造轮子

2.6 总体设计

W + 二

“二”,直接翻译,实现从X86-64 → AArch64

“W”,庖丁解牛,虽然操作较为复杂,但是利用编译技术的现有能力,加以改造为翻译所用,实现翻译效率最优化。依据上文所述汇编复杂特性以及平台便捷化目标,产生以下设计原则和设计方案

设计原则

  • 汇编样式复杂
  • 平台间差异大
  • 目标要求很高

设计方案

  • 能用则用
  • 需改尽改
  • 当快则快
  • 曲折前行

三、汇编自动翻译部分技术

3.1 嵌入汇编的识别

对于全汇编,识别方式较为简单,通过文件的后缀即可识别汇编文件,问题在于嵌入汇编的识别。我们使用Clang-Tidy编译技术实现该目标。

Clang-Tidy:基于LLVM的静态语法检查框架,提供语法(AST)解析能力。

基于Clang-Tidy工具集拓展汇编识别和替换规则,使得AST关键节点暴露。定位汇编代码后即可为所欲为,进行翻译处理。

识别流程图如下:

下面给出一个小案例:

3.2 简单嵌入汇编的自动翻译

基于规则的自动翻译,即通过某种特征匹配规则识别和转换相应的代码。

1.指令操作数映射

2.汇编语句特征分析(绑定步骤1)

3.规则库规则匹配(绑定步骤2)

4.根据规则进行代码翻译

首先对汇编语句进行语法解析,解析完以后可以得到各个特征,再在规则库中进行特征规则匹配,即与语法结构进行匹配,在规则进行转换时,相对应的语法结构也进行转换,两者合一,即代码翻译完成。

3.3 复杂汇编的自动翻译

对于复杂汇编,指令条数多,语法结构复杂,千变万化,也可能存在外部引用等问题。

1.指令组合无法穷举

2.汇编模块引用外部变量

3.消除平台间调用差异

4.SIMD指令对等翻译

上文中“W + 二”设计结构在复杂汇编翻译中发挥重要作用。下“一”进行SIMD直接翻译。

3.4 汇编翻译举例

将X86-64一键翻译为AArch64,并且提供两种方案,旧的路径依旧可以在X86上执行,没有任何问题,并且创建的新分支可以运行在Kunpeng平台上。生成代码后,可以一键替换掉旧代码。提供一个main函数,可以看作一个驱动,测试驱动可以在X86和Kunpeng平台同时运行。运行结果一致。保留X86平台的兼容性,代码在不同的平台运行可以保持100%的兼容和正确。

简单汇编翻译:

复杂汇编翻译:

天啦,这也太快了。朋友们,赶紧下载使用吧,一键翻译,迁移你的应用至鲲鹏平台。冲起来!

四、体验设计

Kunpeng DevKit功能强大,使用优雅。采用超级方便的一站式解决方案,帮助开发者加速软件开发、迁移和算力升级。一站式开发套件、全流程效率提升。一站式迁移、编译、测试、分析。

4.1 应用迁移体验设计

开发者依照个人经验和习惯可以大致分为三类:

经验较少的用户,重度依赖自动化,希望全自动化迁移

有一定经验,合理依赖自动化,希望自己主要迁移过程

经验丰富,浅度依赖自动化,自己纯手工迁移

鲲鹏DevKit针对上述三种不同类型的用户,做了大量产品体验层的设计。

第一类开发者,通过系统全面自动化能力,做到无感知迁移。提供动态二进制翻译工具,自动的将X86平台指令集翻译成Kunpeng平台指令集。整个过程透明、全自动,无需额外工作,整个应用即可应用在Kunpeng平台上。

第二类开发者,希望参与整个应用迁移的过程和环节中,了解翻译过程。鲲鹏DevKit自动识别问题、提供建议辅助决策、提供替换代码─键修改,极简体验。

第三类开发者,可能存在开发者认为自动化重构是一个黑盒子,不可信任,在这方面,困DevKit提供了透明展示等内容,使得用户相信,该工具是安全的。

4.2 性能调优体验设计

设计架构时,将人的思想行为融入其中,使得工具的使用更加自然化、更加符合人类认知的思考,从整体到局部,从宏观到微观。

4.3 小例子

举几个小例子可以说明上述体验设计,一个是硬件调优3D可视化,基于认知模型、表现模型极简抽象,从物理世界到虚拟世界的映射。

第二个例子是性能分析时,进程/线程拥塞的直观可视化。

在系统设计时,运行大量的信息可视化表达,一目了然,清晰可见,优雅体验。

五、总结

无需多言,一图流概括!

鲲鹏DevKit产品从设计到功能都是极好的,可以发现为了鲲鹏的发展和壮大,华为在此花了很多心思,希望各位开发者朋友们多多尝试,或许鲲鹏比你我想象的更加强大、友好、便利。

“北冥有鱼,其名为鲲。鲲之大,不知其几千里也。化而为鸟,其名为鹏。鹏之背,不知其几千里也;怒而飞,其翼若垂天之云。”

点击关注,第一时间了解华为云新鲜技术~

自从有了这个工具,一键代码迁移不在话下相关推荐

  1. 不是报错就是崩盘,这些代码迁移问题你遇到过几个?

    当下,应用服务转向ARM云平台成为一个趋势. 但是当前绝大部分云平台应用都跑在于x86架构上,开发者需要对代码进行跨处理器平台的移植.如果纯粹依靠人工进行代码迁移,不仅分析过程投入工作量大.周期长.需 ...

  2. 用typescript完成倒计时_「干货」将数十万行CoffeeScript代码迁移到TypeScript

    作者 | David Goldstein 译者 | 王强 策划 | 小智 转发链接:https://mp.weixin.qq.com/s/TK7kWXX4hR3e-jtpVMuBnw 序言 2017 ...

  3. 为什么你需要将代码迁移到ASP.NET Core 2.0?

    随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...

  4. java一键安装_新工具一键安装Java环境!微软又双叒叕造福开发者

    原标题:新工具一键安装Java环境!微软又双叒叕造福开发者 微软又出一个新工具,正在以实际行动征服开发者的心. 在Windows平台上,只需要下载一个安装包,就能够安装Java开发环境了. 之前,因为 ...

  5. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论

    新闻热点 国内国外,前端最新动态 Microsoft 宣发面向 iOS 与 Android 平台的 Microsoft Edge:为了保证 Windows 用户各平台使用体验的一致性,Microsof ...

  6. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论... 1

    前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论 作者:王下邀月熊 编辑:徐川 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解 ...

  7. 软件工具将GPU代码迁移到fpga以用于AI应用

    软件工具将GPU代码迁移到fpga以用于AI应用 Software tools migrate GPU code to FPGAs for AI applications 人工智能软件初创公司Mips ...

  8. 代码片段管理工具_VS代码片段:提高编码效率的最强大工具

    代码片段管理工具 by Sam Williams 通过山姆·威廉姆斯 VS代码片段:提高编码效率的最强大工具 (VS Code snippets: the most powerful tool to ...

  9. tensorflow1.0代码迁移到2.0官方指导

    https://www.tensorflow.org/guide/migrate 解决源代码中tensorflow版本过低问题(tensorflow1.x代码迁移到2.0) 原创风一样的rain 最后 ...

最新文章

  1. python实现Shapiro-Wilk正态分布检验
  2. CCF NOI1040 除法游戏
  3. 李飞飞、邓中翰当选美国国家工程院院士
  4. c#使用正则表达式获取TR中的多个TD_一个 Vue 模板可以有多个根节点(Fragments)?
  5. CSDN如何快速转载别人的博客(附简单详细方法)
  6. Vista命令行大全
  7. Android学习起步 - 新建工程及相关
  8. 进程与线程的区别:最浅显易懂的解释
  9. 产品经验谈:设计思维 统计思维
  10. javax.servlet.jsp.JspTagException:
  11. 学习笔记之搜索引擎—原理、技术与系统
  12. 这么多前端优化点你都记得住吗?
  13. Windows10下编译Nginx源码
  14. JavaScript刷新和跳转
  15. 看到大量状态SYN_RCVD的连接,可能发生的原因是什么?
  16. 【机器学习PAI实践十一】机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码
  17. 战狼2影评-20170807
  18. win10 win11 创建共享文件夹 mac 苹果电脑共享 无internet 安全,你的电脑只能访问本地网络中的其它设备 共享文件夹会导致本地电脑无法上网,
  19. qt学习之旅--MinGW编译FFmpeg(32bit)
  20. IPC 通信 - IPC

热门文章

  1. 使用 | Java使用WebMagic 爬取网站
  2. node函数 node路由
  3. Bootstrap响应式工具类
  4. es6 调用 Iterator 接口的场合
  5. c++里面的内联函数
  6. Git笔记(10) 别名
  7. 4,表查询语法,表连接,子查询
  8. nuxt.js 引入第三方插件报window is not defined
  9. SpringMVC(二)高级
  10. 跨域问题解决(我只是搬运工)