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中進行了驗證。