项目简介
本项目包含两部分核心功能。一方面基于C++的gemmlowp库,它是轻量级、自包含的低精度通用矩阵乘法(GEMM)库,并非完整线性代数库,具备跨平台特性,特定架构有优化代码路径。另一方面是基于Python的ARM汇编代码编码工具,可将特定汇编指令(如udot和sdot向量操作)转换为机器代码编码,有助于在不支持某些新指令的工具链上编译汇编代码。
项目的主要特性和功能
gemmlowp库
- 专注通用矩阵乘法,提供低精度计算功能。
- 可移植性良好,支持有C++11和POSIX支持的平台,针对ARM NEON、Intel x86 SSE 4.1等特定架构有优化代码路径。
- 纯头文件库,无需链接,使用方便。
- 提供详细使用文档和量化矩阵乘法示例。
- 有单元测试、基准测试和简单的采样分析工具。
ARM汇编代码编码工具
- 能将udot和sdot的向量和元素操作编码为机器代码,保留在汇编代码中。
- 保留原始代码作为注释,方便查看和调试。
- 具备错误处理机制,编码出错时以状态码1退出并输出错误信息。
安装使用步骤
gemmlowp库
- 手动编译:gemmlowp是纯头文件库,无需构建。对于Android开发,可使用
scripts/test-android.sh
脚本在设备上构建和运行程序。编译x86代码时,需向编译器传递-msse4.1
或-march=native
参数。 - 使用Bazel编译:在父目录创建空的
WORKSPACE
文件,然后运行bazel build gemmlowp:all
。 - 测试:可手动编译运行
test/test.cc
进行测试,也可使用Bazel运行bazel test gemmlowp:all
。 - 基准测试:编译运行
test/benchmark.cc
,建议使用-DNDEBUG
禁用断言。 - 分析:若定义
GEMMLOWP_TEST_PROFILE
,基准测试将启用分析功能。
ARM汇编代码编码工具
- 确保已安装Python。
- 下载本项目的源码文件。
- 在命令行中,导航到源码文件的目录,并运行
encode.py
脚本。 encode.py
脚本从标准输入读取ARM汇编代码,并将处理后的代码写入标准输出。例如:cat input.s | python encode.py
。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】