295 Commits

Author SHA1 Message Date
Layla b9af93c74b Add percentile PTQ method in ncnn2table (#6854) 2026-10-09 10:33:34 +08:00
風的彷徨 c4393a13b0 pnnx: preserve batch semantics across reshape and flatten (#6934)
Co-authored-by: nihui <nihuini@tencent.com>
2026-10-08 19:08:41 +08:00
nihui 050ba22657 vulkan add shader line coverage with NCNN_COVERAGE (#7016) 2026-09-21 10:14:53 +08:00
nihui 8bc95a1e7f pnnx: store bool MemoryData attributes as raw int8 (#7006)
* pnnx: store bool MemoryData attributes as raw int8

Keep bool constants as one byte per element and select MemoryData
load_type=3. Implement the reserved raw int8 ModelBin loading mode and
pad exported bool data to four bytes so subsequent weights stay aligned.
This preserves the byte representation used by the proposed logical ops.

Add regression coverage for scalar and padded bool exports in both fp16
modes, multidimensional MemoryData, raw int8 loading through reference
and copy readers, trailing fp32 weights, and missing padding. Document
the format.

Based on the bool attribute serialization fixes proposed in:
https://github.com/Tencent/ncnn/pull/6956
https://github.com/Tencent/ncnn/pull/6866

Fixes #6855

* tools: preserve byte MemoryData when optimizing models

Save MemoryData load_type so raw int8 constants retain their byte
representation after ModelWriter saves the model. Skip fusion paths that
interpret MemoryData as float32 when its elements are not four bytes.

This change does not add bool arithmetic support or automatic type
promotion. Byte bool storage is intended for future logical, comparison
and selection operators.

Validated ncnnoptimize save and reload for scalar and one-to-five-element
bool constants in fp32 and fp16 storage modes, preserving byte values
and element size in all 12 cases.

---------

Co-authored-by: ktz03 <2484593937@qq.com>
Co-authored-by: Giulio Corradi <53930027+giuliocorradi@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 10:09:00 +08:00
nihui 5ea98309e3 layer param hardening (#7003)
* harden layer parameter validation

Original patches and author identities:
https://github.com/Tencent/ncnn/pull/6912 (beilzx)
https://github.com/Tencent/ncnn/pull/6919 (FluxMind-O)
https://github.com/Tencent/ncnn/pull/6928 (lxcxjxhx)
https://github.com/Tencent/ncnn/pull/6948 (ktz03)
https://github.com/Tencent/ncnn/pull/6950 (ktz03)
https://github.com/Tencent/ncnn/pull/6971 (LI)
https://github.com/Tencent/ncnn/pull/6974 (LI)
https://github.com/Tencent/ncnn/pull/6977 (LI)

Co-authored-by: beilzx <2069360659@qq.com>
Co-authored-by: FluxMind-O <3283918317@qq.com>
Co-authored-by: lxcxjxhx <lxcxjxhx@users.noreply.github.com>
Co-authored-by: ktz03 <2484593937@qq.com>
Co-authored-by: LI <2484593937@qq.com>
2026-09-15 19:18:46 +08:00
nihui 0cdc3351c8 harden net loading (#6989)
* Harden Net graph loading and metadata validation

Apply count and blob index validation from Tencent/ncnn PRs #6902,
#6916, #6922 and #6949 to both text and binary graph loading. Bound
header counts to 1,000,000 while preserving repeated blob references
and zero-output layers.

Validate text integer tokens and name lengths, shape hint types,
record lengths and extent arithmetic, feature masks, layer type tags,
and one-blob layer connection counts. Guard missing producers during
extraction and handle null custom layer creators.

Own partially loaded layers before reading their connections, honor
registered destroyers on all failure and CPU replacement paths, and
clear stale graph metadata when reloading or rejecting a model.

Add in-memory Net regressions for malformed and truncated inputs, valid
shape layouts, reload isolation, custom layer lifetime and external
inputs, without requiring filesystem access.
Validated with native tests, SqueezeNet inference, ASan/UBSan and
32-bit big-endian PowerPC tests; compile checked Vulkan and reduced
C++03 configurations.

Sources:
https://github.com/Tencent/ncnn/pull/6902
https://github.com/Tencent/ncnn/pull/6916
https://github.com/Tencent/ncnn/pull/6922
https://github.com/Tencent/ncnn/pull/6949

Co-authored-by: kaltsit-10 <kaltsit-10@users.noreply.github.com>
Co-authored-by: beilzx <2069360659@qq.com>
Co-authored-by: ktz03 <2484593937@qq.com>
2026-09-14 14:23:50 +08:00
nihui c0abf4830d harden paramdict parsing and typed access (#6983)
Co-authored-by: Nathan Keys <nathan.keys@pm.me>
Co-authored-by: beilzx <2069360659@qq.com>
2026-09-10 17:23:55 +08:00
nihui 60bfa40044 sdpa flash attention x86 optimization, llm models enable gqa, dispatch for avx2 bfloat2float (#6923)
* enable gqa
* update perf test
2026-09-01 17:35:42 +08:00
nihui 7f162381ab kvcache allocator (#6901)
* decode benchmark
* reject kvcache batch
* enable mha vulkan gemm out_elempack 1
2026-08-17 15:44:30 +08:00
nihui c189d88a8d modelbin bf16 storage type (#6900)
* fix modelwriter on big-endian
2026-08-13 17:19:50 +08:00
nihui a2d60e2b37 fix fp16sa shader compiler error on device without int64, move ncnn glsl macro definitions to ncnn_glsl_ext.comp (#6895)
* workaround vs2017 illegal instruction
* workaround vs2017 abs512 mis-compile
2026-08-10 14:26:43 +08:00
nihui 92b73d6665 x86/arm/mips/loongarch/riscv gemm block quantization optimization (#6831)
* benchncnn_llm int8 models
2026-08-04 14:34:22 +08:00
nihui f74639deeb gemm block quantization infrastructure for llm decoder style (#6814)
* another mha oob read
2026-07-13 10:13:39 +08:00
nihui f6f734f44d vulkan int8 kernels (#6751)
* vulkan: add int8 kernels for core layers
Implement Vulkan int8 paths for convolution, convolutiondepthwise, innerproduct, and gemm with scalar fallback and integer dot product shader branches. Add goal.md and enable existing int8 unit tests for Vulkan coverage.
* enable int8 gpu benchmark
2026-06-17 17:39:49 +08:00
securekim cb137e07dc docs: add guide for AHB zero-copy input on Android (#6733)
* docs: add guide for AHB zero-copy input on Android

Address #5531 - the AHB import API (VkAndroidHardwareBufferImageAllocator,
ImportAndroidHardwareBufferPipeline) has no user-facing docs today and
existing users hit linker errors against the official prebuilt because
build-android.cmd targets -DANDROID_PLATFORM=android-21 which strips the
AHB symbols.

The new page covers build prerequisites (__ANDROID_API__ >= 26),
AImageReader_newWithUsage setup, the per-frame call sequence, per-AHB-
pointer pipeline caching (~5000x setup-cost reduction), and trouble-
shooting for #5531 / #5190.

* docs(ahb): add ex.input(VkMat) format-matching caveat + soften cache bound

Two findings from a follow-up spike on Adreno 830:

- ex.input(VkMat) does NOT auto-convert format. The previous draft's hint
  "// ex.input(\"data\", dst, cmd);" actually crashes if the network was
  loaded with use_fp16_storage / use_fp16_packed (common on Vulkan path) -
  NetPrivate::forward_layer recurses on itself looking for an implicit
  converter that doesn't exist, observed as a ~180-frame stack overflow at
  net.cpp:251. Add a dedicated caveat explaining the failure mode and the
  vkdev->convert_packing workaround, and weaken the snippet hint accordingly.

- AImageReader's AHB pool isn't strictly bounded by maxImages. Under steady
  state it stays at maxImages (3 -> 3 cache_n in 36 consecutive cycles), but
  surface/focus events can transiently push it higher (observed cache_n=7
  with maxImages=3 in one run). Soften the "<= maxImages entries" claim.

* docs(ahb): note cross-vendor validation (Adreno + Mali)

Same import path verified end-to-end on:
  - Adreno 830, Vulkan 1.3.284 (Galaxy S25 Ultra)
  - Mali-G925 Immortalis MC12, Vulkan 1.3.278 (Galaxy Tab S11)

Both report VK_ANDROID_external_memory_android_hardware_buffer spec
version 5 and surface AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 AHBs from the
camera HAL. Only auxiliary usage bits differ between vendors and are
not consumed by this path (Adreno: 0x20103, Mali: 0x20133).
2026-05-25 16:12:29 +08:00
nihui 706c4d1964 support 4d mat in more operators (#6737)
Add 4d Mat handling across generic and optimized backends, extend operator tests, and document supported input and output Mat dimensions.
2026-05-22 15:31:01 +08:00
nihui 5f41567534 Remove outdated msa.h workaround instructions (#6734)
Removed workaround instructions for msa.h header for gcc version < 8.5.
2026-05-21 19:47:44 +08:00
Layla 3724d10fc8 tools:Move Embed/MHA/RNN/LSTM/GRU weight scale generation to ncnn2table (#6688)
Co-authored-by: nihui <nihuini@tencent.com>
2026-05-18 19:38:07 +08:00
nihui 20a654e05f refactor bf16 logic to work around ohos clang crash on aarch64 (#6725)
* Refactor BF16 conversion to use float32_to_bfloat16
* Fix image URL and update build instructions in README
* Remove NCNN_SIMPLEOMP option from workflow
* Update build instructions in how-to-build.md
2026-05-15 14:08:42 +08:00
nihui 8c18666821 feat(vulkan): persist pipeline cache (#6702)
Add single-file Vulkan pipeline cache save/load support with strict device, driver, shader, and payload validation. Cache compiled SPIR-V per shader hash alongside the driver pipeline cache blob, add focused cache tests, and document the current Vulkan pipeline cache architecture and usage.

Limit Vulkan layer test cache growth with a shared test-only pipeline cache window so repeated test_layer() calls can still exercise cache reuse.

Co-authored-by: futz12 <56149058+futz12@users.noreply.github.com>

Co-authored-by: CLV-Iclucia <89170890+CLV-Iclucia@users.noreply.github.com>
2026-05-09 09:37:06 +08:00
Benson Muite 020b8b0123 Indicate correct build dependencies for RHEL/Centos (#6692) 2026-04-22 15:11:05 +08:00
風的彷徨 c0f138e466 update docs for new convertmodel website (#6617) 2026-03-30 10:21:56 +08:00
nihui e5e09d5ee3 readonly mappedfile wrapper class, use_mapped_model_loading option (#6537)
* test mmap loading
2026-02-09 22:15:51 +08:00
nihui 526e5e65ef unroll 4x4 for gemm and sdpa vulkan, vectorize a and b loading, avoid bank conflict (#6524)
* unroll 4x4 for vulkan gemm, vectorize loading a and b
* unroll 4x4 for vulkan sdpa, vectorize loading a and b, avoid bank conflict
* Update glsl-extension.md
* Update glsl-extension.zh.md
* gemm vulkan subgroup optimization

* apply code-format changes

* enable it

---------

Co-authored-by: nihui <171016+nihui@users.noreply.github.com>
2026-01-28 13:55:23 +08:00
nihui fe7c0cd2ec dynamic vulkan loading on apple platforms, honor VK_DRIVER_FILES env (#6499) 2026-01-11 19:54:54 +08:00
Sophon 41187d42b0 simplevk: add qcvkarm64xum.dll from qualcomm windows driver (#6502) 2026-01-11 17:36:28 +08:00
nihui c7f2ab1ebb doc print VkMat content (#6290) 2026-01-06 16:47:10 +08:00
RoachZhao 01d9ece3e4 Update build instructions to include 'make install' (#6363)
Added 'make install' command to build instructions for AArch32 and AArch64 targets.
2026-01-06 16:45:09 +08:00
nihui 419db5e04d net load api wchar_t version (#6491) 2026-01-06 15:33:26 +08:00
nihui 6499fc0348 vulkan bf16 infrastructure (#6469)
* skip gpu bf16 winograd
* update doc
2026-01-04 19:34:50 +08:00
nihui 32414ba787 fix windows xp clang ci, unify xp workflow file (#6435) 2025-12-02 10:46:36 +08:00
nihui 82af4a113c cmake NCNN_WINXP option, do not define _WIN32_WINNT macro (#6430) 2025-11-28 20:24:25 +08:00
nihui 430b3124a7 fix ncnn2int8 top_blob int8 scales saving for dequant only style (#6425) 2025-11-26 17:31:57 +08:00
nihui 559a8e8cb0 rotaryembed layer (#6407)
* add deepseek_v3 attention test
* fuse non interleaved rotary embed
* fuse t5 layernorm without gamma
* test qwen2 attention
* sdpa pattern ++
2025-11-19 17:28:08 +08:00
nihui 11fb99795b sdpa kvcache (#6405) 2025-11-18 11:05:27 +08:00
nihui 641a3e5be8 ncnn sdpa layer (#6397)
* fuse gqa
2025-11-11 11:14:04 +08:00
nihui 63a7a8a590 optional layer support any packing (#6392)
* split gemm tests, enable gemm vulkan any packing
2025-11-07 14:23:53 +08:00
nihui 3ab4b58d1d optional layer support vulkan packing (#6389)
* pyncnn expose layer support vulkan packing
* doc layer support behavior
2025-11-05 16:27:23 +08:00
nihui adee6a0a53 multiheadattention kvcache (#6333)
* skip input layer forward
* unified kvcache layout
* mha kvcache test
2025-10-15 14:19:57 +08:00
nihui 414666a6d1 doc supported onnx operators (#6327) 2025-09-23 19:41:06 +08:00
nihui a6eda68f23 disable onnx2ncnn build (#6324)
Migrate most of onnx2ncnn functions to pnnx
2025-09-23 19:06:07 +08:00
nihui a514cf5e9c drop deprecated ex.set_num_threads and ex.set_vulkan_compute api (#6307) 2025-09-09 19:07:43 +08:00
nihui b5bc05e2e8 drop vulkan shader pack8 (#6270) 2025-08-22 11:05:59 +08:00
Willaaaaaaa c112480451 fix(doc): esp32 build (#6254) 2025-08-17 15:17:05 +08:00
nihui 9b91fe5153 implement flip layer and pnnx torch.flip conversion (#6233)
Co-authored-by: 佰阅 <43716063+Baiyuetribe@users.noreply.github.com>
2025-08-06 14:49:16 +08:00
Copilot 4644540ea4 Add Windows XP support merging PRs #6176 and #6177 (#6204)
Co-authored-by: Sugar-Baby <87747602+Sugar-Baby@users.noreply.github.com>
Co-authored-by: AtomAlpaca <66774326+AtomAlpaca@users.noreply.github.com>
2025-07-24 15:45:02 +08:00
GIBEREZ 44982d0d23 About the update to the GLSL documentation after the image functions are deprecated (#6173) 2025-07-12 14:22:30 +08:00
Christopher 260f493ada add cross toolchain cmake config of AK3918(AK) and SS928(hisi) (#6164) 2025-07-10 19:23:45 +08:00
chri321 4c72f52954 docs: update Chinese glsl-extension documentation (#6162)
- synchronize the latest English content to the Chinese documentation
- correct spelling errors in the English version of glsl-extention
- Fix spelling 'enable_validation_layer' in src/gpu.cpp
2025-07-10 14:21:34 +08:00
nihui bd0b111775 vulkan tight fp16p pack1 (#6127) 2025-06-16 23:09:35 +08:00