• 自从有了这个工具,一键代码迁移不在话下


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

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

     

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

  • 相关阅读:
    PHP基础函数、自定义函数以及数组
    php 中 isset 和empty 的区别
    mysql中索引的使用
    mysql 中的增改查删(CRUD)
    mysql语句应该注意的问题
    《zw版·Halcon-delphi系列原创教程》 水果自动分类脚本(机器学习、人工智能)
    《zw版·Halcon-delphi系列原创教程》 2d照片-3d逆向建模脚本
    《zw版·Halcon-delphi系列原创教程》简单的令人发指,只有10行代码的车牌识别脚本
    《zw版·Halcon-delphi系列原创教程》航母舰载机·视觉定位标志的识别代码
    zw版_zw中文增强版Halcon官方Delphi例程
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14918988.html
Copyright © 2020-2023  润新知