自從有了這個工具,一鍵代碼遷移不在話下

​​​​​​​​​​​​​​​​​​​​​​摘要:鯤鵬開發套件 Kunpeng DevKit 可實現兩人天快速完成代碼遷移,提供全棧開發工具,集代碼遷移、編譯調試、性能調優、異常診斷等工具和功能於一體。

本文分享自華爲雲社區《【雲駐共創】鯤鵬DevKit實現兩人天高效遷移彙編代碼》,原文做者:Victue。編程

1、鯤鵬之志

1.1 鯤鵬平臺

鯤鵬平臺,爲全世界的開發者提供了一種新的算力選擇。從硬件的開放,到系統軟件的開源,涵蓋從底層硬件、基礎軟件到上層行業應用的全產業鏈條,在國計民生的各個行業取得了重大效果或者進展。工欲善其事必先利其器,鯤鵬開發套件 KunpengDevKit 是華爲公司爲了廣大鯤鵬開發者打造的一把屠龍之刃,幫助開發者高效開發,一鍵遷移。segmentfault

image.png

1.2 Kunpeng DevKit

鯤鵬開發套件 KunpengDevKit 提供全棧開發工具,集代碼遷移、編譯調試、性能調優、異常診斷等工具和功能於一體。將開發者的工做各個環節一一串聯,提供了一個方便、快捷和專業的工具包,經過鯤鵬 DevKit 能夠幫助用戶高效開發,一展宏圖。安全

image.png

​真正的武林高手,內功很強,外功一樣很強!DevKit 產品設計和用戶體驗一樣優秀!架構

時間有限,本文着重分享彙編翻譯技術和 KunpengDevKit 產品體驗。框架

2、彙編自動翻譯

2.1 彙編代碼

衆所周知,彙編語言歷史悠久,上手難度較高,是任何一種計算機或其餘可編程器件的低級語言。在不一樣的設備中,彙編語言對應着不一樣的機器語言指令集。函數

image.png

image.png

​一種彙編語言專用於某種計算機系統結構,如 x86_64 或 aarch64 彙編。這意味着在某種程度上彙編語言能夠真正的操控硬件,能夠完成高級語言不能完成的任務。一樣,正由於彙編語言接近硬件平臺,因此彙編語言也是晦澀難懂、難以上手。工具

2.2 彙編樣式

每個計算機平臺都對應着本身的計算機平臺,內存、寄存器等語法格式錯綜複雜。性能

image.png

​彙編語言使用方式也多樣,單指令簡單嵌入彙編、多指令簡單嵌入彙編、全彙編文件。這至關於在咱們現代社會講古文古詩,全篇都使用文言文或者其中引用兩句古詩詞。開發工具

image.png

2.3 意義和挑戰

將代碼從一個平臺遷移到另外一個平臺,若是其中須要牽涉到彙編語言翻譯,其代碼遷移難度巨大。測試

image.png


目標是兩人天完成應用遷移,然而若是代碼中包含彙編語言,有可能 12 人都沒法完成遷移。不行,不能夠!華爲必須開發彙編遷移工具!

「代碼千萬行,彙編就幾行,遷移沒工具,開發淚兩行」

2.4 使用場景

在使用匯編語言時,嵌入彙編的指令數大部分是小於三條指令,使用都較簡單,指令也比較集中。
image.png

​全彙編文件中 SIMD 指令佔了絕大多數,指令相對集中。

image.png

能夠發現,經常使用匯編指令和 SIMD 指令佔了彙編語言大半江山。只要可以解決經常使用指令和 SIMD 指令,項目就成功了一大半。

image.png

2.5 整體思路

目標是識別全部 X86 彙編,自動翻譯(大多數場景且性能儘可能不衰減)。

在開始時,對於經常使用的指令進行翻譯,然後隨着用戶規模的擴大和使用量的增長,根據用戶需求,逐步加入用戶所須要的指令。

第一個技術點:自動化

第二個技術點:技術複用

總體技術架構面向將來,擁有生命力。全部就有了下列設計原則

設計原則

  • 使用便利 - 一鍵遷移
  • 可擴展性 - 翻譯範圍
  • 可維護性 - 源碼翻譯
  • 架構重用 - 不一樣場景
  • 技術複用 - 不造輪子

2.6 整體設計

W + 二

「二」,直接翻譯,實現從 X86-64 → AArch64

「W」,庖丁解牛,雖然操做較爲複雜,可是利用編譯技術的現有能力,加以改造爲翻譯所用,實現翻譯效率最優化。依據上文所述彙編複雜特性以及平臺便捷化目標,產生如下設計原則和設計方案

設計原則

  • 彙編樣式複雜
  • 平臺間差別大
  • 目標要求很高

設計方案

  • 能用則用
  • 需改盡改
  • 當快則快
  • 曲折前行

3、彙編自動翻譯部分技術

3.1 嵌入彙編的識別

對於全彙編,識別方式較爲簡單,經過文件的後綴便可識別彙編文件,問題在於嵌入彙編的識別。咱們使用 Clang-Tidy 編譯技術實現該目標。

