AVX2KI介绍
简介
AVX2KI(Avx To Kunpeng Intrinsic)是Intel Intrinsics指令函数的Arm实现的一款接口集合库,将传统平台的Intrinsic接口集合使用鲲鹏指令重新实现,并封装为独立的接口模块(C语言头文件方式),以减少大量迁移项目重复开发的工作量。用户可以通过将头文件导入应用程序继续使用传统平台的Intrinsic函数。
AVX2KI面向ARM/AArch64平台的x86 SIMD intrinsic兼容层实现。它通过NEON、SVE 256-bit和SVE 512-bit后端,为使用Intel风格intrinsic接口的代码提供迁移基础,帮助业务在鲲鹏ARM平台上以较小源码改动完成编译和运行适配。
从当前仓库的公开头文件和实现代码来看,AVX2KI的定位主要包括:
- 提供
__m64、__m128、__m128i、__m128d以及更宽向量类型的兼容定义。 - 提供大量
_mm_*、_mm256_*、_mm512_*风格接口声明与实现。 - 提供C++场景下的向量操作符重载,降低迁移代码的改造成本。
- 提供版本查询接口以及功能测试、性能测试、随机测试等测试框架。
应用场景:Intel Intrinsics指令适配迁移鲲鹏处理器。
核心模块
- 类型与宏定义模块:
include/avx2ki_type.h定义向量类型、掩码类型、比较常量、状态码和版本结构体,是整个兼容层的基础。 - 核心接口模块:
include/avx2ki_core.h暴露AVX2KI_GetProductVersion,用于获取组件和软件版本信息。 - Intrinsic 声明模块:
include/avx.h声明大量x86风格intrinsic接口,是业务代码直接包含和调用的主要入口。 - C++ 操作符重载模块:
include/operatoroverload.h在ARM C++编译场景下为向量类型提供+、-、*、/按位运算等重载。 - NEON 后端模块:
src/avx2neon/提供基于ARM NEON的兼容实现,也是SVE/SVE512目标的共享基础之一。 - SVE / SVE512 后端模块:
src/avx2sve/与src/avx2sve512/在NEON公共实现上补充更宽向量后端能力。 - 公共能力模块:
src/common/提供版本实现、CPU特性、通用逻辑和公共数据结构。 - 测试模块:
test/下包含功能测试、性能测试、随机测试、对比数据与自动化脚本。
对外核心接口函数
以下内容是从公开头文件中筛选出的代表性接口示例,用于说明AVX2KI的能力范围,并非完整API列表。
| 模块分类 | 接口函数/能力 | 功能说明 |
|---|---|---|
| 版本信息 | AVX2KI_GetProductVersion |
获取产品名、组件名、组件版本、软件名和软件版本等信息。 |
| 基础向量运算 | _mm_add_epi32、_mm_sub_epi64、_mm_mul_pd、_mm_div_ps |
提供标量/向量整数与浮点运算能力。 |
| 逻辑与比较 | _mm_and_si128、_mm_or_si128、_mm_xor_si128、_mm_cmpeq_epi32 |
支持按位运算和常见比较操作。 |
| 数据搬运 | _mm_loadu_si128、_mm_storeu_si128、_mm_load_pd、_mm_store_ps |
支持常见的加载、存储和类型转换接口。 |
| 扩展向量接口 | _mm256_hadds_epi16、_mm512_mulhi_epi32、_mm512_fixupnan_ps |
提供AVX2/AVX-512风格的宽向量兼容接口。 |
| 内存接口 | _mm_malloc、_mm_free |
提供对齐内存分配与释放能力。 |
| C++易用性 | operator +、operator -、operator & 等 |
在C++下为__m64、__m128i、__m128、__m128d提供重载。 |
目录结构
# 文档目录
README.md # 项目总览
LICENSE # 仓库许可证
docs/
└── zh/
├── api_reference.md # API参考
├── installation_guide.md # 安装指南
├── quick_start.md # 快速入门
└── release_notes.md # 版本说明
# 代码目录
include/
├── avx.h # 公开 intrinsic 接口声明
├── avx2ki.h # 总入口头文件
├── avx2ki_core.h # 版本与核心接口
├── avx2ki_type.h # 类型、枚举、状态码、宏定义
└── operatoroverload.h # C++ 运算符重载
src/
├── avx2neon/ # NEON 后端实现
├── avx2sve/ # SVE 256-bit 后端实现
├── avx2sve512/ # SVE 512-bit 后端实现
├── common/ # 公共实现
├── CMakeLists.txt # 子目录构建入口
└── unsupport.txt # 当前实现文件之一
test/
├── avx2ki/ # 功能测试与性能测试用例
├── build/ # Makefile 构建入口
├── common/ # 测试公共代码
├── gtest-download/ # GoogleTest 下载脚本
├── gtest-parallel/ # 并行测试工具
└── scripts/ # 数据准备与自动化脚本
build.sh # 主构建脚本
CMakeLists.txt # 顶层 CMake 配置
config.cmake.in # 编译选项与版本配置
avx2kiver.h.in # 版本头模板版本说明书
版本对齐与当前仓库状态说明见《版本说明书》。
环境部署
编译环境、依赖准备、目标库构建与安装说明见《安装指南》。
快速入门
最小示例、版本查询和向量接口使用示例见《快速入门》。
文档
| 资源名称 | 资源简介 |
|---|---|
| 版本说明书 | 提供AVX2KI仓库的默认版本、文档更新时间和已知限制。 |
| 安装指南 | 提供AVX2KI安装的依赖、环境变量、构建命令、产物目录和安装方式。 |
| 快速入门 | 提供AVX2KI的最小编译示例、版本查询和Intrinsic调用示例。 |
| API参考 | 提供AVX2KI的主要头文件、版本结构体、状态码和代表性接口。 |
免责声明
致 AVX2KI 使用者
本软件仅供调试和开发之用,使用者需自行承担使用风险,并理解以下内容:
- 数据处理及删除:用户在使用本软件过程中产生的数据属于用户责任范畴。建议用户在使用完毕后及时删除相关数据,以防信息泄露。
- 数据保密与传播:使用者了解并同意不得将通过本软件产生的数据随意外发或传播。对于由此产生的信息泄露、数据泄露或其他不良后果,本软件及其开发者概不负责。
- 用户输入安全性:用户需自行保证输入的命令行的安全性,并承担因输入不当而导致的任何安全风险或损失。对于输入命令行不当所导致的问题,本软件及其开发者概不负责。
免责声明范围:本免责声明适用于所有使用本软件的个人或实体。使用本软件即表示您同意并接受本声明的内容,并愿意承担因使用该功能而产生的风险和责任,如有异议请停止使用本软件。
在使用本软件之前,请谨慎阅读并理解以上免责声明的内容。对于使用本软件所产生的任何问题或疑问,请及时联系开发者。
致数据所有者
如果您不希望您的数据集等信息在 AVX2KI 仓库中被提及,或希望更新相关描述,请在 GitCode 提交 issue,我们将根据您的要求删除或更新相关描述。感谢您的理解与支持。
License
本仓库代码采用 MIT License,详见 LICENSE。
除非另有说明,本文档内容与仓库代码一并发布和维护。
贡献声明
欢迎通过Issue或Pull Request反馈问题、补充测试、完善实现或改进文档。若你准备提交代码,建议在提交前至少说明以下内容:
- 目标后端:
avx2neon、avx2sve或avx2sve512 - 影响范围:头文件声明、公共实现、测试用例或性能数据
- 验证方式:功能测试、随机测试、性能测试或业务侧验证
致谢
AVX2KI代码和文档体现了 Kunpeng BoostKit相关工程实践,也依赖社区贡献者对ARM平台SIMD兼容迁移的持续投入。
感谢所有为AVX2KI提交实现、测试、问题反馈和文档改进的开发者。