Fork me on GitHub

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中进行了验证。

 

 

posted @ 2020-09-10 20:02  stardsd  阅读(1497)  评论(0编辑  收藏  举报