riscv: add int8 convolution im2col gemm (#7090)
- riscv: add tiled int8 convolution im2col gemm
Pack weights and input in cache-sized M/N/K tiles with a 1x1 input shortcut. Use vector-length-agnostic 8/4/2/1-position microkernels with signed widening accumulation, including an XTheadVector-compatible path.
Reuse bounded per-worker input panels across output-channel tiles and keep split-K partial sums in the existing int32 output. Wire the GEMM option into the int8 pipeline while retaining direct convolution and existing requantization, dequantization and activation handling.
Add focused tests for actual pipeline selection, packing, tails, split-K accumulation, full-range int8 values and thread-count changes.
- riscv: fix int8 convolution split-K test sizing
A tile balanced for a large artificial K can be smaller than the cache limit. Choosing that tile size plus one does not guarantee that the actual test shape splits K, as exposed by the C907 and C908 CI jobs.
Query the tiler for each actual candidate K and grow the candidate until it spans multiple panels. Keep the transformed-weight K-row assertion and numerical checks, and report a missing split separately from an incorrect pipeline selection.
riscv: write int8 convolution gemm blocks explicitly
riscv: separate full int8 gemm channel blocks and tails
riscv: widen int8 convolution gemm to m4 accumulators
apply code-format changes
riscv: keep int8 convolution partial sums in packed tiles
riscv: align int8 convolution gemm helpers with ncnn style
apply code-format changes
riscv: unify int8 convolution gemm channel loops
riscv: reduce int8 im2col indexing and single-k tile overhead
riscv: use scalar 2x2 int8 gemm and consolidate convolution tests
mips, loongarch: fix packed int8 im2col K tile offsets
Co-authored-by: nihui 171016+nihui@users.noreply.github.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
ncnn
ncnn is a high-performance neural network inference framework optimized for mobile, embedded, and desktop deployment. It has no third-party runtime dependencies, runs across CPU and Vulkan GPU backends, and provides tools such as pnnx for converting PyTorch and ONNX models to ncnn. Developers can deploy deep learning models efficiently on phones, PCs, browsers, and edge devices. ncnn is currently being used in many Tencent applications, such as QQ, Qzone, WeChat, Pitu, and so on.
ncnn 是一个面向移动端、嵌入式和桌面端部署优化的高性能神经网络推理框架。 ncnn 无第三方运行时依赖,支持 CPU 和 Vulkan GPU 后端,并提供 pnnx 等工具将 PyTorch 和 ONNX 模型转换为 ncnn 模型。 基于 ncnn,开发者可以将深度学习模型高效部署到手机、PC、浏览器和边缘设备上。 ncnn 目前已在腾讯多款应用中使用,如:QQ,Qzone,微信,天天 P 图等。
Quick Start
The recommended beginner path is PyTorch -> pnnx -> ncnn.
Install pnnx in a PyTorch environment
Export a PyTorch model to ncnn
This generates
model.ncnn.paramandmodel.ncnn.bin.Run with ncnn C++ API
Or use Python
See pnnx, use ncnn with PyTorch or ONNX, Python API, and examples for complete workflows.
Community
637093648 (超多大佬)
答案:卷卷卷卷卷(已满)
https://t.me/ncnnyes
https://discord.gg/YRsxgmF
677104663 (超多大佬)
答案:multi-level intermediate representation
818998520 (新群!)
Download & Build status
https://github.com/Tencent/ncnn/releases/latest
how to build ncnn library on Linux / Windows / macOS / Raspberry Pi3, Pi4 / POWER / Android / NVIDIA Jetson / iOS / WebAssembly / AllWinner D1 / Loongson 2K1000
Build
Use the prebuilt packages above when possible. To build from source, see the full how to build ncnn library guide for Linux, Windows, macOS, Android, iOS, WebAssembly, HarmonyOS, Raspberry Pi, Jetson, and embedded targets.
Common Linux build:
Model Conversion
pnnx.export(model, "model.pt", (input_tensor,))orpnnx model.pt inputshape=[...]pnnx model.onnxncnnoptimize model.param model.bin new.param new.bin flagUse Netron to inspect
.param,.onnx, and.pnnx.paramgraphs.Features
.paramand.binmodels.Model and Workload Coverage
ncnn is still strong for classic and mobile CNN workloads, but current usage is broader than CNN-only deployment.
For operator-level detail, see supported PyTorch operator status, supported ONNX operator status, and operation param weight table.
Project Examples
Documentation And FAQ
License
BSD 3 Clause