山西鯤鵬訓練營】從應用遷移到平臺微認證:技術干貨深度解讀

      網友投稿 702 2022-05-30

      8 月 27 日,華為 DevRun 開發者沙龍來到太原,在山西轉型綜合改革示范區管委會一層西廳會議室舉辦了“山西鯤鵬開發訓練營”活動。本次鯤鵬開發訓練營是在山西省工信廳和山西綜改示范區管委會創新發展部的指導下,由山西鯤鵬生態創新中心舉辦的鯤鵬技術賦能活動。訓練營主要分為鯤鵬生態介紹、鯤鵬應用代碼遷移指導、C/C++和 Java 代碼遷移沙箱實踐及微認證幾大環節。

      鯤鵬生態概況介紹

      山西鯤鵬生態創新中心 COO 于超為與會者介紹了鯤鵬生態的發展現狀。于超提到,今天的人類社會正在迎來第四次工業革命,其代表性產業就是智能技術。在這一領域,華為鯤鵬芯片以 ARM 技術路線為主,在高性能計算、安全可靠和開放生態方面持續演進。鯤鵬架構在大數據、數據庫、云服務、分布式存儲和原生應用等場景已經有了規模化商業應用。華為鯤鵬秉持硬件開放、軟件開源、使能合作伙伴的理念,為各行業提供“鯤鵬芯片+昇騰 AI”的多樣化算力支撐,建設鯤鵬計算產業生態。

      目前,全國已有 800 多家廠商和 2000 多個方案通過了鯤鵬生態認證。華為已與全國各省市政府部門合作,建設了 18 個鯤鵬生態創新中心。今年 7 月剛剛落成的山西鯤鵬生態創新中心是山西省信創產業“一號工程”中的重要環節,旨在為參加鯤鵬生態的企業和人員提供各種專業化服務,共同推進基于鯤鵬生態研發的企業應用創新及軟件項目孵化活動。通過山西鯤鵬生態創新中心的技術支持,可以全面發展山西省鯤鵬計算產業市場,提升山西本地企業的競爭力,共同打造山西省的信創產業生態和創新高地。

      未來 3-5 年,華為還計劃將 15 億美元投入高校的鯤鵬生態建設,與高等院校合作編制鯤鵬技術教材,共建師資團隊、實驗室和實訓基地,開展職業認證培訓考試等,從高校開始培養優秀的鯤鵬產業人才。

      鯤鵬代碼遷移指導

      軟件遷移是鯤鵬生態應用中的重頭環節。本期訓練營上,鯤鵬計算行業資深專家劉坤帶來了鯤鵬軟件遷移深度課程。

      鯤鵬軟件遷移概述

      計算機應用程序使用高級編程語言寫好代碼后,會通過編譯器編譯成匯編語言,再生成二進制機器碼。所謂 CPU 指令集架構是芯片底層和上層程序之間的橋梁,后者轉化為指令序列,通過指令集架構中的指令執行。

      鯤鵬處理器采用的是與 x86 指令集架構完全不同的 ARMv8 指令集,因此程序從 x86 平臺向鯤鵬平臺遷移時必須重新編譯。一般情況下,軟件遷移過程包括五大步驟:遷移準備、遷移分析、編譯遷移、性能調優和測試認證。其中最重要的步驟是編譯遷移。

      遷移準備:主要收集底層硬件和上層軟件信息,準備編譯環境(鯤鵬服務器或者OpenLab線上環境)。

      遷移分析:分析應用軟件棧,包括其使用的語言、底層OS、中間件、依賴項、編譯器、運行環境等。

      編譯遷移:這一步分為兩類,第一類是代碼遷移,例如C/C++這類編譯型語言,或Java/Python這類解釋型語言的代碼遷移;第二類是軟件包,主要是RPM包和jar包的遷移。

      性能調優:遷移完成后通過優化工作實現預期的性能目標。

      測試認證:通過測試和認證工作確保遷移質量,不達標時要尋找原因再做調優。

      為幫助開發人員降低應用的遷移門檻,華為還開發了鯤鵬軟件遷移套件,主要有分析掃描工具、遷移工具和性能調優工具三大類別。

      C/C++代碼遷移

      C/C++屬于編譯型語言,源碼編譯成可執行文件時要經過幾個步驟:首先是預處理,處理一些頭文件信息;然后生成預編譯文件,再編譯成匯編代碼;之后經過匯編過程生成目標二進制文件,最后通過鏈接過程加入 SO 等鏈接,生成可執行文件。由于 x86 與鯤鵬的指令集架構、寄存器和擴展指令集(SIMD)等底層屬性都不同,兩者的匯編代碼是不一樣的,因此跨平臺應用移植就需要編譯遷移。

      C/C++代碼工程一般分為兩類:編譯構建腳本(如 makefile、Configure 等),和源碼部分。前者遷移時主要涉及編譯選項的變化,后者要涉及編譯宏移植、builtin 函數、內聯匯編、SIMD 等。實際應用遷移中不一定要觸及所有層面,有些應用只需源碼直接編譯,或者修改一兩個編譯選項即可。應用遷移時首先獲取源碼,然后準備編譯環境,生成 Makefile 文件,對依賴的 SO 庫也做遷移處理,最后安裝部署。

      C/C++代碼遷移中的典型問題

      1.編譯選項移植。

      例如應用編譯成 64 位時,x86 平臺上使用 m64 選項,鯤鵬上則是 mabi=lp64,根據編譯文檔將有架構差異的編譯選項對等替換即可。

      2.編譯宏移植。

      編譯宏是用來識別架構平臺并選擇對應代碼分支的工具。編譯器自帶的編譯宏在 x86 下只有兩個,到鯤鵬平臺時直接替換即可;用戶自定義的編譯宏也只需根據自己的寫法自定義替換。但編譯宏替換后,如果沒有 ARM 對應的源碼分支,就需要實現對應的功能。

      3.builtin 函數移植。

      builtin 函數是編譯器內部實現的函數,需要遷移的不多,主要關注 CRC32 校驗值計算的幾個函數。

      4.內聯匯編移植。

      內聯匯編移植時有兩種方法,一種是通過匯編指令一對一替換,關鍵在于指令到指令的替換思想;另一種是通過 builtin 函數替換,根據指令的功能選擇對應的 builtin 函數。

      5.SIMD 指令遷移。

      SSE、AVX 都是 x86 平臺的 SIMD 指令,SIMD 是單指令多數據流的簡稱,可用來加快計算速度。鯤鵬平臺也有自己的 SIMD 指令,名為 Neon。x86 平臺下的 SIMD 指令遷移到鯤鵬平臺時,只需找到對應的函數替換實現即可。實踐中一般不會逐條遷移,更推薦采用開源工程的移植途徑。例如華為開源了一個工程,其中實現了大部分 SIMD 指令的替換。實踐移植時,只需將開源頭文件放到應用目錄下引用即可無感知遷移,非常方便。

      開源工程無法覆蓋到的特殊指令需要手動替換,此時就需要搜索代碼的實現原理進行替換,這一步可以請華為的工程師幫助。

      為了簡化應用遷移工作,華為還開發了 Porting Advisor 工具。它首先會掃描編譯構建腳本源碼,識別遷移可能涉及的問題;然后根據已有的遷移問題數據庫對檢測出來的問題給出指導,避免重復工作。前文提到的各類移植問題大都能在工具給出的遷移報告中有對應,按照指導操作即可。

      Java/Python 代碼遷移

      Java/Python 是解釋型語言,涉及的移植問題并不多見。Java 應用開發時,安裝完 JDK 后用 JDK 填碼,通過 Java 編譯器編譯生成字節碼文件,根據需要打包一些資源庫生成 jar 包,然后上傳環境部署運行。Java 應用遷移時主要有兩個步驟:

      重新安裝JDK,例如x86下的Oracle JDK在鯤鵬平臺上不支持,推薦使用OpenJDK替換。經典版本直接從軟件源安裝即可,也可以自行編譯JDK源碼。

      SO庫需要重編譯。通過Porting Advisor工具掃描jar包,找出x86平臺的SO庫,之后對其進行移植生成鯤鵬平臺的SO,再重新打包即可。

      Python 代碼移植的情況類似,也包括運行環境和 SO 庫的遷移。運行環境的遷移沒有難點,SO 庫的遷移與 Java 的步驟是一樣的。

      Maven 軟件倉構建

      Maven 是常用的開源軟件構建工具。Maven 倉庫主要存放 jar 包,包括本地、遠程和中央倉庫三種類型。遠程倉庫是企業內部或第三方組織搭建的服務器,中央倉庫是 Maven 團隊自己設置的倉庫。

      Maven 倉庫默認的 jar 包搜索順序是本地-遠程-中央,找到需要的 jar 包就拉取下來執行構建。但如果拉取下來的是包含 x86 平臺依賴項的 jar 包,在鯤鵬平臺上構建運行就會出錯,還需要再分析掃描、打包編譯等操作,過程比較繁瑣。

      為了簡化操作,華為開發了鯤鵬專屬的 Maven 倉庫,包含常見的 jar 包移植版本。開發人員只需將 Maven 倉庫的 XMR 配置文件改為優先搜索鯤鵬 Maven 倉就能快速找到鯤鵬平臺的對應 jar 包,精簡遷移過程,減少 Java 遷移的工作量。

      以 Hive 編譯實例為例,使用遷移工具掃描,發現應用中有四個帶 x86 依賴項的 jar 包,那么配置好 Maven 倉之后就可以拉取對應的鯤鵬平臺 jar 包,編譯通過就可以完成移植了。

      RPM 軟件包遷移

      RPM 是 Linux 下常用的軟件包類型。RPM 包移植時本質上是移植一些二進制文件,將 x86 依賴的文件替換為鯤鵬平臺的。移植時首先尋找有沒有對應鯤鵬平臺的 RPM 包,從以下渠道嘗試獲取:

      操作系統的本地源;

      操作系統的遠端源;

      華為云鯤鵬鏡像(包含很多鯤鵬平臺上打好的RPM包);

      x86下才有的RPM包可以拆開重構,將SO、二進制文件全部替換再打包;

      所有途徑都失敗,則下載源碼重新編譯。

      【山西鯤鵬訓練營】從應用遷移到平臺微認證:技術干貨深度解讀

      RPM 包重構時,主要有掃描、編譯、打包和驗證幾個步驟。掃描找出 x86 依賴項,依賴項有對應的 jar 包實現就直接替換,否則就用源碼編譯。之后替換打包再做驗證。Porting Advisor 遷移工具提供了 RPM 包重構模塊,可以充分利用鯤鵬 Maven 倉,自動掃描并找到已有的 jar 包替換實現進行替代。但如果是 SO 文件的差異就需要手動處理。

      開發人員進行遷移工作時,可以參考鯤鵬社區、鯤鵬小智助手和開發者公眾號三個渠道的資源。鯤鵬社區中有 24 小時答疑,還有豐富的遷移、性能調優文檔以及很多問題的問答資料;鯤鵬小智助手可以方便地獲取鯤鵬平臺下具體的遷移問題指導;開發者公眾號會定期發布一些技術資料。

      遷移沙箱實踐和微認證

      沙箱實踐

      訓練營的理論遷移課程結束后,還為現場小伙伴們安排了沙箱實踐環節。沙箱環境是在線對外開放的,感興趣的開發人員也可以自行聯網嘗試。

      沙箱操作主要分三步:

      注冊華為云賬號,過程需要實名認證;

      華為云平臺有OpenLab虛擬實驗室,其中有四個沙箱實踐:C/C++、Java、軟件包和Maven倉。

      選定對應沙箱即可開始實驗,云端會分配一個虛擬機,可以完成編譯操作。開發人員可以根據網頁上的實驗手冊與指導完成實驗。

      微認證

      云端實驗室有一個微認證模塊,其中分為鯤鵬軟件遷移與性能調優兩門課程。購買認證后可以先學習課程、完成自測和實驗,最后參加考試。考試需要實名認證,考試過程中還需要調用攝像頭抓拍防止作弊,內容包括判斷、單選和多選形式。通過考試后就會在線發放微認證證書。

      本期訓練營涉及的相關社區資源鏈接匯總如下:

      內聯匯編規則參考:https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html#Using-Assembly-Language-with-C

      不同架構下差異化GCC編譯選項查詢 (gcc7.3為例):https://gcc.gnu.org/onlinedocs/gcc-7.3.0/gcc/Submodel-Options.html#Submodel-Options

      鯤鵬開發套件——Porting Advisor:https://www.huaweicloud.com/kunpeng/software/portingadvisor.html

      鯤鵬Maven倉鏈接:https://mirrors.huaweicloud.com/kunpeng/maven/

      鯤鵬社區:https://bbs.huaweicloud.com/forum/forum-923-1.html

      鯤鵬小智助手:http://ic-openlabs.huawei.com/chat/#/

      華為云端實驗室:https://lab.huaweicloud.com/

      微認證:https://edu.huaweicloud.com/certifications/

      開發者 鯤鵬

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:一篇文章帶你深入了解Dubbo分布式服務框架
      下一篇:一名老程序員的一點感悟給未來的程序員
      相關文章
      亚洲精品中文字幕麻豆| 亚洲精品国产成人中文| 亚洲精华国产精华精华液| 亚洲午夜国产精品| 亚洲美女一区二区三区| 亚洲高清在线播放| 亚洲AV无码专区电影在线观看| 亚洲韩国精品无码一区二区三区| 亚洲香蕉网久久综合影视| 亚洲人成在线播放网站| 亚洲精品无码mv在线观看网站| 亚洲综合AV在线在线播放| 亚洲一区二区三区影院 | 亚洲日韩国产精品第一页一区| 在线亚洲精品福利网址导航| 国产亚洲老熟女视频| 国产亚洲精久久久久久无码AV| 久久久久亚洲AV成人网人人网站| 亚洲精品无码99在线观看| 国产精品亚洲高清一区二区| 77777亚洲午夜久久多人| 国产精品亚洲成在人线| 国产av无码专区亚洲av桃花庵 | 亚洲乱码无人区卡1卡2卡3| 亚洲熟女www一区二区三区| 亚洲国产成人久久精品大牛影视 | 亚洲av永久无码精品网站| 亚洲91av视频| 亚洲精品美女久久久久| 亚洲乱码一二三四区乱码| 久久亚洲精品国产亚洲老地址| 亚洲精品天堂成人片AV在线播放| 亚洲AV香蕉一区区二区三区| 亚洲第一福利网站在线观看| 国产亚洲成人久久| 亚洲韩国—中文字幕| 亚洲国产精品张柏芝在线观看| 亚洲真人无码永久在线观看| 国产亚洲精品成人久久网站| 国产aⅴ无码专区亚洲av麻豆| 亚洲av永久无码精品漫画|