Clang-Tidy:基於 LLVM 的靜態語法檢查框架,提供語法(AST)解析能力。

基於 Clang-Tidy 工具集拓展彙編識別和替換規則,使得 AST 關鍵節點暴露。定位彙編代碼後便可隨心所欲,進行翻譯處理。

識別流程圖以下:
image.png

下面給出一個小案例:
image.png

image.png

3.2 簡單嵌入彙編的自動翻譯

基於規則的自動翻譯,即經過某種特徵匹配規則識別和轉換相應的代碼。

1.指令操做數映射

2.彙編語句特徵分析(綁定步驟 1)

3.規則庫規則匹配(綁定步驟 2)

4.根據規則進行代碼翻譯
image.png

​首先對彙編語句進行語法解析,解析完之後能夠獲得各個特徵,再在規則庫中進行特徵規則匹配,即與語法結構進行匹配,在規則進行轉換時,相對應的語法結構也進行轉換,二者合一,即代碼翻譯完成。

image.png

3.3 複雜彙編的自動翻譯

對於複雜彙編,指令條數多,語法結構複雜,變幻無窮,也可能存在外部引用等問題。

1.指令組合沒法窮舉

2.彙編模塊引用外部變量

3.消除平臺間調用差別

4.SIMD 指令對等翻譯

image.png

​上文中「W + 二」設計結構在複雜彙編翻譯中發揮重要做用。下「一」進行 SIMD 直接翻譯。

image.png

3.4 彙編翻譯舉例

將 X86-64 一鍵翻譯爲 AArch64,而且提供兩種方案,舊的路徑依舊能夠在 X86 上執行,沒有任何問題,而且建立的新分支能夠運行在 Kunpeng 平臺上。生成代碼後,能夠一鍵替換掉舊代碼。提供一個 main 函數,能夠看做一個驅動,測試驅動能夠在 X86 和 Kunpeng 平臺同時運行。運行結果一致。保留 X86 平臺的兼容性,代碼在不一樣的平臺運行能夠保持 100%的兼容和正確。

簡單彙編翻譯:

image.png

​複雜彙編翻譯:

image.png

​天啦,這也太快了。朋友們,趕忙下載使用吧,一鍵翻譯,遷移你的應用至鯤鵬平臺。衝起來!

4、體驗設計

Kunpeng DevKit 功能強大,使用優雅。採用超級方便的一站式解決方案,幫助開發者加速軟件開發、遷移和算力升級。一站式開發套件、全流程效率提高。一站式遷移、編譯、測試、分析。

image.png

4.1 應用遷移體驗設計

開發者依照我的經驗和習慣能夠大體分爲三類:

經驗較少的用戶,重度依賴自動化,但願全自動化遷移

有必定經驗,合理依賴自動化,但願本身主要遷移過程

經驗豐富,淺度依賴自動化,本身純手工遷移

image.png

​鯤鵬 DevKit 針對上述三種不一樣類型的用戶,作了大量產品體驗層的設計。

第一類開發者,經過系統全面自動化能力,作到無感知遷移。提供動態二進制翻譯工具,自動的將 X86 平臺指令集翻譯成 Kunpeng 平臺指令集。整個過程透明、全自動,無需額外工做,整個應用便可應用在 Kunpeng 平臺上。

image.png

​第二類開發者,但願參與整個應用遷移的過程和環節中,瞭解翻譯過程。鯤鵬 DevKit 自動識別問題、提供建議輔助決策、提供替換代碼─鍵修改,極簡體驗。

image.png

第三類開發者,可能存在開發者認爲自動化重構是一個黑盒子,不可信任,在這方面,困 DevKit 提供了透明展現等內容,使得用戶相信,該工具是安全的。
image.png

4.2 性能調優體驗設計

設計架構時,將人的思想行爲融入其中,使得工具的使用更加天然化、更加符合人類認知的思考,從總體到局部,從宏觀到微觀。

image.png

4.3 小例子

舉幾個小例子能夠說明上述體驗設計,一個是硬件調優 3D 可視化,基於認知模型、表現模型極簡抽象,從物理世界到虛擬世界的映射。

image.png

​第二個例子是性能分析時,進程/線程擁塞的直觀可視化。
image.png

在系統設計時,運行大量的信息可視化表達,一目瞭然,清晰可見,優雅體驗。
image.png

5、總結

無需多言,一圖流歸納!

image.png

​鯤鵬 DevKit 產品從設計到功能都是極好的,能夠發現爲了鯤鵬的發展和壯大,華爲在此花了不少心思,但願各位開發者朋友們多多嘗試,或許鯤鵬比你我想象的更增強大、友好、便利。

「北冥有魚,其名爲鯤。鯤之大,不知其幾千裏也。化而爲鳥,其名爲鵬。鵬之背,不知其幾千裏也;怒而飛,其翼若垂天之雲。」

點擊關注,第一時間瞭解華爲雲新鮮技術~

相關文章
相關標籤/搜索