Huawei 華為鯤鵬 AvxToNeon 系統庫
AvxToNeon是一款介面集合庫。當使用Intrinsics介面的應用程式從傳統平臺遷移到鯤鵬計算平臺時,由於各個平臺的Intrinsic函式定義不同,需要逐一對於Intrinsic函式重新進行適配開發。針對該問題,我們提供了AVX2Neon模組,將傳統平臺的Intrinsic介面集合使用鯤鵬指令重新實現,並封裝為獨立的介面模組(C語言標頭檔案方式),以減少大量遷移專案重複開發的工作量。 使用者可以通過將標頭檔案匯入應用程式即可繼續使用傳統平臺的Intrinsic函式。
Intrinsic:這裡指的是基於gcc編譯的一種內建函式,一般是對處理器高階指令(如向量化指令等)的C行內函數格式封裝,各個處理器廠商的介面定義存在較大差異。
將依賴Intel Intrinsic的應用快速遷移到鯤鵬生態。 適配函式以標頭檔案方式整合到Porting Advisor工具,通過工具識別遷移點,並提供一鍵式快速遷移。
當將使用Intel內部指令的應用程式從x86架構移植到Kunpeng架構時,由於Arm64指令名稱和功能與x86不同,因此需要進一步開發指令。結果,導致巨大的移植工作量。在該專案中,常用的AVX指令被封裝為獨立的模組,以減少重複的開發工作量。AVX指令被相關的NEON SIMD指令替代,而指令名稱和功能保持不變。使用者可以通過將相關的標頭檔案匯入應用程式軟體來呼叫相應的指令。
要求
- 處理器:Kunpeng 920
指南
在原始碼目錄中,源目錄包含功能實現檔案。avx512intrin.h,avxintrin.h和emmintrin.h檔案實現指令翻譯,而avx2neon.h檔案包含它們的標頭檔案。如果應用程式軟體包含avx2neon.h,則使用者可以執行指令。使用標頭檔案時,使用者需要新增編譯選項,例如ARCH_CFLAGS = -march = armv8-a + fp + simd + crc。
測試
該專案還為開發人員提供了介面測試用例。測試用例的邏輯實現程式碼位於tests目錄中,而測試用例的輸入資料和預期輸出位於data目錄中。使用以下命令執行測試用例:
(1) cd tests (2) make (3) ./test
執行測試命令後,控制檯上將顯示類似以下資訊:
Running Test MM512_CASTPS128_PS512 ... Running Test MM256_SET_EPI32 AVX2NEONTest Complete: Passed 265 tests: Failed 0
此專案中提供的所有說明均已在CentOS Linux版本7.6.1810(AltArch)和EulerOS V2.0SP8,GCC 7.3,GCC 4.8.5和GCC 9.2.0中進行了驗證。