* 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>