第 6 章:NCNN 源码解读 
NCNN 是一个超级轻量的框架,这意味着在不同平台上编译和使用它的代价是极低的。它很容易理解,也意味着它更灵活,很容易修改自身来适配到不同的场合下。
截至 2025 年 2 月 17 日,NCNN 项目主分支已经接收了 3372 次提交,目前也是比较火热的项目。NCNN 也是比较稳定的框架,这几年来 API 没有什么改动,说明它在设计之初顶层就做的比较好,具有前瞻性,在静态图盛行的 TensorFlow 1.x 时代能设想机具灵活性的框架,足以说明 NCNN 的优秀特征。
NCNN 项目的大致结构如下:
- .github/工作流文件,后面会讲解如何使用 GitHub 进行自动化测试,来验证自定义优化层的健壮性
- benchmark/benchmark 是用来推理性能的测试工具
- cmake/NCNN 项目的 CMake 文件和依赖的 CMake 文件
- docs/部分文档,但不是很全面
- examples/示例
- @glslang/项目- KhronosGroup/glslang,GL 着色器语言支持,用于编译 Vulkan 编写的部分着色器
- images/NCNN 的 Logo,作者手绘哦!
- python/支持生成 Python 包,使用 PyBind11 来导出接口
- src/NCNN 源代码
- tests/自动化测试样例
- toolchains/各种不同架构下的 CMake 文件
- tools/各种模型转换和优化工具的源码
NCNN 的核心代码存在于 src/ 上,所以我们下面只讲解 src/ 下面的内容。
src/ 内只有一个文件夹 layer/ 包含各种层(算子)的实现,其中 layer/ 内直接包含的文件是各种算子的基础实现,也就是没有使用任何加速指令集的、适配各种平台的实现。