whispercpp 1.3.6 → 1.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. checksums.yaml +4 -4
  2. data/.document +3 -0
  3. data/.rdoc_options +2 -0
  4. data/README.md +43 -9
  5. data/Rakefile +18 -3
  6. data/ext/dependencies.rb +10 -4
  7. data/ext/dependencies_for_windows.rb +17 -0
  8. data/ext/extconf.rb +20 -8
  9. data/ext/options.rb +54 -14
  10. data/ext/options_for_windows.rb +51 -0
  11. data/ext/ruby_whisper.c +35 -42
  12. data/ext/ruby_whisper.h +141 -0
  13. data/ext/ruby_whisper_context.c +157 -29
  14. data/ext/ruby_whisper_log_queue.c +180 -0
  15. data/ext/ruby_whisper_log_settable.h +46 -0
  16. data/ext/ruby_whisper_parakeet.c +49 -0
  17. data/ext/ruby_whisper_parakeet_context.c +304 -0
  18. data/ext/ruby_whisper_parakeet_context_params.c +117 -0
  19. data/ext/ruby_whisper_parakeet_model.c +84 -0
  20. data/ext/ruby_whisper_parakeet_params.c +548 -0
  21. data/ext/ruby_whisper_parakeet_segment.c +157 -0
  22. data/ext/ruby_whisper_parakeet_token.c +188 -0
  23. data/ext/ruby_whisper_parakeet_transcribe.cpp +58 -0
  24. data/ext/ruby_whisper_params.c +265 -73
  25. data/ext/ruby_whisper_segment.c +6 -6
  26. data/ext/ruby_whisper_transcribe.cpp +23 -15
  27. data/ext/ruby_whisper_vad_context.c +30 -10
  28. data/ext/ruby_whisper_vad_context_detect.cpp +8 -9
  29. data/ext/ruby_whisper_vad_params.c +4 -4
  30. data/ext/ruby_whisper_vad_segment.c +2 -2
  31. data/ext/sources/CMakeLists.txt +42 -3
  32. data/ext/sources/CMakePresets.json +95 -0
  33. data/ext/sources/cmake/parakeet-config.cmake.in +30 -0
  34. data/ext/sources/cmake/parakeet.pc.in +10 -0
  35. data/ext/sources/cmake/whisper.pc.in +2 -2
  36. data/ext/sources/examples/CMakeLists.txt +4 -2
  37. data/ext/sources/examples/bench/bench.cpp +1 -1
  38. data/ext/sources/examples/cli/cli.cpp +52 -10
  39. data/ext/sources/examples/common-ggml.cpp +4 -0
  40. data/ext/sources/examples/common-whisper.cpp +139 -67
  41. data/ext/sources/examples/common-whisper.h +11 -0
  42. data/ext/sources/examples/ffmpeg-transcode.cpp +211 -341
  43. data/ext/sources/examples/parakeet-cli/CMakeLists.txt +8 -0
  44. data/ext/sources/examples/parakeet-cli/parakeet-cli.cpp +243 -0
  45. data/ext/sources/examples/parakeet-quantize/CMakeLists.txt +7 -0
  46. data/ext/sources/examples/parakeet-quantize/parakeet-quantize.cpp +230 -0
  47. data/ext/sources/examples/server/server.cpp +199 -163
  48. data/ext/sources/examples/vad-speech-segments/speech.cpp +3 -2
  49. data/ext/sources/ggml/CMakeLists.txt +21 -14
  50. data/ext/sources/ggml/cmake/FindNCCL.cmake +36 -0
  51. data/ext/sources/ggml/cmake/ggml-config.cmake.in +12 -2
  52. data/ext/sources/ggml/include/ggml-alloc.h +1 -0
  53. data/ext/sources/ggml/include/ggml-backend.h +72 -10
  54. data/ext/sources/ggml/include/ggml-cuda.h +2 -2
  55. data/ext/sources/ggml/include/ggml-rpc.h +3 -3
  56. data/ext/sources/ggml/include/ggml-sycl.h +8 -0
  57. data/ext/sources/ggml/include/ggml.h +103 -9
  58. data/ext/sources/ggml/include/gguf.h +10 -2
  59. data/ext/sources/ggml/src/CMakeLists.txt +30 -6
  60. data/ext/sources/ggml/src/ggml-alloc.c +5 -1
  61. data/ext/sources/ggml/src/ggml-backend-impl.h +22 -2
  62. data/ext/sources/ggml/src/ggml-backend-meta.cpp +2266 -0
  63. data/ext/sources/ggml/src/ggml-backend-reg.cpp +12 -0
  64. data/ext/sources/ggml/src/ggml-backend.cpp +110 -9
  65. data/ext/sources/ggml/src/ggml-blas/ggml-blas.cpp +4 -0
  66. data/ext/sources/ggml/src/ggml-cann/aclnn_ops.cpp +672 -257
  67. data/ext/sources/ggml/src/ggml-cann/aclnn_ops.h +71 -0
  68. data/ext/sources/ggml/src/ggml-cann/common.h +20 -10
  69. data/ext/sources/ggml/src/ggml-cann/ggml-cann.cpp +211 -30
  70. data/ext/sources/ggml/src/ggml-common.h +24 -2
  71. data/ext/sources/ggml/src/ggml-cpu/CMakeLists.txt +59 -30
  72. data/ext/sources/ggml/src/ggml-cpu/amx/amx.cpp +2 -0
  73. data/ext/sources/ggml/src/ggml-cpu/amx/mmq.cpp +21 -22
  74. data/ext/sources/ggml/src/ggml-cpu/arch/arm/quants.c +194 -11
  75. data/ext/sources/ggml/src/ggml-cpu/arch/arm/repack.cpp +65 -0
  76. data/ext/sources/ggml/src/ggml-cpu/arch/loongarch/quants.c +151 -1
  77. data/ext/sources/ggml/src/ggml-cpu/arch/powerpc/quants.c +0 -1
  78. data/ext/sources/ggml/src/ggml-cpu/arch/riscv/quants.c +4279 -1292
  79. data/ext/sources/ggml/src/ggml-cpu/arch/riscv/repack.cpp +5 -35
  80. data/ext/sources/ggml/src/ggml-cpu/arch/s390/quants.c +0 -1
  81. data/ext/sources/ggml/src/ggml-cpu/arch/wasm/quants.c +72 -1
  82. data/ext/sources/ggml/src/ggml-cpu/arch/x86/quants.c +319 -31
  83. data/ext/sources/ggml/src/ggml-cpu/arch/x86/repack.cpp +1 -1
  84. data/ext/sources/ggml/src/ggml-cpu/arch-fallback.h +12 -2
  85. data/ext/sources/ggml/src/ggml-cpu/cmake/FindSMTIME.cmake +32 -0
  86. data/ext/sources/ggml/src/ggml-cpu/ggml-cpu-impl.h +10 -0
  87. data/ext/sources/ggml/src/ggml-cpu/ggml-cpu.c +109 -5
  88. data/ext/sources/ggml/src/ggml-cpu/ggml-cpu.cpp +2 -0
  89. data/ext/sources/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +146 -134
  90. data/ext/sources/ggml/src/ggml-cpu/llamafile/sgemm.cpp +107 -82
  91. data/ext/sources/ggml/src/ggml-cpu/ops.cpp +501 -119
  92. data/ext/sources/ggml/src/ggml-cpu/ops.h +3 -0
  93. data/ext/sources/ggml/src/ggml-cpu/quants.c +106 -0
  94. data/ext/sources/ggml/src/ggml-cpu/quants.h +6 -0
  95. data/ext/sources/ggml/src/ggml-cpu/repack.cpp +3 -0
  96. data/ext/sources/ggml/src/ggml-cpu/simd-gemm.h +91 -1
  97. data/ext/sources/ggml/src/ggml-cpu/simd-mappings.h +14 -16
  98. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime.cpp +1402 -687
  99. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime.h +8 -0
  100. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime1_kernels.cpp +597 -2766
  101. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime2_kernels.cpp +5768 -0
  102. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime_env.cpp +320 -0
  103. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime_env.h +55 -0
  104. data/ext/sources/ggml/src/ggml-cpu/spacemit/ime_kernels.h +182 -19
  105. data/ext/sources/ggml/src/ggml-cpu/spacemit/repack.cpp +1795 -0
  106. data/ext/sources/ggml/src/ggml-cpu/spacemit/repack.h +14 -0
  107. data/ext/sources/ggml/src/ggml-cpu/spacemit/rvv_kernels.cpp +3178 -0
  108. data/ext/sources/ggml/src/ggml-cpu/spacemit/rvv_kernels.h +95 -0
  109. data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_barrier.h +34 -0
  110. data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_mem_pool.cpp +760 -0
  111. data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_mem_pool.h +32 -0
  112. data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_tcm.h +409 -0
  113. data/ext/sources/ggml/src/ggml-cpu/vec.cpp +39 -55
  114. data/ext/sources/ggml/src/ggml-cpu/vec.h +225 -240
  115. data/ext/sources/ggml/src/ggml-cuda/CMakeLists.txt +17 -7
  116. data/ext/sources/ggml/src/ggml-cuda/allreduce.cu +971 -0
  117. data/ext/sources/ggml/src/ggml-cuda/allreduce.cuh +29 -0
  118. data/ext/sources/ggml/src/ggml-cuda/argsort.cu +62 -26
  119. data/ext/sources/ggml/src/ggml-cuda/binbcast.cu +134 -64
  120. data/ext/sources/ggml/src/ggml-cuda/binbcast.cuh +1 -0
  121. data/ext/sources/ggml/src/ggml-cuda/col2im-1d.cu +81 -0
  122. data/ext/sources/ggml/src/ggml-cuda/col2im-1d.cuh +3 -0
  123. data/ext/sources/ggml/src/ggml-cuda/common.cuh +246 -28
  124. data/ext/sources/ggml/src/ggml-cuda/concat.cu +134 -116
  125. data/ext/sources/ggml/src/ggml-cuda/conv-transpose-1d.cu +14 -12
  126. data/ext/sources/ggml/src/ggml-cuda/conv2d-transpose.cu +45 -21
  127. data/ext/sources/ggml/src/ggml-cuda/conv2d-transpose.cuh +1 -0
  128. data/ext/sources/ggml/src/ggml-cuda/convert.cu +139 -34
  129. data/ext/sources/ggml/src/ggml-cuda/convert.cuh +10 -0
  130. data/ext/sources/ggml/src/ggml-cuda/cpy.cu +88 -29
  131. data/ext/sources/ggml/src/ggml-cuda/dequantize.cuh +22 -0
  132. data/ext/sources/ggml/src/ggml-cuda/fattn-common.cuh +287 -49
  133. data/ext/sources/ggml/src/ggml-cuda/fattn-mma-f16.cuh +335 -130
  134. data/ext/sources/ggml/src/ggml-cuda/fattn-tile.cu +12 -0
  135. data/ext/sources/ggml/src/ggml-cuda/fattn-tile.cuh +127 -24
  136. data/ext/sources/ggml/src/ggml-cuda/fattn-vec.cuh +40 -15
  137. data/ext/sources/ggml/src/ggml-cuda/fattn-wmma-f16.cu +18 -9
  138. data/ext/sources/ggml/src/ggml-cuda/fattn.cu +169 -60
  139. data/ext/sources/ggml/src/ggml-cuda/fattn.cuh +2 -0
  140. data/ext/sources/ggml/src/ggml-cuda/fwht.cu +101 -0
  141. data/ext/sources/ggml/src/ggml-cuda/fwht.cuh +4 -0
  142. data/ext/sources/ggml/src/ggml-cuda/gated_delta_net.cu +109 -45
  143. data/ext/sources/ggml/src/ggml-cuda/gated_delta_net.cuh +10 -0
  144. data/ext/sources/ggml/src/ggml-cuda/getrows.cu +48 -23
  145. data/ext/sources/ggml/src/ggml-cuda/ggml-cuda.cu +2034 -2104
  146. data/ext/sources/ggml/src/ggml-cuda/im2col.cu +32 -29
  147. data/ext/sources/ggml/src/ggml-cuda/mean.cu +4 -2
  148. data/ext/sources/ggml/src/ggml-cuda/mma.cuh +242 -195
  149. data/ext/sources/ggml/src/ggml-cuda/mmf.cuh +3 -3
  150. data/ext/sources/ggml/src/ggml-cuda/mmq.cu +25 -12
  151. data/ext/sources/ggml/src/ggml-cuda/mmq.cuh +502 -423
  152. data/ext/sources/ggml/src/ggml-cuda/mmvf.cu +19 -12
  153. data/ext/sources/ggml/src/ggml-cuda/mmvq.cu +562 -97
  154. data/ext/sources/ggml/src/ggml-cuda/mmvq.cuh +6 -1
  155. data/ext/sources/ggml/src/ggml-cuda/norm.cu +36 -10
  156. data/ext/sources/ggml/src/ggml-cuda/out-prod.cu +66 -7
  157. data/ext/sources/ggml/src/ggml-cuda/quantize.cu +133 -26
  158. data/ext/sources/ggml/src/ggml-cuda/quantize.cuh +1 -1
  159. data/ext/sources/ggml/src/ggml-cuda/reduce_rows.cuh +5 -1
  160. data/ext/sources/ggml/src/ggml-cuda/rope.cu +11 -4
  161. data/ext/sources/ggml/src/ggml-cuda/scale.cu +4 -1
  162. data/ext/sources/ggml/src/ggml-cuda/set-rows.cu +78 -10
  163. data/ext/sources/ggml/src/ggml-cuda/snake.cu +72 -0
  164. data/ext/sources/ggml/src/ggml-cuda/snake.cuh +8 -0
  165. data/ext/sources/ggml/src/ggml-cuda/softcap.cu +4 -1
  166. data/ext/sources/ggml/src/ggml-cuda/ssm-conv.cu +45 -13
  167. data/ext/sources/ggml/src/ggml-cuda/ssm-conv.cuh +1 -1
  168. data/ext/sources/ggml/src/ggml-cuda/ssm-scan.cu +40 -18
  169. data/ext/sources/ggml/src/ggml-cuda/sumrows.cu +8 -4
  170. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_16.cu +1 -0
  171. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu +1 -0
  172. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_8.cu +2 -0
  173. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_2.cu +1 -0
  174. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_4.cu +1 -0
  175. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_16.cu +1 -0
  176. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu +1 -0
  177. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_4.cu +1 -0
  178. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_8.cu +2 -0
  179. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_32-ncols2_2.cu +1 -0
  180. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_16.cu +1 -0
  181. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_2.cu +1 -0
  182. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_4.cu +1 -0
  183. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_8.cu +2 -0
  184. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_2.cu +1 -0
  185. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_4.cu +1 -0
  186. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_8.cu +2 -0
  187. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq192-dv128.cu +5 -0
  188. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu +5 -0
  189. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq512-dv512.cu +5 -0
  190. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-bf16.cu +7 -0
  191. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-f16.cu +7 -0
  192. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_0.cu +7 -0
  193. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_1.cu +7 -0
  194. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_0.cu +7 -0
  195. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_1.cu +7 -0
  196. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q8_0.cu +7 -0
  197. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-bf16.cu +7 -0
  198. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-bf16.cu +7 -0
  199. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-bf16.cu +7 -0
  200. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-bf16.cu +7 -0
  201. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-bf16.cu +7 -0
  202. data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-bf16.cu +7 -0
  203. data/ext/sources/ggml/src/ggml-cuda/template-instances/mmq-instance-nvfp4.cu +5 -0
  204. data/ext/sources/ggml/src/ggml-cuda/template-instances/mmq-instance-q1_0.cu +5 -0
  205. data/ext/sources/ggml/src/ggml-cuda/top-k.cu +5 -4
  206. data/ext/sources/ggml/src/ggml-cuda/topk-moe.cu +33 -24
  207. data/ext/sources/ggml/src/ggml-cuda/unary.cu +31 -2
  208. data/ext/sources/ggml/src/ggml-cuda/unary.cuh +2 -0
  209. data/ext/sources/ggml/src/ggml-cuda/vecdotq.cuh +80 -0
  210. data/ext/sources/ggml/src/ggml-cuda/vendors/cuda.h +7 -2
  211. data/ext/sources/ggml/src/ggml-cuda/vendors/hip.h +23 -4
  212. data/ext/sources/ggml/src/ggml-cuda/vendors/musa.h +4 -0
  213. data/ext/sources/ggml/src/ggml-hexagon/CMakeLists.txt +1 -5
  214. data/ext/sources/ggml/src/ggml-hexagon/ggml-hexagon.cpp +2788 -1762
  215. data/ext/sources/ggml/src/ggml-hexagon/htp/CMakeLists.txt +13 -4
  216. data/ext/sources/ggml/src/ggml-hexagon/htp/act-ops.c +53 -84
  217. data/ext/sources/ggml/src/ggml-hexagon/htp/argsort-ops.c +25 -12
  218. data/ext/sources/ggml/src/ggml-hexagon/htp/binary-ops.c +165 -184
  219. data/ext/sources/ggml/src/ggml-hexagon/htp/cmake-toolchain.cmake +17 -19
  220. data/ext/sources/ggml/src/ggml-hexagon/htp/concat-ops.c +277 -0
  221. data/ext/sources/ggml/src/ggml-hexagon/htp/cpy-ops.c +170 -127
  222. data/ext/sources/ggml/src/ggml-hexagon/htp/cumsum-ops.c +270 -0
  223. data/ext/sources/ggml/src/ggml-hexagon/htp/diag-ops.c +216 -0
  224. data/ext/sources/ggml/src/ggml-hexagon/htp/fill-ops.c +123 -0
  225. data/ext/sources/ggml/src/ggml-hexagon/htp/flash-attn-ops.c +1774 -396
  226. data/ext/sources/ggml/src/ggml-hexagon/htp/flash-attn-ops.h +303 -0
  227. data/ext/sources/ggml/src/ggml-hexagon/htp/gated-delta-net-ops.c +1148 -0
  228. data/ext/sources/ggml/src/ggml-hexagon/htp/get-rows-ops.c +148 -42
  229. data/ext/sources/ggml/src/ggml-hexagon/htp/hex-common.h +80 -0
  230. data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dma.c +2 -2
  231. data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dma.h +255 -62
  232. data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dump.h +9 -0
  233. data/ext/sources/ggml/src/ggml-hexagon/htp/hex-profile.h +64 -0
  234. data/ext/sources/ggml/src/ggml-hexagon/htp/hex-utils.h +25 -21
  235. data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-fa-kernels.h +555 -0
  236. data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-mm-kernels-tiled.h +1303 -0
  237. data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-queue.c +167 -0
  238. data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-queue.h +157 -0
  239. data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-utils.h +222 -0
  240. data/ext/sources/ggml/src/ggml-hexagon/htp/htp-ctx.h +104 -13
  241. data/ext/sources/ggml/src/ggml-hexagon/htp/htp-ops.h +222 -57
  242. data/ext/sources/ggml/src/ggml-hexagon/htp/htp-vtcm.h +19 -0
  243. data/ext/sources/ggml/src/ggml-hexagon/htp/htp_iface.idl +10 -3
  244. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-base.h +78 -26
  245. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-copy.h +27 -10
  246. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-div.h +63 -23
  247. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-exp.h +48 -8
  248. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-fa-kernels.h +232 -0
  249. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-flash-attn.h +47 -0
  250. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-log.h +65 -0
  251. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-mm-kernels-flat.h +1511 -0
  252. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-mm-kernels-tiled.h +1200 -0
  253. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-pow.h +42 -0
  254. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-repl.h +74 -0
  255. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-sigmoid.h +40 -0
  256. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-sin-cos.h +90 -0
  257. data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-utils.h +5 -8
  258. data/ext/sources/ggml/src/ggml-hexagon/htp/main.c +625 -816
  259. data/ext/sources/ggml/src/ggml-hexagon/htp/matmul-ops.c +3052 -2166
  260. data/ext/sources/ggml/src/ggml-hexagon/htp/matmul-ops.h +650 -0
  261. data/ext/sources/ggml/src/ggml-hexagon/htp/pad-ops.c +547 -0
  262. data/ext/sources/ggml/src/ggml-hexagon/htp/repeat-ops.c +148 -0
  263. data/ext/sources/ggml/src/ggml-hexagon/htp/rope-ops.c +337 -106
  264. data/ext/sources/ggml/src/ggml-hexagon/htp/set-rows-ops.c +59 -37
  265. data/ext/sources/ggml/src/ggml-hexagon/htp/softmax-ops.c +121 -133
  266. data/ext/sources/ggml/src/ggml-hexagon/htp/solve-tri-ops.c +267 -0
  267. data/ext/sources/ggml/src/ggml-hexagon/htp/ssm-conv.c +245 -151
  268. data/ext/sources/ggml/src/ggml-hexagon/htp/sum-rows-ops.c +6 -6
  269. data/ext/sources/ggml/src/ggml-hexagon/htp/unary-ops.c +719 -45
  270. data/ext/sources/ggml/src/ggml-hexagon/htp/worker-pool.c +15 -3
  271. data/ext/sources/ggml/src/ggml-hexagon/htp/worker-pool.h +8 -0
  272. data/ext/sources/ggml/src/ggml-hexagon/htp-opnode.h +390 -0
  273. data/ext/sources/ggml/src/ggml-hexagon/libggml-htp.inf +3 -5
  274. data/ext/sources/ggml/src/ggml-hip/CMakeLists.txt +27 -9
  275. data/ext/sources/ggml/src/ggml-impl.h +6 -1
  276. data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.cpp +207 -18
  277. data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.h +36 -2
  278. data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.m +186 -29
  279. data/ext/sources/ggml/src/ggml-metal/ggml-metal-impl.h +118 -0
  280. data/ext/sources/ggml/src/ggml-metal/ggml-metal-ops.cpp +322 -21
  281. data/ext/sources/ggml/src/ggml-metal/ggml-metal-ops.h +4 -0
  282. data/ext/sources/ggml/src/ggml-metal/ggml-metal.cpp +39 -26
  283. data/ext/sources/ggml/src/ggml-metal/ggml-metal.metal +1226 -467
  284. data/ext/sources/ggml/src/ggml-musa/CMakeLists.txt +5 -6
  285. data/ext/sources/ggml/src/ggml-opencl/CMakeLists.txt +67 -5
  286. data/ext/sources/ggml/src/ggml-opencl/fa_tune.h +92 -0
  287. data/ext/sources/ggml/src/ggml-opencl/ggml-opencl.cpp +16290 -6246
  288. data/ext/sources/ggml/src/ggml-opencl/kernels/concat.cl +67 -0
  289. data/ext/sources/ggml/src/ggml-opencl/kernels/cpy.cl +59 -0
  290. data/ext/sources/ggml/src/ggml-opencl/kernels/cvt.cl +1997 -92
  291. data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl +81 -41
  292. data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl +88 -39
  293. data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl +1995 -96
  294. data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32_q4_0.cl +1615 -0
  295. data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32_q8_0.cl +1486 -0
  296. data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_pre_f16.cl +156 -0
  297. data/ext/sources/ggml/src/ggml-opencl/kernels/gated_delta_net.cl +249 -0
  298. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_mxfp4_f32_ns.cl +374 -0
  299. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_0_f32_ns.cl +324 -0
  300. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_1_f32_ns.cl +326 -0
  301. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_k_f32_ns.cl +348 -0
  302. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_0_f32_ns.cl +328 -0
  303. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_1_f32_ns.cl +330 -0
  304. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_k_f32_ns.cl +356 -0
  305. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q6_k_f32_ns.cl +335 -0
  306. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_iq4_nl_f32.cl +150 -0
  307. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q1_0_f32.cl +94 -0
  308. data/ext/sources/ggml/src/ggml-opencl/kernels/{mul_mat_Ab_Bi_8x4.cl → gemm_noshuffle_q4_0_f32.cl} +1 -1
  309. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q4_k_f32.cl +172 -0
  310. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_0_f32.cl +131 -0
  311. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_1_f32.cl +134 -0
  312. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_k_f32.cl +176 -0
  313. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q6_k_f32.cl +140 -0
  314. data/ext/sources/ggml/src/ggml-opencl/kernels/{mul_mm_q8_0_f32_8x4.cl → gemm_noshuffle_q8_0_f32.cl} +1 -1
  315. data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_xmem_f16_f32_os8.cl +233 -0
  316. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_mxfp4_f32_ns.cl +165 -0
  317. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q4_0_f32_ns.cl +120 -0
  318. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q4_1_f32_ns.cl +123 -0
  319. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q4_k_f32_ns.cl +155 -0
  320. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q5_0_f32_ns.cl +123 -0
  321. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q5_1_f32_ns.cl +125 -0
  322. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q5_k_f32_ns.cl +160 -0
  323. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q6_k_f32_ns.cl +141 -0
  324. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_iq4_nl_f32.cl +302 -0
  325. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q1_0_f32.cl +121 -0
  326. data/ext/sources/ggml/src/ggml-opencl/kernels/{gemv_noshuffle_general.cl → gemv_noshuffle_q4_0_f32.cl} +5 -5
  327. data/ext/sources/ggml/src/ggml-opencl/kernels/{gemv_noshuffle.cl → gemv_noshuffle_q4_0_f32_spec.cl} +5 -5
  328. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q4_k_f32.cl +318 -0
  329. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_0_f32.cl +291 -0
  330. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_1_f32.cl +294 -0
  331. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_k_f32.cl +326 -0
  332. data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q6_k_f32.cl +293 -0
  333. data/ext/sources/ggml/src/ggml-opencl/kernels/{gemv_noshuffle_general_q8_0_f32.cl → gemv_noshuffle_q8_0_f32.cl} +1 -1
  334. data/ext/sources/ggml/src/ggml-opencl/kernels/get_rows.cl +15 -9
  335. data/ext/sources/ggml/src/ggml-opencl/kernels/moe_reorder_b.cl +30 -0
  336. data/ext/sources/ggml/src/ggml-opencl/kernels/moe_sort_by_expert.cl +82 -0
  337. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_iq4_nl_f32_l4_lm.cl +171 -0
  338. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q1_0_f32_l4_lm.cl +156 -0
  339. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q4_k_f32_l4_lm.cl +179 -0
  340. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q5_0_f32_l4_lm.cl +173 -0
  341. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q5_1_f32_l4_lm.cl +175 -0
  342. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q5_k_f32_l4_lm.cl +192 -0
  343. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32_l4.cl +1149 -0
  344. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32.cl +164 -0
  345. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32_flat.cl +202 -0
  346. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q1_0_f32.cl +141 -0
  347. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q1_0_f32_flat.cl +190 -0
  348. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q4_k_f32_flat.cl +196 -0
  349. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_0_f32.cl +241 -0
  350. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_0_f32_flat.cl +243 -0
  351. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_1_f32.cl +243 -0
  352. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_1_f32_flat.cl +247 -0
  353. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_k_f32.cl +187 -0
  354. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_k_f32_flat.cl +203 -0
  355. data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q6_k_f32_flat.cl +48 -64
  356. data/ext/sources/ggml/src/ggml-opencl/kernels/norm.cl +5 -2
  357. data/ext/sources/ggml/src/ggml-opencl/kernels/set_rows.cl +500 -0
  358. data/ext/sources/ggml/src/ggml-opencl/libdl.h +79 -0
  359. data/ext/sources/ggml/src/ggml-openvino/.clang-format +0 -5
  360. data/ext/sources/ggml/src/ggml-openvino/CMakeLists.txt +2 -4
  361. data/ext/sources/ggml/src/ggml-openvino/ggml-decoder.cpp +740 -127
  362. data/ext/sources/ggml/src/ggml-openvino/ggml-decoder.h +76 -23
  363. data/ext/sources/ggml/src/ggml-openvino/ggml-openvino-extra.cpp +75 -14
  364. data/ext/sources/ggml/src/ggml-openvino/ggml-openvino-extra.h +29 -8
  365. data/ext/sources/ggml/src/ggml-openvino/ggml-openvino.cpp +339 -69
  366. data/ext/sources/ggml/src/ggml-openvino/ggml-quants.cpp +330 -192
  367. data/ext/sources/ggml/src/ggml-openvino/ggml-quants.h +10 -4
  368. data/ext/sources/ggml/src/ggml-openvino/openvino/decoder.h +56 -16
  369. data/ext/sources/ggml/src/ggml-openvino/openvino/frontend.h +1 -1
  370. data/ext/sources/ggml/src/ggml-openvino/openvino/input_model.h +4 -4
  371. data/ext/sources/ggml/src/ggml-openvino/openvino/node_context.h +94 -37
  372. data/ext/sources/ggml/src/ggml-openvino/openvino/op/add_id.cpp +76 -0
  373. data/ext/sources/ggml/src/ggml-openvino/openvino/op/argsort.cpp +47 -0
  374. data/ext/sources/ggml/src/ggml-openvino/openvino/op/clamp.cpp +33 -0
  375. data/ext/sources/ggml/src/ggml-openvino/openvino/op/concat.cpp +48 -0
  376. data/ext/sources/ggml/src/ggml-openvino/openvino/op/cont.cpp +8 -16
  377. data/ext/sources/ggml/src/ggml-openvino/openvino/op/cpy.cpp +14 -1
  378. data/ext/sources/ggml/src/ggml-openvino/openvino/op/div.cpp +146 -0
  379. data/ext/sources/ggml/src/ggml-openvino/openvino/op/flash_attn_ext.cpp +108 -21
  380. data/ext/sources/ggml/src/ggml-openvino/openvino/op/gated_delta_net.cpp +282 -0
  381. data/ext/sources/ggml/src/ggml-openvino/openvino/op/gated_delta_net.hpp +65 -0
  382. data/ext/sources/ggml/src/ggml-openvino/openvino/op/get_rows.cpp +2 -9
  383. data/ext/sources/ggml/src/ggml-openvino/openvino/op/glu_geglu.cpp +21 -7
  384. data/ext/sources/ggml/src/ggml-openvino/openvino/op/glu_swiglu.cpp +41 -8
  385. data/ext/sources/ggml/src/ggml-openvino/openvino/op/im2col.cpp +120 -0
  386. data/ext/sources/ggml/src/ggml-openvino/openvino/op/l2_norm.cpp +44 -0
  387. data/ext/sources/ggml/src/ggml-openvino/openvino/op/mul_mat_id.cpp +226 -0
  388. data/ext/sources/ggml/src/ggml-openvino/openvino/op/mulmat.cpp +19 -9
  389. data/ext/sources/ggml/src/ggml-openvino/openvino/op/norm.cpp +58 -0
  390. data/ext/sources/ggml/src/ggml-openvino/openvino/op/pad.cpp +95 -0
  391. data/ext/sources/ggml/src/ggml-openvino/openvino/op/permute.cpp +58 -13
  392. data/ext/sources/ggml/src/ggml-openvino/openvino/op/repeat.cpp +74 -0
  393. data/ext/sources/ggml/src/ggml-openvino/openvino/op/reshape.cpp +13 -6
  394. data/ext/sources/ggml/src/ggml-openvino/openvino/op/rms_norm.cpp +1 -1
  395. data/ext/sources/ggml/src/ggml-openvino/openvino/op/rope.cpp +161 -39
  396. data/ext/sources/ggml/src/ggml-openvino/openvino/op/set_rows.cpp +3 -3
  397. data/ext/sources/ggml/src/ggml-openvino/openvino/op/softmax.cpp +126 -49
  398. data/ext/sources/ggml/src/ggml-openvino/openvino/op/ssm_conv.cpp +59 -0
  399. data/ext/sources/ggml/src/ggml-openvino/openvino/op/sum_rows.cpp +27 -0
  400. data/ext/sources/ggml/src/ggml-openvino/openvino/op/transpose.cpp +32 -1
  401. data/ext/sources/ggml/src/ggml-openvino/openvino/op/unary_silu.cpp +1 -1
  402. data/ext/sources/ggml/src/ggml-openvino/openvino/op/unary_softplus.cpp +38 -0
  403. data/ext/sources/ggml/src/ggml-openvino/openvino/op/view.cpp +90 -25
  404. data/ext/sources/ggml/src/ggml-openvino/openvino/op_table.cpp +41 -22
  405. data/ext/sources/ggml/src/ggml-openvino/openvino/op_table.h +18 -4
  406. data/ext/sources/ggml/src/ggml-openvino/openvino/pass/mark_decompression_convert_constant_folding.h +1 -1
  407. data/ext/sources/ggml/src/ggml-openvino/openvino/rt_info/weightless_caching_attributes.hpp +41 -0
  408. data/ext/sources/ggml/src/ggml-openvino/openvino/translate_session.cpp +70 -43
  409. data/ext/sources/ggml/src/ggml-openvino/openvino/translate_session.h +5 -4
  410. data/ext/sources/ggml/src/ggml-openvino/openvino/utils.cpp +612 -36
  411. data/ext/sources/ggml/src/ggml-openvino/openvino/utils.h +29 -26
  412. data/ext/sources/ggml/src/ggml-openvino/utils.cpp +460 -114
  413. data/ext/sources/ggml/src/ggml-openvino/utils.h +32 -9
  414. data/ext/sources/ggml/src/ggml-opt.cpp +1 -0
  415. data/ext/sources/ggml/src/ggml-quants.c +365 -114
  416. data/ext/sources/ggml/src/ggml-quants.h +6 -0
  417. data/ext/sources/ggml/src/ggml-rpc/CMakeLists.txt +24 -0
  418. data/ext/sources/ggml/src/ggml-rpc/ggml-rpc.cpp +167 -311
  419. data/ext/sources/ggml/src/ggml-rpc/transport.cpp +683 -0
  420. data/ext/sources/ggml/src/ggml-rpc/transport.h +34 -0
  421. data/ext/sources/ggml/src/ggml-sycl/CMakeLists.txt +50 -4
  422. data/ext/sources/ggml/src/ggml-sycl/add-id.cpp +1 -1
  423. data/ext/sources/ggml/src/ggml-sycl/backend.hpp +5 -1
  424. data/ext/sources/ggml/src/ggml-sycl/binbcast.cpp +12 -0
  425. data/ext/sources/ggml/src/ggml-sycl/col2im-1d.cpp +102 -0
  426. data/ext/sources/ggml/src/ggml-sycl/col2im-1d.hpp +8 -0
  427. data/ext/sources/ggml/src/ggml-sycl/common.cpp +72 -2
  428. data/ext/sources/ggml/src/ggml-sycl/common.hpp +59 -2
  429. data/ext/sources/ggml/src/ggml-sycl/concat.cpp +21 -1
  430. data/ext/sources/ggml/src/ggml-sycl/conv2d-dw.cpp +158 -0
  431. data/ext/sources/ggml/src/ggml-sycl/conv2d-dw.hpp +10 -0
  432. data/ext/sources/ggml/src/ggml-sycl/conv2d-transpose.cpp +125 -0
  433. data/ext/sources/ggml/src/ggml-sycl/conv2d-transpose.hpp +10 -0
  434. data/ext/sources/ggml/src/ggml-sycl/conv2d.cpp +150 -0
  435. data/ext/sources/ggml/src/ggml-sycl/conv2d.hpp +10 -0
  436. data/ext/sources/ggml/src/ggml-sycl/conv3d.cpp +224 -0
  437. data/ext/sources/ggml/src/ggml-sycl/conv3d.hpp +8 -0
  438. data/ext/sources/ggml/src/ggml-sycl/convert.cpp +121 -13
  439. data/ext/sources/ggml/src/ggml-sycl/convert.hpp +9 -0
  440. data/ext/sources/ggml/src/ggml-sycl/cpy.cpp +706 -0
  441. data/ext/sources/ggml/src/ggml-sycl/cpy.hpp +281 -0
  442. data/ext/sources/ggml/src/ggml-sycl/cross_entropy_loss.cpp +255 -0
  443. data/ext/sources/ggml/src/ggml-sycl/cross_entropy_loss.hpp +7 -0
  444. data/ext/sources/ggml/src/ggml-sycl/cumsum.cpp +148 -0
  445. data/ext/sources/ggml/src/ggml-sycl/cumsum.hpp +5 -0
  446. data/ext/sources/ggml/src/ggml-sycl/dequantize.hpp +678 -0
  447. data/ext/sources/ggml/src/ggml-sycl/diag.cpp +67 -0
  448. data/ext/sources/ggml/src/ggml-sycl/diag.hpp +5 -0
  449. data/ext/sources/ggml/src/ggml-sycl/dmmv.cpp +997 -244
  450. data/ext/sources/ggml/src/ggml-sycl/dpct/helper.hpp +15 -7
  451. data/ext/sources/ggml/src/ggml-sycl/element_wise.cpp +215 -204
  452. data/ext/sources/ggml/src/ggml-sycl/element_wise.hpp +2 -2
  453. data/ext/sources/ggml/src/ggml-sycl/fattn-buffers.cpp +56 -0
  454. data/ext/sources/ggml/src/ggml-sycl/fattn-buffers.hpp +63 -0
  455. data/ext/sources/ggml/src/ggml-sycl/fattn-common.hpp +7 -5
  456. data/ext/sources/ggml/src/ggml-sycl/fattn-tile.cpp +4 -0
  457. data/ext/sources/ggml/src/ggml-sycl/fattn-tile.hpp +76 -168
  458. data/ext/sources/ggml/src/ggml-sycl/fattn-vec.hpp +7 -0
  459. data/ext/sources/ggml/src/ggml-sycl/fattn.cpp +3 -1
  460. data/ext/sources/ggml/src/ggml-sycl/fill.cpp +55 -0
  461. data/ext/sources/ggml/src/ggml-sycl/fill.hpp +5 -0
  462. data/ext/sources/ggml/src/ggml-sycl/gated_delta_net.cpp +69 -31
  463. data/ext/sources/ggml/src/ggml-sycl/gated_delta_net.hpp +1 -0
  464. data/ext/sources/ggml/src/ggml-sycl/gemm.hpp +3 -0
  465. data/ext/sources/ggml/src/ggml-sycl/getrows.cpp +79 -3
  466. data/ext/sources/ggml/src/ggml-sycl/ggml-sycl.cpp +1758 -455
  467. data/ext/sources/ggml/src/ggml-sycl/im2col.cpp +353 -89
  468. data/ext/sources/ggml/src/ggml-sycl/im2col.hpp +5 -3
  469. data/ext/sources/ggml/src/ggml-sycl/mmvq.cpp +1542 -39
  470. data/ext/sources/ggml/src/ggml-sycl/mmvq.hpp +33 -0
  471. data/ext/sources/ggml/src/ggml-sycl/norm.cpp +103 -49
  472. data/ext/sources/ggml/src/ggml-sycl/outprod.cpp +45 -9
  473. data/ext/sources/ggml/src/ggml-sycl/pad.cpp +27 -27
  474. data/ext/sources/ggml/src/ggml-sycl/pool.cpp +185 -0
  475. data/ext/sources/ggml/src/ggml-sycl/pool.hpp +22 -0
  476. data/ext/sources/ggml/src/ggml-sycl/presets.hpp +3 -1
  477. data/ext/sources/ggml/src/ggml-sycl/quants.hpp +71 -0
  478. data/ext/sources/ggml/src/ggml-sycl/set_rows.cpp +17 -3
  479. data/ext/sources/ggml/src/ggml-sycl/softmax.cpp +9 -10
  480. data/ext/sources/ggml/src/ggml-sycl/solve_tri.cpp +172 -0
  481. data/ext/sources/ggml/src/ggml-sycl/solve_tri.hpp +8 -0
  482. data/ext/sources/ggml/src/ggml-sycl/ssm_conv.cpp +6 -1
  483. data/ext/sources/ggml/src/ggml-sycl/ssm_scan.cpp +156 -0
  484. data/ext/sources/ggml/src/ggml-sycl/ssm_scan.hpp +5 -0
  485. data/ext/sources/ggml/src/ggml-sycl/sycl_hw.cpp +62 -10
  486. data/ext/sources/ggml/src/ggml-sycl/sycl_hw.hpp +18 -6
  487. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq512-dv512.cpp +6 -0
  488. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-f16.cpp +1 -0
  489. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q4_0.cpp +1 -0
  490. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q4_1.cpp +1 -0
  491. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q5_0.cpp +1 -0
  492. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q5_1.cpp +1 -0
  493. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q8_0.cpp +1 -0
  494. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-f16.cpp +1 -0
  495. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q4_0.cpp +1 -0
  496. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q4_1.cpp +1 -0
  497. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q5_0.cpp +1 -0
  498. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q5_1.cpp +1 -0
  499. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q8_0.cpp +1 -0
  500. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-f16.cpp +1 -0
  501. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q4_0.cpp +1 -0
  502. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q4_1.cpp +1 -0
  503. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q5_0.cpp +1 -0
  504. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q5_1.cpp +1 -0
  505. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q8_0.cpp +1 -0
  506. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-f16.cpp +1 -0
  507. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q4_0.cpp +1 -0
  508. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q4_1.cpp +1 -0
  509. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q5_0.cpp +1 -0
  510. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q5_1.cpp +1 -0
  511. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q8_0.cpp +1 -0
  512. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-f16.cpp +1 -0
  513. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q4_0.cpp +1 -0
  514. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q4_1.cpp +1 -0
  515. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q5_0.cpp +1 -0
  516. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q5_1.cpp +1 -0
  517. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q8_0.cpp +1 -0
  518. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-f16.cpp +1 -0
  519. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q4_0.cpp +1 -0
  520. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q4_1.cpp +1 -0
  521. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q5_0.cpp +1 -0
  522. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q5_1.cpp +1 -0
  523. data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q8_0.cpp +1 -0
  524. data/ext/sources/ggml/src/ggml-sycl/type.hpp +112 -0
  525. data/ext/sources/ggml/src/ggml-sycl/upscale.cpp +410 -0
  526. data/ext/sources/ggml/src/ggml-sycl/upscale.hpp +9 -0
  527. data/ext/sources/ggml/src/ggml-sycl/vecdotq.hpp +242 -45
  528. data/ext/sources/ggml/src/ggml-virtgpu/ggml-backend-buffer.cpp +4 -0
  529. data/ext/sources/ggml/src/ggml-virtgpu/ggml-backend-device.cpp +2 -0
  530. data/ext/sources/ggml/src/ggml-virtgpu/ggml-backend.cpp +2 -0
  531. data/ext/sources/ggml/src/ggml-virtgpu/virtgpu-shm.cpp +1 -0
  532. data/ext/sources/ggml/src/ggml-virtgpu/virtgpu.cpp +1 -0
  533. data/ext/sources/ggml/src/ggml-virtgpu/virtgpu.h +0 -2
  534. data/ext/sources/ggml/src/ggml-vulkan/CMakeLists.txt +16 -0
  535. data/ext/sources/ggml/src/ggml-vulkan/ggml-vulkan.cpp +2843 -700
  536. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +4 -0
  537. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/col2im_1d.comp +61 -0
  538. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/contig_copy.comp +6 -2
  539. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp +146 -13
  540. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/conv3d_mm.comp +431 -0
  541. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/copy.comp +3 -1
  542. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/copy_from_quant.comp +1 -1
  543. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/copy_to_quant.comp +25 -1
  544. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl +88 -0
  545. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl +643 -1
  546. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_nvfp4.comp +32 -0
  547. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q1_0.comp +29 -0
  548. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/diag.comp +3 -4
  549. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dot_product_funcs.glsl +27 -0
  550. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/coopmat2_decode_vector.comp +7 -0
  551. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +198 -48
  552. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.glsl +60 -59
  553. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +116 -113
  554. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp +122 -31
  555. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_dequant.glsl +131 -0
  556. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_mmq_funcs.glsl +203 -0
  557. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/fwht.comp +115 -0
  558. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gated_delta_net.comp +125 -64
  559. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl +0 -1
  560. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/generic_unary_head.glsl +21 -19
  561. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_back.comp +25 -0
  562. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/glu_head.glsl +29 -1
  563. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/glu_main.glsl +17 -11
  564. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/im2col.comp +76 -54
  565. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/im2col_3d.comp +0 -1
  566. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/l2_norm.comp +4 -7
  567. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/log.comp +0 -1
  568. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec.comp +122 -27
  569. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iface.glsl +6 -6
  570. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q2_k.comp +1 -1
  571. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q4_k.comp +1 -1
  572. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q5_k.comp +1 -1
  573. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp +22 -24
  574. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl +88 -55
  575. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +42 -40
  576. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +49 -15
  577. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +222 -171
  578. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl +8 -8
  579. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_shmem_types.glsl +24 -9
  580. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp +0 -1
  581. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/norm.comp +10 -10
  582. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/repeat_back.comp +3 -3
  583. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/roll.comp +3 -3
  584. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl +5 -2
  585. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl +0 -1
  586. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl +3 -2
  587. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/snake.comp +49 -0
  588. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/ssm_conv.comp +11 -1
  589. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/tri.comp +3 -4
  590. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl +79 -2
  591. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/unary.comp +168 -0
  592. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +282 -211
  593. data/ext/sources/ggml/src/ggml-webgpu/CMakeLists.txt +5 -2
  594. data/ext/sources/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +2209 -283
  595. data/ext/sources/ggml/src/ggml-webgpu/ggml-webgpu.cpp +2618 -1416
  596. data/ext/sources/ggml/src/ggml-webgpu/pre_wgsl.hpp +37 -7
  597. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/add_id.wgsl +64 -0
  598. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl +8 -7
  599. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/common_decls.tmpl +90 -95
  600. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl +19 -1
  601. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/conv2d.wgsl +165 -0
  602. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/{cpy.tmpl.wgsl → cpy.wgsl} +25 -50
  603. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl +107 -184
  604. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_quant_staging.tmpl +124 -0
  605. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_tile.wgsl +397 -0
  606. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl +101 -0
  607. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_reduce.wgsl +84 -0
  608. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl +619 -0
  609. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/gated_delta_net.wgsl +149 -0
  610. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl +204 -78
  611. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/glu.wgsl +155 -0
  612. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/im2col.wgsl +101 -0
  613. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +805 -526
  614. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id.wgsl +195 -0
  615. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_gather.wgsl +52 -0
  616. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_vec.wgsl +154 -0
  617. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.wgsl +8 -6
  618. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.wgsl +5 -1
  619. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl +90 -413
  620. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_acc.tmpl +1553 -0
  621. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_q_acc.tmpl +297 -0
  622. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/quant_inner_loops.tmpl +21 -0
  623. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/quantize_q8.wgsl +178 -0
  624. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl +152 -0
  625. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/{rope.tmpl.wgsl → rope.wgsl} +71 -142
  626. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/row_norm.wgsl +153 -0
  627. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl +6 -4
  628. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/set.wgsl +109 -0
  629. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/set_rows.wgsl +2 -3
  630. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/set_rows_quant.wgsl +224 -0
  631. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/{soft_max.tmpl.wgsl → soft_max.wgsl} +106 -206
  632. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/solve_tri.wgsl +121 -0
  633. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/ssm_conv.wgsl +65 -0
  634. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/ssm_scan.wgsl +193 -0
  635. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl +68 -48
  636. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/upscale.wgsl +240 -0
  637. data/ext/sources/ggml/src/ggml-zdnn/ggml-zdnn.cpp +18 -14
  638. data/ext/sources/ggml/src/ggml-zendnn/CMakeLists.txt +1 -1
  639. data/ext/sources/ggml/src/ggml-zendnn/ggml-zendnn.cpp +244 -10
  640. data/ext/sources/ggml/src/ggml.c +146 -42
  641. data/ext/sources/ggml/src/gguf.cpp +173 -28
  642. data/ext/sources/include/parakeet.h +342 -0
  643. data/ext/sources/include/whisper.h +31 -0
  644. data/ext/sources/media/matmul.png +0 -0
  645. data/ext/sources/src/CMakeLists.txt +23 -0
  646. data/ext/sources/src/parakeet-arch.h +188 -0
  647. data/ext/sources/src/parakeet.cpp +3838 -0
  648. data/ext/sources/src/whisper.cpp +220 -26
  649. data/extsources.rb +26 -10
  650. data/lib/whisper/log_settable.rb +33 -0
  651. data/lib/whisper/model/uri.rb +13 -8
  652. data/lib/whisper/output.rb +74 -0
  653. data/sig/whisper.rbs +417 -62
  654. data/test/helper.rb +2 -0
  655. data/test/jfk_reader/jfk_reader.c +50 -7
  656. data/test/test_callback.rb +1 -0
  657. data/test/test_package.rb +6 -5
  658. data/test/test_parakeet.rb +28 -0
  659. data/test/test_parakeet_callback.rb +107 -0
  660. data/test/test_parakeet_context.rb +116 -0
  661. data/test/test_parakeet_context_params.rb +24 -0
  662. data/test/test_parakeet_model.rb +21 -0
  663. data/test/test_parakeet_params.rb +78 -0
  664. data/test/test_parakeet_segment.rb +42 -0
  665. data/test/test_parakeet_token.rb +73 -0
  666. data/test/test_params.rb +2 -0
  667. data/test/test_vad.rb +9 -0
  668. data/test/test_vad_context.rb +2 -2
  669. data/test/test_vad_segment.rb +1 -1
  670. data/test/test_whisper.rb +24 -6
  671. data/whispercpp.gemspec +2 -2
  672. metadata +263 -304
  673. data/ext/sources/bindings/javascript/CMakeLists.txt +0 -41
  674. data/ext/sources/bindings/javascript/emscripten.cpp +0 -93
  675. data/ext/sources/bindings/javascript/libwhisper.worker.js +0 -1
  676. data/ext/sources/bindings/javascript/package.json +0 -26
  677. data/ext/sources/bindings/javascript/whisper.js +0 -19
  678. data/ext/sources/examples/addon.node/CMakeLists.txt +0 -31
  679. data/ext/sources/examples/addon.node/__test__/whisper.spec.js +0 -133
  680. data/ext/sources/examples/addon.node/addon.cpp +0 -557
  681. data/ext/sources/examples/addon.node/index.js +0 -59
  682. data/ext/sources/examples/addon.node/package.json +0 -16
  683. data/ext/sources/examples/addon.node/vad-example.js +0 -132
  684. data/ext/sources/examples/bench.wasm/CMakeLists.txt +0 -49
  685. data/ext/sources/examples/bench.wasm/emscripten.cpp +0 -87
  686. data/ext/sources/examples/bench.wasm/index-tmpl.html +0 -285
  687. data/ext/sources/examples/coi-serviceworker.js +0 -146
  688. data/ext/sources/examples/command/CMakeLists.txt +0 -10
  689. data/ext/sources/examples/command/command.cpp +0 -802
  690. data/ext/sources/examples/command/commands.txt +0 -9
  691. data/ext/sources/examples/command.wasm/CMakeLists.txt +0 -50
  692. data/ext/sources/examples/command.wasm/emscripten.cpp +0 -327
  693. data/ext/sources/examples/command.wasm/index-tmpl.html +0 -415
  694. data/ext/sources/examples/generate-karaoke.sh +0 -57
  695. data/ext/sources/examples/helpers.js +0 -191
  696. data/ext/sources/examples/livestream.sh +0 -112
  697. data/ext/sources/examples/lsp/CMakeLists.txt +0 -10
  698. data/ext/sources/examples/lsp/lsp.cpp +0 -471
  699. data/ext/sources/examples/lsp/whisper.vim +0 -362
  700. data/ext/sources/examples/python/test_whisper_processor.py +0 -7
  701. data/ext/sources/examples/python/whisper_processor.py +0 -54
  702. data/ext/sources/examples/server/bench.js +0 -29
  703. data/ext/sources/examples/server.py +0 -120
  704. data/ext/sources/examples/stream/CMakeLists.txt +0 -10
  705. data/ext/sources/examples/stream/stream.cpp +0 -437
  706. data/ext/sources/examples/stream.wasm/CMakeLists.txt +0 -49
  707. data/ext/sources/examples/stream.wasm/emscripten.cpp +0 -216
  708. data/ext/sources/examples/stream.wasm/index-tmpl.html +0 -491
  709. data/ext/sources/examples/sycl/CMakeLists.txt +0 -9
  710. data/ext/sources/examples/sycl/build.sh +0 -22
  711. data/ext/sources/examples/sycl/ls-sycl-device.cpp +0 -11
  712. data/ext/sources/examples/sycl/run-whisper.sh +0 -17
  713. data/ext/sources/examples/talk-llama/CMakeLists.txt +0 -48
  714. data/ext/sources/examples/talk-llama/eleven-labs.py +0 -80
  715. data/ext/sources/examples/talk-llama/llama-adapter.cpp +0 -488
  716. data/ext/sources/examples/talk-llama/llama-adapter.h +0 -89
  717. data/ext/sources/examples/talk-llama/llama-arch.cpp +0 -2877
  718. data/ext/sources/examples/talk-llama/llama-arch.h +0 -628
  719. data/ext/sources/examples/talk-llama/llama-batch.cpp +0 -919
  720. data/ext/sources/examples/talk-llama/llama-batch.h +0 -173
  721. data/ext/sources/examples/talk-llama/llama-chat.cpp +0 -896
  722. data/ext/sources/examples/talk-llama/llama-chat.h +0 -71
  723. data/ext/sources/examples/talk-llama/llama-context.cpp +0 -3633
  724. data/ext/sources/examples/talk-llama/llama-context.h +0 -359
  725. data/ext/sources/examples/talk-llama/llama-cparams.cpp +0 -5
  726. data/ext/sources/examples/talk-llama/llama-cparams.h +0 -47
  727. data/ext/sources/examples/talk-llama/llama-ext.h +0 -12
  728. data/ext/sources/examples/talk-llama/llama-grammar.cpp +0 -1464
  729. data/ext/sources/examples/talk-llama/llama-grammar.h +0 -194
  730. data/ext/sources/examples/talk-llama/llama-graph.cpp +0 -2735
  731. data/ext/sources/examples/talk-llama/llama-graph.h +0 -1031
  732. data/ext/sources/examples/talk-llama/llama-hparams.cpp +0 -258
  733. data/ext/sources/examples/talk-llama/llama-hparams.h +0 -353
  734. data/ext/sources/examples/talk-llama/llama-impl.cpp +0 -171
  735. data/ext/sources/examples/talk-llama/llama-impl.h +0 -75
  736. data/ext/sources/examples/talk-llama/llama-io.cpp +0 -15
  737. data/ext/sources/examples/talk-llama/llama-io.h +0 -35
  738. data/ext/sources/examples/talk-llama/llama-kv-cache-iswa.cpp +0 -330
  739. data/ext/sources/examples/talk-llama/llama-kv-cache-iswa.h +0 -137
  740. data/ext/sources/examples/talk-llama/llama-kv-cache.cpp +0 -2285
  741. data/ext/sources/examples/talk-llama/llama-kv-cache.h +0 -389
  742. data/ext/sources/examples/talk-llama/llama-kv-cells.h +0 -533
  743. data/ext/sources/examples/talk-llama/llama-memory-hybrid-iswa.cpp +0 -275
  744. data/ext/sources/examples/talk-llama/llama-memory-hybrid-iswa.h +0 -140
  745. data/ext/sources/examples/talk-llama/llama-memory-hybrid.cpp +0 -268
  746. data/ext/sources/examples/talk-llama/llama-memory-hybrid.h +0 -139
  747. data/ext/sources/examples/talk-llama/llama-memory-recurrent.cpp +0 -1165
  748. data/ext/sources/examples/talk-llama/llama-memory-recurrent.h +0 -182
  749. data/ext/sources/examples/talk-llama/llama-memory.cpp +0 -59
  750. data/ext/sources/examples/talk-llama/llama-memory.h +0 -122
  751. data/ext/sources/examples/talk-llama/llama-mmap.cpp +0 -752
  752. data/ext/sources/examples/talk-llama/llama-mmap.h +0 -73
  753. data/ext/sources/examples/talk-llama/llama-model-loader.cpp +0 -1655
  754. data/ext/sources/examples/talk-llama/llama-model-loader.h +0 -206
  755. data/ext/sources/examples/talk-llama/llama-model-saver.cpp +0 -299
  756. data/ext/sources/examples/talk-llama/llama-model-saver.h +0 -40
  757. data/ext/sources/examples/talk-llama/llama-model.cpp +0 -9056
  758. data/ext/sources/examples/talk-llama/llama-model.h +0 -597
  759. data/ext/sources/examples/talk-llama/llama-quant.cpp +0 -1304
  760. data/ext/sources/examples/talk-llama/llama-quant.h +0 -1
  761. data/ext/sources/examples/talk-llama/llama-sampler.cpp +0 -3885
  762. data/ext/sources/examples/talk-llama/llama-sampler.h +0 -42
  763. data/ext/sources/examples/talk-llama/llama-vocab.cpp +0 -3970
  764. data/ext/sources/examples/talk-llama/llama-vocab.h +0 -187
  765. data/ext/sources/examples/talk-llama/llama.cpp +0 -1194
  766. data/ext/sources/examples/talk-llama/llama.h +0 -1573
  767. data/ext/sources/examples/talk-llama/models/afmoe.cpp +0 -190
  768. data/ext/sources/examples/talk-llama/models/apertus.cpp +0 -125
  769. data/ext/sources/examples/talk-llama/models/arcee.cpp +0 -135
  770. data/ext/sources/examples/talk-llama/models/arctic.cpp +0 -137
  771. data/ext/sources/examples/talk-llama/models/arwkv7.cpp +0 -86
  772. data/ext/sources/examples/talk-llama/models/baichuan.cpp +0 -123
  773. data/ext/sources/examples/talk-llama/models/bailingmoe.cpp +0 -143
  774. data/ext/sources/examples/talk-llama/models/bailingmoe2.cpp +0 -133
  775. data/ext/sources/examples/talk-llama/models/bert.cpp +0 -184
  776. data/ext/sources/examples/talk-llama/models/bitnet.cpp +0 -145
  777. data/ext/sources/examples/talk-llama/models/bloom.cpp +0 -101
  778. data/ext/sources/examples/talk-llama/models/chameleon.cpp +0 -178
  779. data/ext/sources/examples/talk-llama/models/chatglm.cpp +0 -132
  780. data/ext/sources/examples/talk-llama/models/codeshell.cpp +0 -111
  781. data/ext/sources/examples/talk-llama/models/cogvlm.cpp +0 -102
  782. data/ext/sources/examples/talk-llama/models/cohere2-iswa.cpp +0 -134
  783. data/ext/sources/examples/talk-llama/models/command-r.cpp +0 -122
  784. data/ext/sources/examples/talk-llama/models/dbrx.cpp +0 -122
  785. data/ext/sources/examples/talk-llama/models/deci.cpp +0 -135
  786. data/ext/sources/examples/talk-llama/models/deepseek.cpp +0 -142
  787. data/ext/sources/examples/talk-llama/models/deepseek2.cpp +0 -262
  788. data/ext/sources/examples/talk-llama/models/delta-net-base.cpp +0 -445
  789. data/ext/sources/examples/talk-llama/models/dots1.cpp +0 -132
  790. data/ext/sources/examples/talk-llama/models/dream.cpp +0 -105
  791. data/ext/sources/examples/talk-llama/models/ernie4-5-moe.cpp +0 -148
  792. data/ext/sources/examples/talk-llama/models/ernie4-5.cpp +0 -110
  793. data/ext/sources/examples/talk-llama/models/eurobert.cpp +0 -97
  794. data/ext/sources/examples/talk-llama/models/exaone-moe.cpp +0 -145
  795. data/ext/sources/examples/talk-llama/models/exaone.cpp +0 -114
  796. data/ext/sources/examples/talk-llama/models/exaone4.cpp +0 -123
  797. data/ext/sources/examples/talk-llama/models/falcon-h1.cpp +0 -111
  798. data/ext/sources/examples/talk-llama/models/falcon.cpp +0 -120
  799. data/ext/sources/examples/talk-llama/models/gemma-embedding.cpp +0 -116
  800. data/ext/sources/examples/talk-llama/models/gemma.cpp +0 -112
  801. data/ext/sources/examples/talk-llama/models/gemma2-iswa.cpp +0 -128
  802. data/ext/sources/examples/talk-llama/models/gemma3.cpp +0 -155
  803. data/ext/sources/examples/talk-llama/models/gemma3n-iswa.cpp +0 -384
  804. data/ext/sources/examples/talk-llama/models/glm4-moe.cpp +0 -170
  805. data/ext/sources/examples/talk-llama/models/glm4.cpp +0 -157
  806. data/ext/sources/examples/talk-llama/models/gpt2.cpp +0 -105
  807. data/ext/sources/examples/talk-llama/models/gptneox.cpp +0 -144
  808. data/ext/sources/examples/talk-llama/models/granite-hybrid.cpp +0 -195
  809. data/ext/sources/examples/talk-llama/models/granite.cpp +0 -210
  810. data/ext/sources/examples/talk-llama/models/grok.cpp +0 -159
  811. data/ext/sources/examples/talk-llama/models/grovemoe.cpp +0 -139
  812. data/ext/sources/examples/talk-llama/models/hunyuan-dense.cpp +0 -132
  813. data/ext/sources/examples/talk-llama/models/hunyuan-moe.cpp +0 -153
  814. data/ext/sources/examples/talk-llama/models/internlm2.cpp +0 -120
  815. data/ext/sources/examples/talk-llama/models/jais.cpp +0 -86
  816. data/ext/sources/examples/talk-llama/models/jais2.cpp +0 -123
  817. data/ext/sources/examples/talk-llama/models/jamba.cpp +0 -106
  818. data/ext/sources/examples/talk-llama/models/kimi-linear.cpp +0 -381
  819. data/ext/sources/examples/talk-llama/models/lfm2.cpp +0 -196
  820. data/ext/sources/examples/talk-llama/models/llada-moe.cpp +0 -122
  821. data/ext/sources/examples/talk-llama/models/llada.cpp +0 -99
  822. data/ext/sources/examples/talk-llama/models/llama-iswa.cpp +0 -178
  823. data/ext/sources/examples/talk-llama/models/llama.cpp +0 -175
  824. data/ext/sources/examples/talk-llama/models/maincoder.cpp +0 -117
  825. data/ext/sources/examples/talk-llama/models/mamba-base.cpp +0 -289
  826. data/ext/sources/examples/talk-llama/models/mamba.cpp +0 -54
  827. data/ext/sources/examples/talk-llama/models/mimo2-iswa.cpp +0 -129
  828. data/ext/sources/examples/talk-llama/models/minicpm3.cpp +0 -200
  829. data/ext/sources/examples/talk-llama/models/minimax-m2.cpp +0 -123
  830. data/ext/sources/examples/talk-llama/models/mistral3.cpp +0 -160
  831. data/ext/sources/examples/talk-llama/models/models.h +0 -704
  832. data/ext/sources/examples/talk-llama/models/modern-bert.cpp +0 -109
  833. data/ext/sources/examples/talk-llama/models/mpt.cpp +0 -126
  834. data/ext/sources/examples/talk-llama/models/nemotron-h.cpp +0 -162
  835. data/ext/sources/examples/talk-llama/models/nemotron.cpp +0 -122
  836. data/ext/sources/examples/talk-llama/models/neo-bert.cpp +0 -104
  837. data/ext/sources/examples/talk-llama/models/olmo.cpp +0 -121
  838. data/ext/sources/examples/talk-llama/models/olmo2.cpp +0 -150
  839. data/ext/sources/examples/talk-llama/models/olmoe.cpp +0 -124
  840. data/ext/sources/examples/talk-llama/models/openai-moe-iswa.cpp +0 -127
  841. data/ext/sources/examples/talk-llama/models/openelm.cpp +0 -124
  842. data/ext/sources/examples/talk-llama/models/orion.cpp +0 -123
  843. data/ext/sources/examples/talk-llama/models/paddleocr.cpp +0 -122
  844. data/ext/sources/examples/talk-llama/models/pangu-embedded.cpp +0 -121
  845. data/ext/sources/examples/talk-llama/models/phi2.cpp +0 -121
  846. data/ext/sources/examples/talk-llama/models/phi3.cpp +0 -152
  847. data/ext/sources/examples/talk-llama/models/plamo.cpp +0 -110
  848. data/ext/sources/examples/talk-llama/models/plamo2.cpp +0 -320
  849. data/ext/sources/examples/talk-llama/models/plamo3.cpp +0 -128
  850. data/ext/sources/examples/talk-llama/models/plm.cpp +0 -169
  851. data/ext/sources/examples/talk-llama/models/qwen.cpp +0 -108
  852. data/ext/sources/examples/talk-llama/models/qwen2.cpp +0 -126
  853. data/ext/sources/examples/talk-llama/models/qwen2moe.cpp +0 -151
  854. data/ext/sources/examples/talk-llama/models/qwen2vl.cpp +0 -117
  855. data/ext/sources/examples/talk-llama/models/qwen3.cpp +0 -120
  856. data/ext/sources/examples/talk-llama/models/qwen35.cpp +0 -381
  857. data/ext/sources/examples/talk-llama/models/qwen35moe.cpp +0 -422
  858. data/ext/sources/examples/talk-llama/models/qwen3moe.cpp +0 -131
  859. data/ext/sources/examples/talk-llama/models/qwen3next.cpp +0 -525
  860. data/ext/sources/examples/talk-llama/models/qwen3vl-moe.cpp +0 -140
  861. data/ext/sources/examples/talk-llama/models/qwen3vl.cpp +0 -132
  862. data/ext/sources/examples/talk-llama/models/refact.cpp +0 -94
  863. data/ext/sources/examples/talk-llama/models/rnd1.cpp +0 -126
  864. data/ext/sources/examples/talk-llama/models/rwkv6-base.cpp +0 -164
  865. data/ext/sources/examples/talk-llama/models/rwkv6.cpp +0 -94
  866. data/ext/sources/examples/talk-llama/models/rwkv6qwen2.cpp +0 -86
  867. data/ext/sources/examples/talk-llama/models/rwkv7-base.cpp +0 -137
  868. data/ext/sources/examples/talk-llama/models/rwkv7.cpp +0 -90
  869. data/ext/sources/examples/talk-llama/models/seed-oss.cpp +0 -124
  870. data/ext/sources/examples/talk-llama/models/smallthinker.cpp +0 -126
  871. data/ext/sources/examples/talk-llama/models/smollm3.cpp +0 -128
  872. data/ext/sources/examples/talk-llama/models/stablelm.cpp +0 -146
  873. data/ext/sources/examples/talk-llama/models/starcoder.cpp +0 -100
  874. data/ext/sources/examples/talk-llama/models/starcoder2.cpp +0 -121
  875. data/ext/sources/examples/talk-llama/models/step35-iswa.cpp +0 -165
  876. data/ext/sources/examples/talk-llama/models/t5-dec.cpp +0 -166
  877. data/ext/sources/examples/talk-llama/models/t5-enc.cpp +0 -96
  878. data/ext/sources/examples/talk-llama/models/wavtokenizer-dec.cpp +0 -149
  879. data/ext/sources/examples/talk-llama/models/xverse.cpp +0 -108
  880. data/ext/sources/examples/talk-llama/prompts/talk-alpaca.txt +0 -23
  881. data/ext/sources/examples/talk-llama/speak +0 -40
  882. data/ext/sources/examples/talk-llama/speak.bat +0 -1
  883. data/ext/sources/examples/talk-llama/speak.ps1 +0 -14
  884. data/ext/sources/examples/talk-llama/talk-llama.cpp +0 -813
  885. data/ext/sources/examples/talk-llama/unicode-data.cpp +0 -7034
  886. data/ext/sources/examples/talk-llama/unicode-data.h +0 -20
  887. data/ext/sources/examples/talk-llama/unicode.cpp +0 -1103
  888. data/ext/sources/examples/talk-llama/unicode.h +0 -111
  889. data/ext/sources/examples/wchess/CMakeLists.txt +0 -10
  890. data/ext/sources/examples/wchess/libwchess/CMakeLists.txt +0 -19
  891. data/ext/sources/examples/wchess/libwchess/Chessboard.cpp +0 -803
  892. data/ext/sources/examples/wchess/libwchess/Chessboard.h +0 -33
  893. data/ext/sources/examples/wchess/libwchess/WChess.cpp +0 -193
  894. data/ext/sources/examples/wchess/libwchess/WChess.h +0 -63
  895. data/ext/sources/examples/wchess/libwchess/test-chessboard.cpp +0 -117
  896. data/ext/sources/examples/wchess/wchess.cmd/CMakeLists.txt +0 -8
  897. data/ext/sources/examples/wchess/wchess.cmd/wchess.cmd.cpp +0 -253
  898. data/ext/sources/examples/whisper.wasm/CMakeLists.txt +0 -50
  899. data/ext/sources/examples/whisper.wasm/emscripten.cpp +0 -118
  900. data/ext/sources/examples/whisper.wasm/index-tmpl.html +0 -659
  901. data/ext/sources/ggml/src/ggml-cuda/template-instances/generate_cu_files.py +0 -99
  902. data/ext/sources/ggml/src/ggml-hexagon/htp/htp-msg.h +0 -155
  903. data/ext/sources/ggml/src/ggml-hexagon/op-desc.h +0 -153
  904. data/ext/sources/ggml/src/ggml-opencl/kernels/embed_kernel.py +0 -26
  905. data/ext/sources/ggml/src/ggml-openvino/openvino/pass/eliminate_zp.cpp +0 -123
  906. data/ext/sources/ggml/src/ggml-openvino/openvino/pass/eliminate_zp.h +0 -17
  907. data/ext/sources/ggml/src/ggml-virtgpu/regenerate_remoting.py +0 -333
  908. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/abs.comp +0 -21
  909. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/ceil.comp +0 -22
  910. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/clamp.comp +0 -17
  911. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/cos.comp +0 -17
  912. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/elu.comp +0 -27
  913. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp +0 -21
  914. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/floor.comp +0 -22
  915. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gelu.comp +0 -25
  916. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gelu_erf.comp +0 -39
  917. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gelu_quick.comp +0 -23
  918. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/hardsigmoid.comp +0 -22
  919. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/hardswish.comp +0 -22
  920. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/leaky_relu.comp +0 -22
  921. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/neg.comp +0 -20
  922. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/relu.comp +0 -21
  923. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/round.comp +0 -29
  924. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rte.glsl +0 -5
  925. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sgn.comp +0 -21
  926. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sigmoid.comp +0 -20
  927. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/silu.comp +0 -22
  928. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sin.comp +0 -17
  929. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/softplus.comp +0 -23
  930. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp +0 -17
  931. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/square.comp +0 -17
  932. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/step.comp +0 -22
  933. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/tanh.comp +0 -20
  934. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/trunc.comp +0 -22
  935. data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/xielu.comp +0 -35
  936. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py +0 -182
  937. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/glu.tmpl.wgsl +0 -323
  938. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl +0 -718
  939. data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm.wgsl +0 -123
  940. data/ext/sources/tests/CMakeLists.txt +0 -112
  941. data/ext/sources/tests/earnings21/eval.mk +0 -58
  942. data/ext/sources/tests/earnings21/eval.py +0 -68
  943. data/ext/sources/tests/earnings21/normalizers/__init__.py +0 -2
  944. data/ext/sources/tests/earnings21/normalizers/basic.py +0 -80
  945. data/ext/sources/tests/earnings21/normalizers/english.json +0 -1741
  946. data/ext/sources/tests/earnings21/normalizers/english.py +0 -550
  947. data/ext/sources/tests/earnings21/requirements.txt +0 -6
  948. data/ext/sources/tests/en-0-ref.txt +0 -1
  949. data/ext/sources/tests/en-1-ref.txt +0 -1
  950. data/ext/sources/tests/en-2-ref.txt +0 -1
  951. data/ext/sources/tests/es-0-ref.txt +0 -1
  952. data/ext/sources/tests/librispeech/eval.mk +0 -39
  953. data/ext/sources/tests/librispeech/eval.py +0 -47
  954. data/ext/sources/tests/librispeech/normalizers/__init__.py +0 -2
  955. data/ext/sources/tests/librispeech/normalizers/basic.py +0 -80
  956. data/ext/sources/tests/librispeech/normalizers/english.json +0 -1741
  957. data/ext/sources/tests/librispeech/normalizers/english.py +0 -550
  958. data/ext/sources/tests/librispeech/requirements.txt +0 -6
  959. data/ext/sources/tests/run-tests.sh +0 -130
  960. data/ext/sources/tests/test-c.c +0 -3
  961. data/ext/sources/tests/test-vad-full.cpp +0 -56
  962. data/ext/sources/tests/test-vad.cpp +0 -83
  963. data/ext/sources/tests/test-whisper.js +0 -58
  964. data/lib/whisper/context.rb +0 -15
  965. data/lib/whisper/segment.rb +0 -58
@@ -664,6 +664,8 @@ void ggml_compute_forward_add(
664
664
  {
665
665
  ggml_compute_forward_add_non_quantized(params, dst);
666
666
  } break;
667
+ case GGML_TYPE_Q1_0:
668
+ case GGML_TYPE_Q2_0:
667
669
  case GGML_TYPE_Q4_0:
668
670
  case GGML_TYPE_Q4_1:
669
671
  case GGML_TYPE_Q5_0:
@@ -1113,6 +1115,8 @@ void ggml_compute_forward_add1(
1113
1115
  GGML_ABORT("fatal error");
1114
1116
  }
1115
1117
  } break;
1118
+ case GGML_TYPE_Q1_0:
1119
+ case GGML_TYPE_Q2_0:
1116
1120
  case GGML_TYPE_Q4_0:
1117
1121
  case GGML_TYPE_Q4_1:
1118
1122
  case GGML_TYPE_Q5_0:
@@ -1242,6 +1246,8 @@ void ggml_compute_forward_acc(
1242
1246
  } break;
1243
1247
  case GGML_TYPE_F16:
1244
1248
  case GGML_TYPE_BF16:
1249
+ case GGML_TYPE_Q1_0:
1250
+ case GGML_TYPE_Q2_0:
1245
1251
  case GGML_TYPE_Q4_0:
1246
1252
  case GGML_TYPE_Q4_1:
1247
1253
  case GGML_TYPE_Q5_0:
@@ -1910,7 +1916,11 @@ static void ggml_compute_forward_concat_any(
1910
1916
  GGML_ASSERT(dim >= 0 && dim < 4);
1911
1917
 
1912
1918
  int64_t o[4] = {0, 0, 0, 0};
1913
- o[dim] = src0->ne[dim];
1919
+ if (dim == 0) {
1920
+ o[dim] = src0->ne[dim]/ggml_blck_size(src0->type);
1921
+ } else {
1922
+ o[dim] = src0->ne[dim];
1923
+ }
1914
1924
 
1915
1925
  const char * x;
1916
1926
 
@@ -1918,8 +1928,8 @@ static void ggml_compute_forward_concat_any(
1918
1928
  for (int i3 = 0; i3 < ne3; i3++) {
1919
1929
  for (int i2 = ith; i2 < ne2; i2 += nth) {
1920
1930
  for (int i1 = 0; i1 < ne1; i1++) {
1921
- for (int i0 = 0; i0 < ne0; i0++) {
1922
- if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
1931
+ for (int i0 = 0; i0 < ne0/ggml_blck_size(dst->type); i0++) {
1932
+ if (i0 < ne00/ggml_blck_size(src0->type) && i1 < ne01 && i2 < ne02 && i3 < ne03) {
1923
1933
  x = (const char *)src0->data + (i0 )*nb00 + (i1 )*nb01 + (i2 )*nb02 + (i3 )*nb03;
1924
1934
  } else {
1925
1935
  x = (const char *)src1->data + (i0 - o[0])*nb10 + (i1 - o[1])*nb11 + (i2 - o[2])*nb12 + (i3 - o[3])*nb13;
@@ -2068,6 +2078,14 @@ void ggml_compute_forward_concat(
2068
2078
  ggml_tensor * dst) {
2069
2079
 
2070
2080
  const ggml_tensor * src0 = dst->src[0];
2081
+ const ggml_tensor * src1 = dst->src[1];
2082
+
2083
+ if (ggml_is_quantized(src0->type)) {
2084
+ GGML_ASSERT(ggml_is_contiguous(src0));
2085
+ GGML_ASSERT(ggml_is_contiguous(src1));
2086
+ GGML_ASSERT(src0->ne[0] % ggml_blck_size(src0->type) == 0);
2087
+ GGML_ASSERT(src1->ne[0] % ggml_blck_size(src1->type) == 0);
2088
+ }
2071
2089
 
2072
2090
  switch (src0->type) {
2073
2091
  case GGML_TYPE_F16:
@@ -2232,8 +2250,42 @@ static void ggml_compute_forward_fill_f32(const ggml_compute_params * params, gg
2232
2250
  }
2233
2251
  }
2234
2252
 
2253
+ static void ggml_compute_forward_fill_f16(const ggml_compute_params * params, ggml_tensor * dst) {
2254
+ const ggml_fp16_t c = GGML_CPU_FP32_TO_FP16(ggml_get_op_params_f32(dst, 0));
2255
+
2256
+ GGML_TENSOR_LOCALS(int64_t, ne, dst, ne);
2257
+ GGML_TENSOR_LOCALS(size_t, nb, dst, nb);
2258
+
2259
+ const auto [ir0, ir1] = get_thread_range(params, dst);
2260
+
2261
+ for (int64_t ir = ir0; ir < ir1; ++ir) {
2262
+ const int64_t i03 = ir/(ne2*ne1);
2263
+ const int64_t i02 = (ir - i03*ne2*ne1)/ne1;
2264
+ const int64_t i01 = (ir - i03*ne2*ne1 - i02*ne1);
2265
+
2266
+ ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1);
2267
+
2268
+ ggml_vec_set_f16(ne0, dst_ptr, c);
2269
+ }
2270
+ }
2271
+
2235
2272
  void ggml_compute_forward_fill(const ggml_compute_params * params, ggml_tensor * dst) {
2236
- ggml_compute_forward_fill_f32(params, dst);
2273
+ const ggml_tensor * src0 = dst->src[0];
2274
+
2275
+ switch (src0->type) {
2276
+ case GGML_TYPE_F32:
2277
+ {
2278
+ ggml_compute_forward_fill_f32(params, dst);
2279
+ } break;
2280
+ case GGML_TYPE_F16:
2281
+ {
2282
+ ggml_compute_forward_fill_f16(params, dst);
2283
+ } break;
2284
+ default:
2285
+ {
2286
+ GGML_ABORT("unsupported type for ggml_compute_forward_fill: %s", ggml_type_name(src0->type));
2287
+ }
2288
+ }
2237
2289
  }
2238
2290
 
2239
2291
  // ggml_compute_tri
@@ -3651,8 +3703,6 @@ static void ggml_compute_forward_norm_f32(
3651
3703
 
3652
3704
  GGML_ASSERT(ggml_are_same_shape(src0, dst));
3653
3705
 
3654
- GGML_ASSERT(src0->nb[0] == sizeof(float));
3655
-
3656
3706
  const int ith = params->ith;
3657
3707
  const int nth = params->nth;
3658
3708
 
@@ -3666,25 +3716,49 @@ static void ggml_compute_forward_norm_f32(
3666
3716
  for (int64_t i03 = 0; i03 < ne03; i03++) {
3667
3717
  for (int64_t i02 = 0; i02 < ne02; i02++) {
3668
3718
  for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
3669
- const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
3719
+ const char * x = (const char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
3720
+ char * y = (char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3;
3670
3721
 
3671
- float sum = 0.0;
3672
- ggml_vec_sum_f32(ne00, &sum, x);
3673
- float mean = sum/ne00;
3722
+ if (nb00 == sizeof(float) && nb0 == sizeof(float)) {
3723
+ const float * xf = (const float *) x;
3674
3724
 
3675
- float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
3676
- float variance = 0;
3725
+ float sum = 0.0;
3726
+ ggml_vec_sum_f32(ne00, &sum, xf);
3727
+ float mean = sum/ne00;
3728
+
3729
+ float * yf = (float *) y;
3730
+ float variance = 0;
3677
3731
 
3678
3732
  #ifdef GGML_USE_ACCELERATE
3679
- mean = -mean;
3680
- vDSP_vsadd(x, 1, &mean, y, 1, ne00);
3681
- vDSP_measqv(y, 1, &variance, ne00);
3733
+ mean = -mean;
3734
+ vDSP_vsadd(xf, 1, &mean, yf, 1, ne00);
3735
+ vDSP_measqv(yf, 1, &variance, ne00);
3682
3736
  #else
3683
- variance = ggml_vec_cvar_f32(ne00, y, x, mean);
3737
+ variance = ggml_vec_cvar_f32(ne00, yf, xf, mean);
3684
3738
  #endif //GGML_USE_ACCELERATE
3685
3739
 
3686
- const float scale = 1.0f/sqrtf(variance + eps);
3687
- ggml_vec_scale_f32(ne00, y, scale);
3740
+ const float scale = 1.0f/sqrtf(variance + eps);
3741
+ ggml_vec_scale_f32(ne00, yf, scale);
3742
+ } else {
3743
+ float sum = 0.0;
3744
+ for (int64_t i00 = 0; i00 < ne00; i00++) {
3745
+ sum += *(const float *) (x + i00*nb00);
3746
+ }
3747
+ const float mean = sum/ne00;
3748
+
3749
+ float variance = 0.0f;
3750
+ for (int64_t i00 = 0; i00 < ne00; i00++) {
3751
+ const float v = *(const float *) (x + i00*nb00) - mean;
3752
+ *(float *) (y + i00*nb0) = v;
3753
+ variance += v * v;
3754
+ }
3755
+ variance /= ne00;
3756
+
3757
+ const float scale = 1.0f/sqrtf(variance + eps);
3758
+ for (int64_t i00 = 0; i00 < ne00; i00++) {
3759
+ *(float *) (y + i00*nb0) *= scale;
3760
+ }
3761
+ }
3688
3762
  }
3689
3763
  }
3690
3764
  }
@@ -3710,11 +3784,27 @@ void ggml_compute_forward_norm(
3710
3784
 
3711
3785
  // ggml_compute_forward_group_rms_norm
3712
3786
 
3787
+ // fusion kinds that can be combined with the rms_norm computation in a single pass.
3788
+ // extend this enum when adding new fused variants (e.g. FUSE_ADD, FUSE_MUL_ADD, ...).
3789
+ enum ggml_rms_norm_fuse_op {
3790
+ GGML_RMS_NORM_FUSE_OP_NONE,
3791
+ GGML_RMS_NORM_FUSE_OP_MUL,
3792
+ };
3793
+
3794
+ template <ggml_rms_norm_fuse_op FUSE_OP>
3713
3795
  static void ggml_compute_forward_rms_norm_f32(
3714
3796
  const ggml_compute_params * params,
3715
- ggml_tensor * dst) {
3797
+ ggml_tensor * dst_rms_norm,
3798
+ ggml_tensor * dst_fused = nullptr) {
3716
3799
 
3717
- const ggml_tensor * src0 = dst->src[0];
3800
+ const ggml_tensor * src0 = dst_rms_norm->src[0];
3801
+ const ggml_tensor * src1 = nullptr;
3802
+ ggml_tensor * dst = dst_rms_norm;
3803
+
3804
+ if constexpr (FUSE_OP == GGML_RMS_NORM_FUSE_OP_MUL) {
3805
+ src1 = (dst_fused->src[0] == dst_rms_norm) ? dst_fused->src[1] : dst_fused->src[0];
3806
+ dst = dst_fused;
3807
+ }
3718
3808
 
3719
3809
  GGML_ASSERT(ggml_are_same_shape(src0, dst));
3720
3810
 
@@ -3723,11 +3813,10 @@ static void ggml_compute_forward_rms_norm_f32(
3723
3813
  const int ith = params->ith;
3724
3814
  const int nth = params->nth;
3725
3815
 
3726
- GGML_TENSOR_UNARY_OP_LOCALS
3816
+ GGML_TENSOR_BINARY_OP_LOCALS
3727
3817
 
3728
3818
  float eps;
3729
- memcpy(&eps, dst->op_params, sizeof(float));
3730
-
3819
+ memcpy(&eps, dst_rms_norm->op_params, sizeof(float));
3731
3820
  GGML_ASSERT(eps >= 0.0f);
3732
3821
 
3733
3822
  // TODO: optimize
@@ -3737,25 +3826,32 @@ static void ggml_compute_forward_rms_norm_f32(
3737
3826
  const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
3738
3827
 
3739
3828
  ggml_float sum = 0.0;
3829
+ // worth switching to explicit SIMD?
3740
3830
  for (int64_t i00 = 0; i00 < ne00; i00++) {
3741
3831
  sum += (ggml_float)(x[i00] * x[i00]);
3742
3832
  }
3743
3833
 
3744
- const float mean = sum/ne00;
3745
-
3746
- float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
3747
-
3748
- memcpy(y, x, ne00 * sizeof(float));
3749
- // for (int i00 = 0; i00 < ne00; i00++) {
3750
- // y[i00] = x[i00];
3751
- // }
3752
-
3834
+ const float mean = sum/ne00;
3753
3835
  const float scale = 1.0f/sqrtf(mean + eps);
3754
3836
 
3755
3837
  // if you hit this, likely you got an inf somewhere earlier
3756
3838
  assert(scale > 0.0f);
3757
3839
 
3758
- ggml_vec_scale_f32(ne00, y, scale);
3840
+ float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
3841
+
3842
+ if constexpr (FUSE_OP == GGML_RMS_NORM_FUSE_OP_MUL) {
3843
+ const int64_t i11 = i01 % ne11;
3844
+ const int64_t i12 = i02 % ne12;
3845
+ const int64_t i13 = i03 % ne13;
3846
+ const float * w = (float *) ((char *) src1->data + i11*nb11 + i12*nb12 + i13*nb13);
3847
+
3848
+ for (int64_t i00 = 0; i00 < ne00; i00++) {
3849
+ y[i00] = x[i00] * scale * w[i00];
3850
+ }
3851
+ } else {
3852
+ memcpy(y, x, ne00 * sizeof(float));
3853
+ ggml_vec_scale_f32(ne00, y, scale);
3854
+ }
3759
3855
  }
3760
3856
  }
3761
3857
  }
@@ -3770,7 +3866,31 @@ void ggml_compute_forward_rms_norm(
3770
3866
  switch (src0->type) {
3771
3867
  case GGML_TYPE_F32:
3772
3868
  {
3773
- ggml_compute_forward_rms_norm_f32(params, dst);
3869
+ ggml_compute_forward_rms_norm_f32<GGML_RMS_NORM_FUSE_OP_NONE>(params, dst);
3870
+ } break;
3871
+ default:
3872
+ {
3873
+ GGML_ABORT("fatal error");
3874
+ }
3875
+ }
3876
+ }
3877
+
3878
+ // Fused RMS_NORM + MUL: computes dst = rms_norm(src0) * src1 in a single pass.
3879
+ // This avoids materializing the intermediate rms_norm result in memory.
3880
+ void ggml_compute_forward_rms_norm_mul_fused(
3881
+ const ggml_compute_params * params,
3882
+ ggml_tensor * dst_rms_norm,
3883
+ ggml_tensor * dst_mul) {
3884
+
3885
+ GGML_ASSERT(dst_mul != nullptr);
3886
+ GGML_ASSERT(dst_mul->src[0] == dst_rms_norm || dst_mul->src[1] == dst_rms_norm);
3887
+
3888
+ const ggml_tensor * src0 = dst_rms_norm->src[0];
3889
+
3890
+ switch (src0->type) {
3891
+ case GGML_TYPE_F32:
3892
+ {
3893
+ ggml_compute_forward_rms_norm_f32<GGML_RMS_NORM_FUSE_OP_MUL>(params, dst_rms_norm, dst_mul);
3774
3894
  } break;
3775
3895
  default:
3776
3896
  {
@@ -3925,12 +4045,12 @@ static void ggml_compute_forward_rms_norm_back_f32(
3925
4045
  // dx := scale(dx, rrms)
3926
4046
  float * dx = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
3927
4047
 
3928
- // dx[i00] = (x*(-sum_xdz/sum_eps) + dz) / sqrtf(mean_eps)
3929
- ggml_vec_cpy_f32 (ne00, dx, x);
3930
- // ggml_vec_scale_f32(ne00, dx, -mean_xdz/mean_eps);
3931
- ggml_vec_scale_f32(ne00, dx, (float)(-sum_xdz)/sum_eps);
3932
- ggml_vec_acc_f32 (ne00, dx, dz);
3933
- ggml_vec_scale_f32(ne00, dx, rrms);
4048
+ // dx[i00] = (dz + x*(-sum_xdz/sum_eps)) * rrms
4049
+ // note: https://github.com/ggml-org/ggml/issues/1491
4050
+ const float scale_x = (float) (-sum_xdz) / sum_eps;
4051
+ for (int64_t i00 = 0; i00 < ne00; i00++) {
4052
+ dx[i00] = (dz[i00] + x[i00] * scale_x) * rrms;
4053
+ }
3934
4054
  }
3935
4055
  }
3936
4056
  }
@@ -4059,8 +4179,6 @@ static void ggml_compute_forward_l2_norm_f32(
4059
4179
 
4060
4180
  GGML_ASSERT(ggml_are_same_shape(src0, dst));
4061
4181
 
4062
- GGML_ASSERT(src0->nb[0] == sizeof(float));
4063
-
4064
4182
  const int ith = params->ith;
4065
4183
  const int nth = params->nth;
4066
4184
 
@@ -4075,20 +4193,27 @@ static void ggml_compute_forward_l2_norm_f32(
4075
4193
  for (int64_t i03 = 0; i03 < ne03; i03++) {
4076
4194
  for (int64_t i02 = 0; i02 < ne02; i02++) {
4077
4195
  for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
4078
- const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
4196
+ const char * x = (const char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
4079
4197
 
4080
4198
  ggml_float sum = 0.0;
4081
4199
  for (int64_t i00 = 0; i00 < ne00; i00++) {
4082
- sum += (ggml_float)(x[i00] * x[i00]);
4200
+ const float xi = *(const float *) (x + i00*nb00);
4201
+ sum += (ggml_float)(xi * xi);
4083
4202
  }
4084
4203
 
4085
- float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
4086
-
4087
- memcpy(y, x, ne00 * sizeof(float));
4088
-
4089
4204
  const float scale = 1.0f/fmaxf(sqrtf(sum), eps);
4090
4205
 
4091
- ggml_vec_scale_f32(ne00, y, scale);
4206
+ char * y = (char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3;
4207
+
4208
+ if (nb00 == sizeof(float) && nb0 == sizeof(float)) {
4209
+ memcpy(y, x, ne00 * sizeof(float));
4210
+ ggml_vec_scale_f32(ne00, (float *) y, scale);
4211
+ } else {
4212
+ for (int64_t i00 = 0; i00 < ne00; i00++) {
4213
+ const float xi = *(const float *) (x + i00*nb00);
4214
+ *(float *) (y + i00*nb0) = xi * scale;
4215
+ }
4216
+ }
4092
4217
  }
4093
4218
  }
4094
4219
  }
@@ -4331,6 +4456,8 @@ void ggml_compute_forward_out_prod(
4331
4456
  const ggml_tensor * src0 = dst->src[0];
4332
4457
 
4333
4458
  switch (src0->type) {
4459
+ case GGML_TYPE_Q1_0:
4460
+ case GGML_TYPE_Q2_0:
4334
4461
  case GGML_TYPE_Q4_0:
4335
4462
  case GGML_TYPE_Q4_1:
4336
4463
  case GGML_TYPE_Q5_0:
@@ -4606,6 +4733,8 @@ void ggml_compute_forward_set(
4606
4733
  } break;
4607
4734
  case GGML_TYPE_F16:
4608
4735
  case GGML_TYPE_BF16:
4736
+ case GGML_TYPE_Q1_0:
4737
+ case GGML_TYPE_Q2_0:
4609
4738
  case GGML_TYPE_Q4_0:
4610
4739
  case GGML_TYPE_Q4_1:
4611
4740
  case GGML_TYPE_Q5_0:
@@ -4829,6 +4958,8 @@ void ggml_compute_forward_get_rows(
4829
4958
  const ggml_tensor * src0 = dst->src[0];
4830
4959
 
4831
4960
  switch (src0->type) {
4961
+ case GGML_TYPE_Q1_0:
4962
+ case GGML_TYPE_Q2_0:
4832
4963
  case GGML_TYPE_Q4_0:
4833
4964
  case GGML_TYPE_Q4_1:
4834
4965
  case GGML_TYPE_Q5_0:
@@ -4894,8 +5025,8 @@ void ggml_compute_forward_get_rows(
4894
5025
  //}
4895
5026
  }
4896
5027
 
4897
- template<typename idx_t>
4898
- static void ggml_compute_forward_set_rows_f32(
5028
+ template<typename src_t, typename idx_t>
5029
+ static void ggml_compute_forward_set_rows_impl(
4899
5030
  const ggml_compute_params * params,
4900
5031
  ggml_tensor * dst) {
4901
5032
 
@@ -4910,7 +5041,7 @@ static void ggml_compute_forward_set_rows_f32(
4910
5041
  assert(ne0 == nc);
4911
5042
  assert(ne2 == ne02);
4912
5043
  assert(ne3 == ne03);
4913
- assert(src0->type == GGML_TYPE_F32);
5044
+ GGML_ASSERT(src0->type == GGML_TYPE_F32 || (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16));
4914
5045
  assert(ne02 % ne11 == 0);
4915
5046
  assert(ne03 % ne12 == 0);
4916
5047
 
@@ -4924,6 +5055,8 @@ static void ggml_compute_forward_set_rows_f32(
4924
5055
  const int64_t ir0 = dr*ith;
4925
5056
  const int64_t ir1 = std::min(ir0 + dr, nr);
4926
5057
 
5058
+ const size_t rs = ggml_row_size(src0->type, nc);
5059
+
4927
5060
  ggml_from_float_t const from_float = ggml_get_type_traits_cpu(dst->type)->from_float;
4928
5061
 
4929
5062
  for (int64_t i03 = 0; i03 < ne03; ++i03) {
@@ -4937,9 +5070,18 @@ static void ggml_compute_forward_set_rows_f32(
4937
5070
 
4938
5071
  GGML_ASSERT(i1 >= 0 && i1 < ne1);
4939
5072
 
4940
- from_float(
4941
- (const float *) ((char *) src0->data + i*nb01 + i02*nb02 + i03*nb03),
4942
- ((char *) dst->data + i1*nb1 + i02*nb2 + i03*nb3), nc);
5073
+ if constexpr (std::is_same_v<src_t, float>) {
5074
+ from_float(
5075
+ (const float *) ((char *) src0->data + i*nb01 + i02*nb02 + i03*nb03),
5076
+ ((char *) dst->data + i1*nb1 + i02*nb2 + i03*nb3), nc);
5077
+ } else if constexpr (std::is_same_v<src_t, ggml_fp16_t>) {
5078
+ memcpy(
5079
+ ((char *) dst->data + i1*nb1 + i02*nb2 + i03*nb3),
5080
+ ((char *) src0->data + i*nb01 + i02*nb02 + i03*nb03),
5081
+ rs);
5082
+ } else {
5083
+ GGML_ABORT("src0->type = %d (%s) not supported", src0->type, ggml_type_name(src0->type));
5084
+ }
4943
5085
  }
4944
5086
  }
4945
5087
  }
@@ -4956,13 +5098,27 @@ void ggml_compute_forward_set_rows(
4956
5098
  case GGML_TYPE_F32:
4957
5099
  {
4958
5100
  if (src1->type == GGML_TYPE_I64) {
4959
- ggml_compute_forward_set_rows_f32<int64_t>(params, dst);
5101
+ ggml_compute_forward_set_rows_impl<float, int64_t>(params, dst);
4960
5102
  } else if (src1->type == GGML_TYPE_I32) {
4961
- ggml_compute_forward_set_rows_f32<int32_t>(params, dst);
5103
+ ggml_compute_forward_set_rows_impl<float, int32_t>(params, dst);
4962
5104
  } else {
4963
5105
  GGML_ABORT("src1->type = %d (%s) not supported", src1->type, ggml_type_name(src1->type));
4964
5106
  }
4965
5107
  } break;
5108
+ case GGML_TYPE_F16:
5109
+ {
5110
+ if (dst->type == GGML_TYPE_F16) {
5111
+ if (src1->type == GGML_TYPE_I64) {
5112
+ ggml_compute_forward_set_rows_impl<ggml_fp16_t, int64_t>(params, dst);
5113
+ } else if (src1->type == GGML_TYPE_I32) {
5114
+ ggml_compute_forward_set_rows_impl<ggml_fp16_t, int32_t>(params, dst);
5115
+ } else {
5116
+ GGML_ABORT("src1->type = %d (%s) not supported", src1->type, ggml_type_name(src1->type));
5117
+ }
5118
+ } else {
5119
+ GGML_ABORT("dst->type = %d (%s) not supported with src0->type = %d (%s)", dst->type, ggml_type_name(dst->type), src0->type, ggml_type_name(src0->type));
5120
+ }
5121
+ } break;
4966
5122
  default:
4967
5123
  {
4968
5124
  GGML_ABORT("src0->type = %d (%s) not supported", src0->type, ggml_type_name(src0->type));
@@ -5554,6 +5710,8 @@ void ggml_compute_forward_clamp(
5554
5710
  ggml_compute_forward_clamp_f16(params, dst);
5555
5711
  } break;
5556
5712
  case GGML_TYPE_BF16:
5713
+ case GGML_TYPE_Q1_0:
5714
+ case GGML_TYPE_Q2_0:
5557
5715
  case GGML_TYPE_Q4_0:
5558
5716
  case GGML_TYPE_Q4_1:
5559
5717
  case GGML_TYPE_Q5_0:
@@ -6643,6 +6801,78 @@ static inline int64_t ggml_wrap_around(int64_t coord, int64_t size) {
6643
6801
  return (coord + size) % size; // adding size avoids negative number weirdness
6644
6802
  }
6645
6803
 
6804
+ // ggml_compute_forward_col2im_1d
6805
+ //
6806
+ // Scatter-add columns [K*OC, T_in] -> signal [T_out, OC]
6807
+ // where T_out = (T_in - 1)*s + K - 2*p. Gather approach: each output reads ceil(K/s) inputs.
6808
+ // Parallelized over the time axis so the split stays balanced whatever OC is.
6809
+ // Supports F32, F16, BF16 input/output (same type), F32 accumulator.
6810
+
6811
+ template <typename elem_t>
6812
+ static void ggml_compute_forward_col2im_1d_impl(
6813
+ const ggml_compute_params * params,
6814
+ ggml_tensor * dst) {
6815
+
6816
+ const ggml_tensor * src = dst->src[0]; // [K*OC, T_in]
6817
+
6818
+ GGML_ASSERT(ggml_is_contiguous(src));
6819
+ GGML_ASSERT(ggml_is_contiguous(dst));
6820
+
6821
+ const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
6822
+ const int32_t OC = ((const int32_t *)(dst->op_params))[1];
6823
+ const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
6824
+
6825
+ const int64_t K_OC = src->ne[0];
6826
+ const int64_t T_in = src->ne[1];
6827
+ const int64_t K = K_OC / OC;
6828
+ const int64_t T_out = dst->ne[0];
6829
+
6830
+ const elem_t * col_data = (const elem_t *) src->data;
6831
+ elem_t * dst_data = (elem_t *) dst->data;
6832
+
6833
+ const int ith = params->ith;
6834
+ const int nth = params->nth;
6835
+
6836
+ // Parallelize over the time axis: the split stays balanced whatever OC is,
6837
+ // down to OC = 1 for mono audio, and threads read disjoint column bands
6838
+ const int64_t dr = (T_out + nth - 1) / nth;
6839
+ const int64_t it0 = dr * ith;
6840
+ const int64_t it1 = it0 + dr < T_out ? it0 + dr : T_out;
6841
+
6842
+ for (int64_t oc = 0; oc < OC; oc++) {
6843
+ for (int64_t t_out = it0; t_out < it1; t_out++) {
6844
+ const int64_t t_abs = t_out + p0; // absolute position in uncropped signal
6845
+ // Gather: find all (t_in, k) where t_in * s + k == t_abs, 0 <= k < K
6846
+ int64_t t_in_min = (t_abs - K + 1 + s0 - 1) / s0; // ceil((t_abs-K+1)/s)
6847
+ if (t_in_min < 0) t_in_min = 0;
6848
+ int64_t t_in_max = t_abs / s0;
6849
+ if (t_in_max >= T_in) t_in_max = T_in - 1;
6850
+
6851
+ float sum = 0.0f;
6852
+ for (int64_t t_in = t_in_min; t_in <= t_in_max; t_in++) {
6853
+ int64_t k = t_abs - t_in * s0;
6854
+ if (k >= 0 && k < K) {
6855
+ // col layout: [K*OC, T_in], element (oc*K+k, t_in)
6856
+ sum += type_conversion_table<elem_t>::to_f32(col_data[(oc * K + k) + t_in * K_OC]);
6857
+ }
6858
+ }
6859
+ // dst layout: [T_out, OC], element (t_out, oc)
6860
+ dst_data[t_out + oc * T_out] = type_conversion_table<elem_t>::from_f32(sum);
6861
+ }
6862
+ }
6863
+ }
6864
+
6865
+ void ggml_compute_forward_col2im_1d(
6866
+ const ggml_compute_params * params,
6867
+ ggml_tensor * dst) {
6868
+ switch (dst->src[0]->type) {
6869
+ case GGML_TYPE_F32: ggml_compute_forward_col2im_1d_impl<float> (params, dst); break;
6870
+ case GGML_TYPE_F16: ggml_compute_forward_col2im_1d_impl<ggml_fp16_t>(params, dst); break;
6871
+ case GGML_TYPE_BF16: ggml_compute_forward_col2im_1d_impl<ggml_bf16_t>(params, dst); break;
6872
+ default: GGML_ABORT("col2im_1d: unsupported type %d", dst->src[0]->type);
6873
+ }
6874
+ }
6875
+
6646
6876
  // ggml_compute_forward_conv_2d
6647
6877
 
6648
6878
 
@@ -6923,16 +7153,15 @@ void ggml_compute_forward_conv_3d(
6923
7153
  ggml_compute_forward_conv_3d_impl(params, src0, src1, dst, src0->type);
6924
7154
  }
6925
7155
 
6926
- // ggml_compute_forward_conv_transpose_2d
6927
-
6928
- void ggml_compute_forward_conv_transpose_2d(
6929
- const ggml_compute_params * params,
6930
- ggml_tensor * dst) {
7156
+ template <typename kernel_t>
7157
+ static void ggml_compute_forward_conv_transpose_2d_impl(
7158
+ const ggml_compute_params * params,
7159
+ ggml_tensor * dst) {
6931
7160
 
6932
7161
  const ggml_tensor * src0 = dst->src[0];
6933
7162
  const ggml_tensor * src1 = dst->src[1];
6934
7163
 
6935
- GGML_ASSERT(src0->type == GGML_TYPE_F16);
7164
+ GGML_ASSERT(src0->type == GGML_TYPE_F16 || src0->type == GGML_TYPE_F32);
6936
7165
  GGML_ASSERT(src1->type == GGML_TYPE_F32);
6937
7166
  GGML_ASSERT( dst->type == GGML_TYPE_F32);
6938
7167
 
@@ -6943,7 +7172,7 @@ void ggml_compute_forward_conv_transpose_2d(
6943
7172
 
6944
7173
  const int nk = ne00*ne01*ne02*ne03;
6945
7174
 
6946
- GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
7175
+ GGML_ASSERT(nb00 == ggml_type_size(src0->type));
6947
7176
  GGML_ASSERT(nb10 == sizeof(float));
6948
7177
 
6949
7178
  if (ith == 0) {
@@ -6951,12 +7180,12 @@ void ggml_compute_forward_conv_transpose_2d(
6951
7180
 
6952
7181
  // permute kernel data (src0) from (Kw x Kh x Cout x Cin) to (Cin x Kw x Kh x Cout)
6953
7182
  {
6954
- ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
7183
+ kernel_t * const wdata = (kernel_t *) params->wdata + 0;
6955
7184
 
6956
7185
  for (int64_t i03 = 0; i03 < ne03; i03++) {
6957
7186
  for (int64_t i02 = 0; i02 < ne02; i02++) {
6958
- const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i03*nb03 + i02*nb02);
6959
- ggml_fp16_t * dst_data = wdata + i02*ne01*ne00*ne03;
7187
+ const kernel_t * const src = (kernel_t *)((char *) src0->data + i03*nb03 + i02*nb02);
7188
+ kernel_t * dst_data = wdata + i02*ne01*ne00*ne03;
6960
7189
  for (int64_t i01 = 0; i01 < ne01; i01++) {
6961
7190
  for (int64_t i00 = 0; i00 < ne00; i00++) {
6962
7191
  dst_data[i01*ne00*ne03 + i00*ne03 + i03] = src[i01 * ne00 + i00];
@@ -6968,13 +7197,17 @@ void ggml_compute_forward_conv_transpose_2d(
6968
7197
 
6969
7198
  // permute source data (src1) from (Sw x Sh x Cin) to (Cin x Sw x Sh)
6970
7199
  {
6971
- ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk;
7200
+ kernel_t * const wdata = (kernel_t *) params->wdata + nk;
6972
7201
  for (int i12 = 0; i12 < ne12; i12++) {
6973
7202
  for (int i11 = 0; i11 < ne11; i11++) {
6974
7203
  const float * const src = (float *)((char *) src1->data + i12*nb12 + i11*nb11);
6975
- ggml_fp16_t * dst_data = wdata + i11*ne10*ne12;
7204
+ kernel_t * dst_data = wdata + i11*ne10*ne12;
6976
7205
  for (int i10 = 0; i10 < ne10; i10++) {
6977
- dst_data[i10*ne12 + i12] = GGML_CPU_FP32_TO_FP16(src[i10]);
7206
+ if constexpr (std::is_same_v<kernel_t, ggml_fp16_t>) {
7207
+ dst_data[i10*ne12 + i12] = GGML_CPU_FP32_TO_FP16(src[i10]);
7208
+ } else {
7209
+ dst_data[i10*ne12 + i12] = src[i10];
7210
+ }
6978
7211
  }
6979
7212
  }
6980
7213
  }
@@ -6996,21 +7229,27 @@ void ggml_compute_forward_conv_transpose_2d(
6996
7229
  const int ip0 = dp*ith;
6997
7230
  const int ip1 = MIN(ip0 + dp, np);
6998
7231
 
6999
- ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
7000
- ggml_fp16_t * const wdata_src = wdata + nk;
7232
+ kernel_t * const wdata = (kernel_t *) params->wdata + 0;
7233
+ kernel_t * const wdata_src = wdata + nk;
7001
7234
 
7002
7235
  for (int i2 = ip0; i2 < ip1; i2++) { // Cout
7003
7236
  float * dst_data = (float *)((char *) dst->data + i2*nb2);
7004
- ggml_fp16_t * wdata_kernel = wdata + i2*ne01*ne00*ne03;
7237
+ kernel_t * wdata_kernel = wdata + i2*ne01*ne00*ne03;
7005
7238
  for (int i11 = 0; i11 < ne11; i11++) {
7006
7239
  for (int i10 = 0; i10 < ne10; i10++) {
7007
7240
  const int i1n = i11*ne10*ne12 + i10*ne12;
7008
7241
  for (int i01 = 0; i01 < ne01; i01++) {
7009
7242
  for (int i00 = 0; i00 < ne00; i00++) {
7010
7243
  float v = 0;
7011
- ggml_vec_dot_f16(ne03, &v, 0,
7012
- wdata_src + i1n, 0,
7013
- wdata_kernel + i01*ne00*ne03 + i00*ne03, 0, 1);
7244
+ if constexpr (std::is_same_v<kernel_t, ggml_fp16_t>) {
7245
+ ggml_vec_dot_f16(ne03, &v, 0,
7246
+ wdata_src + i1n, 0,
7247
+ wdata_kernel + i01*ne00*ne03 + i00*ne03, 0, 1);
7248
+ } else {
7249
+ ggml_vec_dot_f32(ne03, &v, 0,
7250
+ wdata_src + i1n, 0,
7251
+ wdata_kernel + i01*ne00*ne03 + i00*ne03, 0, 1);
7252
+ }
7014
7253
  dst_data[(i11*stride + i01)*ne0 + i10*stride + i00] += v;
7015
7254
  }
7016
7255
  }
@@ -7019,6 +7258,28 @@ void ggml_compute_forward_conv_transpose_2d(
7019
7258
  }
7020
7259
  }
7021
7260
 
7261
+ void ggml_compute_forward_conv_transpose_2d(
7262
+ const ggml_compute_params * params,
7263
+ ggml_tensor * dst) {
7264
+
7265
+ const ggml_tensor * src0 = dst->src[0];
7266
+
7267
+ switch (src0->type) {
7268
+ case GGML_TYPE_F16:
7269
+ {
7270
+ ggml_compute_forward_conv_transpose_2d_impl<ggml_fp16_t>(params, dst);
7271
+ } break;
7272
+ case GGML_TYPE_F32:
7273
+ {
7274
+ ggml_compute_forward_conv_transpose_2d_impl<float>(params, dst);
7275
+ } break;
7276
+ default:
7277
+ {
7278
+ GGML_ABORT("fatal error");
7279
+ }
7280
+ }
7281
+ }
7282
+
7022
7283
  // ggml_compute_forward_conv_2d_dw
7023
7284
 
7024
7285
  struct ggml_conv_2d_dw_params {
@@ -7038,6 +7299,13 @@ struct ggml_conv_2d_dw_params {
7038
7299
  int dilation_y;
7039
7300
  };
7040
7301
 
7302
+ static inline float ggml_conv_2d_dw_knl_f32(const char * data, int64_t i, ggml_type type) {
7303
+ if (type == GGML_TYPE_F16) {
7304
+ return GGML_FP16_TO_FP32(((const ggml_fp16_t *)data)[i]);
7305
+ }
7306
+ return ((const float *)data)[i];
7307
+ }
7308
+
7041
7309
  static void ggml_compute_forward_conv_2d_dw_cwhn(
7042
7310
  const ggml_compute_params * params,
7043
7311
  const ggml_tensor * src,
@@ -7046,7 +7314,8 @@ static void ggml_compute_forward_conv_2d_dw_cwhn(
7046
7314
  const ggml_conv_2d_dw_params & p) {
7047
7315
 
7048
7316
  const int64_t c = p.channels;
7049
- const float * knl_data = (const float *)kernel->data;
7317
+ const char * knl_data = (const char *)kernel->data;
7318
+ const ggml_type knl_type = kernel->type;
7050
7319
 
7051
7320
  const int64_t rows_total = p.dst_h * p.batch;
7052
7321
  const int64_t rows_per_thread = (rows_total + params->nth - 1) / params->nth;
@@ -7054,13 +7323,16 @@ static void ggml_compute_forward_conv_2d_dw_cwhn(
7054
7323
  const int64_t row_end = MIN(row_start + rows_per_thread, rows_total);
7055
7324
 
7056
7325
  #ifdef GGML_SIMD
7326
+ int64_t c_pkg_end = 0;
7327
+ int64_t pkg_size = GGML_F32_EPR;
7328
+ if (knl_type == GGML_TYPE_F32) {
7057
7329
  #if defined(__ARM_FEATURE_SVE)
7058
- const int64_t pkg_size = svcntw();
7330
+ pkg_size = svcntw();
7059
7331
  #else
7060
- const int64_t pkg_size = GGML_F32_EPR;
7332
+ pkg_size = GGML_F32_EPR;
7061
7333
  #endif
7062
- const int64_t pkg_count = c / pkg_size;
7063
- const int64_t c_pkg_end = pkg_count * pkg_size;
7334
+ c_pkg_end = (c / pkg_size) * pkg_size;
7335
+ }
7064
7336
  #else
7065
7337
  const int64_t c_pkg_end = 0;
7066
7338
  #endif
@@ -7074,7 +7346,6 @@ static void ggml_compute_forward_conv_2d_dw_cwhn(
7074
7346
  const int64_t src_x_base = dst_x * p.stride_x - p.pad_x;
7075
7347
 
7076
7348
  #ifdef GGML_SIMD
7077
- // Vectorized loop
7078
7349
  for (int64_t c_i = 0; c_i < c_pkg_end; c_i += pkg_size) {
7079
7350
  GGML_F32_VEC sum = GGML_F32_VEC_ZERO;
7080
7351
  for (int64_t knl_y = 0; knl_y < p.knl_h; ++knl_y) {
@@ -7087,7 +7358,8 @@ static void ggml_compute_forward_conv_2d_dw_cwhn(
7087
7358
  if (src_x < 0 || src_x >= p.src_w) {
7088
7359
  continue;
7089
7360
  }
7090
- GGML_F32_VEC k = GGML_F32_VEC_LOAD(knl_data + (knl_y * p.knl_w + knl_x) * c + c_i);
7361
+ const float * kp = (const float *)knl_data + (knl_y * p.knl_w + knl_x) * c + c_i;
7362
+ GGML_F32_VEC k = GGML_F32_VEC_LOAD(kp);
7091
7363
  GGML_F32_VEC s = GGML_F32_VEC_LOAD(src_data + (src_y * p.src_w + src_x) * c + c_i);
7092
7364
  sum = GGML_F32_VEC_FMA(sum, k, s);
7093
7365
  }
@@ -7095,7 +7367,6 @@ static void ggml_compute_forward_conv_2d_dw_cwhn(
7095
7367
  GGML_F32_VEC_STORE(dst_data + c_i, sum);
7096
7368
  }
7097
7369
  #endif
7098
- // Scalar loop
7099
7370
  for (int64_t c_i = c_pkg_end; c_i < c; ++c_i) {
7100
7371
  float sum = 0.0f;
7101
7372
  for (int64_t knl_y = 0; knl_y < p.knl_h; ++knl_y) {
@@ -7108,7 +7379,7 @@ static void ggml_compute_forward_conv_2d_dw_cwhn(
7108
7379
  if (src_x < 0 || src_x >= p.src_w) {
7109
7380
  continue;
7110
7381
  }
7111
- sum += knl_data[(knl_y * p.knl_w + knl_x) * c + c_i]
7382
+ sum += ggml_conv_2d_dw_knl_f32(knl_data, (knl_y * p.knl_w + knl_x) * c + c_i, knl_type)
7112
7383
  * src_data[(src_y * p.src_w + src_x) * c + c_i];
7113
7384
  }
7114
7385
  }
@@ -7129,9 +7400,11 @@ static void ggml_compute_forward_conv_2d_dw_whcn(
7129
7400
  const int64_t per_thread = (n + params->nth - 1) / params->nth;
7130
7401
  const int64_t start = params->ith * per_thread;
7131
7402
  const int64_t end = MIN(start + per_thread, n);
7403
+ const char * knl_base = (const char *)kernel->data;
7404
+ const ggml_type knl_type = kernel->type;
7132
7405
 
7133
7406
  for (int64_t i = start; i < end; ++i) {
7134
- const float * knl_data = (const float *)kernel->data + (i % p.channels) * p.knl_w * p.knl_h;
7407
+ const int64_t knl_offset = (i % p.channels) * p.knl_w * p.knl_h;
7135
7408
  const float * src_data = (const float *)src->data + i * p.src_w * p.src_h;
7136
7409
  float * dst_data = (float *)dst->data + i * p.dst_w * p.dst_h;
7137
7410
 
@@ -7149,7 +7422,7 @@ static void ggml_compute_forward_conv_2d_dw_whcn(
7149
7422
  if (src_x < 0 || src_x >= p.src_w) {
7150
7423
  continue;
7151
7424
  }
7152
- sum += knl_data[knl_y * p.knl_w + knl_x]
7425
+ sum += ggml_conv_2d_dw_knl_f32(knl_base, knl_offset + knl_y * p.knl_w + knl_x, knl_type)
7153
7426
  * src_data[src_y * p.src_w + src_x];
7154
7427
  }
7155
7428
  }
@@ -7181,13 +7454,13 @@ void ggml_compute_forward_conv_2d_dw(
7181
7454
  p.dilation_x = dst->op_params[4];
7182
7455
  p.dilation_y = dst->op_params[5];
7183
7456
 
7457
+ GGML_ASSERT(kernel->type == GGML_TYPE_F32 || kernel->type == GGML_TYPE_F16);
7184
7458
  GGML_ASSERT(kernel->ne[3] == p.channels);
7185
7459
  GGML_ASSERT(dst->ne[3] == p.batch);
7186
7460
 
7187
7461
  if (ggml_is_contiguous(src)) {
7188
7462
  ggml_compute_forward_conv_2d_dw_whcn(params, src, kernel, dst, p);
7189
7463
  } else if (ggml_is_contiguous_channels(src)) {
7190
- // kernel should also have channels most contiguous in memory
7191
7464
  GGML_ASSERT(kernel->nb[0] >= kernel->nb[2] && kernel->nb[1] >= kernel->nb[0]);
7192
7465
  ggml_compute_forward_conv_2d_dw_cwhn(params, src, kernel, dst, p);
7193
7466
  } else {
@@ -8837,7 +9110,12 @@ static void ggml_compute_forward_flash_attn_ext_f16(
8837
9110
  k->type == v->type &&
8838
9111
  neq1 >= Q_TILE_SZ);
8839
9112
  #ifdef GGML_SIMD
8840
- use_tiled &= (DV % GGML_F32_EPR == 0);
9113
+ #if defined(__ARM_FEATURE_SVE)
9114
+ const int64_t f32_epr = svcntw();
9115
+ #else
9116
+ const int64_t f32_epr = GGML_F32_EPR;
9117
+ #endif
9118
+ use_tiled &= (DV % f32_epr == 0);
8841
9119
  #endif
8842
9120
  int current_chunk = ith;
8843
9121
 
@@ -9922,13 +10200,9 @@ static void ggml_compute_forward_rwkv_wkv6_f32(
9922
10200
  const int ith = params->ith;
9923
10201
  const int nth = params->nth;
9924
10202
 
9925
- if (ith >= HEADS) {
9926
- return;
9927
- }
9928
-
9929
- const int h_start = (HEADS * ith) / nth;
9930
- const int h_end = ((HEADS * (ith + 1)) / nth < HEADS) ?
9931
- (HEADS * (ith + 1)) / nth : HEADS;
10203
+ const int h_start = (HEADS * (ith )) / nth;
10204
+ const int h_end = ((HEADS * (ith + 1)) / nth < HEADS) ?
10205
+ (HEADS * (ith + 1)) / nth : HEADS;
9932
10206
 
9933
10207
  float * k = (float *) dst->src[0]->data;
9934
10208
  float * v = (float *) dst->src[1]->data;
@@ -10139,13 +10413,9 @@ static void ggml_compute_forward_gla_f32(
10139
10413
  const int ith = params->ith;
10140
10414
  const int nth = params->nth;
10141
10415
 
10142
- if (ith >= HEADS) {
10143
- return;
10144
- }
10145
-
10146
- const int h_start = (HEADS * ith) / nth;
10147
- const int h_end = ((HEADS * (ith + 1)) / nth < HEADS) ?
10148
- (HEADS * (ith + 1)) / nth : HEADS;
10416
+ const int h_start = (HEADS * (ith )) / nth;
10417
+ const int h_end = ((HEADS * (ith + 1)) / nth < HEADS) ?
10418
+ (HEADS * (ith + 1)) / nth : HEADS;
10149
10419
 
10150
10420
  float * k = (float *) dst->src[0]->data;
10151
10421
  float * v = (float *) dst->src[1]->data;
@@ -10437,19 +10707,29 @@ static void ggml_compute_forward_gated_delta_net_one_chunk(
10437
10707
 
10438
10708
  const bool kda = (neg0 == S_v);
10439
10709
 
10440
- // scratch layout per thread: [delta(S_v)]
10441
- const int64_t scratch_per_thread = S_v;
10710
+ // K (snapshot slot count) is an op param; state holds s0 only [S_v, S_v, H, n_seqs].
10711
+ const int64_t K = ggml_get_op_params_i32(dst, 0);
10712
+ GGML_ASSERT(K >= 1);
10713
+ // per-seq stride in floats (seq s starts at state + s * seq_stride)
10714
+ const int64_t state_seq_stride = src_state->nb[3] / sizeof(float);
10715
+
10716
+ const int64_t per_thread = S_v + (K > 1 ? S_v * S_v : 0);
10442
10717
  const int ith = params->ith;
10443
10718
 
10444
- float * delta = (float *)params->wdata + ith * scratch_per_thread + CACHE_LINE_SIZE_F32;
10719
+ float * delta = (float *)params->wdata + ith * per_thread + CACHE_LINE_SIZE_F32;
10720
+ float * state_work = K > 1 ? (delta + S_v) : nullptr;
10445
10721
 
10446
10722
  // output layout: [attn_scores | new_states]
10447
- // attn_scores: S_v * H * n_tokens * n_seqs floats
10448
- // new_states: S_v * S_v * H * n_seqs floats
10449
- const int64_t attn_score_elems = S_v * H * n_tokens * n_seqs;
10723
+ // attn_scores: S_v * H * n_tokens * n_seqs floats
10724
+ // new_states: S_v * S_v * H * n_seqs * K floats (K snapshot slots; last min(n_tokens, K))
10725
+ const int64_t attn_score_elems = S_v * H * n_tokens * n_seqs;
10726
+ const int64_t state_size_per_snap = S_v * S_v * H * n_seqs;
10450
10727
  float * attn_out_base = (float *)dst->data;
10451
10728
  float * state_out_base = (float *)dst->data + attn_score_elems;
10452
10729
 
10730
+ // snapshot slot mapping: slot 0 = most recent state, slot s = s tokens back.
10731
+ // When n_tokens < K only slots 0..n_tokens-1 are written; older slots are caller-owned.
10732
+
10453
10733
  const float * state_in_base = (const float *)src_state->data;
10454
10734
 
10455
10735
  //const int64_t rq1 = nev1 / neq1;
@@ -10469,10 +10749,15 @@ static void ggml_compute_forward_gated_delta_net_one_chunk(
10469
10749
  const int64_t iq3 = iv3 / rq3;
10470
10750
  const int64_t ik3 = iv3 / rk3;
10471
10751
 
10472
- float * s_out = state_out_base + (iv3 * H + iv1) * S_v * S_v;
10752
+ // For K=1, write directly to the single output slot to avoid an extra memcpy at the end.
10753
+ // For K>1, work in scratch and copy out per-token when the slot is in range.
10754
+ float * s_out = (K > 1)
10755
+ ? state_work
10756
+ : state_out_base + (iv3 * H + iv1) * S_v * S_v;
10473
10757
 
10474
- // copy input state into output buffer and operate in-place
10475
- const float * s_in = state_in_base + (iv3 * H + iv1) * S_v * S_v;
10758
+ // copy input state into the working buffer and operate in-place
10759
+ // state layout [S_v, S_v, H, n_seqs]: seq iv3 starts at iv3 * state_seq_stride.
10760
+ const float * s_in = state_in_base + iv3 * state_seq_stride + iv1 * S_v * S_v;
10476
10761
  memcpy(s_out, s_in, S_v * S_v * sizeof(float));
10477
10762
 
10478
10763
  // attn output pointer for first token of this (head, seq)
@@ -10522,6 +10807,15 @@ static void ggml_compute_forward_gated_delta_net_one_chunk(
10522
10807
  }
10523
10808
 
10524
10809
  attn_data += S_v * H; // advance to next token
10810
+
10811
+ if (K > 1) {
10812
+ const int64_t target_slot = n_tokens - 1 - t;
10813
+ if (target_slot >= 0 && target_slot < K) {
10814
+ float * curr_state_o = state_out_base + target_slot * state_size_per_snap +
10815
+ (iv3 * H + iv1) * S_v * S_v;
10816
+ memcpy(curr_state_o, s_out, S_v * S_v * sizeof(float));
10817
+ }
10818
+ }
10525
10819
  }
10526
10820
  }
10527
10821
  }
@@ -10602,13 +10896,9 @@ static void ggml_compute_forward_rwkv_wkv7_f32(
10602
10896
  const int ith = params->ith;
10603
10897
  const int nth = params->nth;
10604
10898
 
10605
- if (ith >= HEADS) {
10606
- return;
10607
- }
10608
-
10609
- const int h_start = (HEADS * ith) / nth;
10610
- const int h_end = ((HEADS * (ith + 1)) / nth < HEADS) ?
10611
- (HEADS * (ith + 1)) / nth : HEADS;
10899
+ const int h_start = (HEADS * (ith )) / nth;
10900
+ const int h_end = ((HEADS * (ith + 1)) / nth < HEADS) ?
10901
+ (HEADS * (ith + 1)) / nth : HEADS;
10612
10902
 
10613
10903
  float * r = (float *) dst->src[0]->data;
10614
10904
  float * w = (float *) dst->src[1]->data;
@@ -11186,3 +11476,95 @@ void ggml_compute_forward_opt_step_sgd(const ggml_compute_params * params, ggml_
11186
11476
  }
11187
11477
  }
11188
11478
  }
11479
+
11480
+ static void ggml_compute_forward_fwht_f32(const ggml_compute_params * params, ggml_tensor * dst) {
11481
+ const ggml_tensor * src0 = dst->src[0];
11482
+ const ggml_tensor * src1 = dst->src[1];
11483
+
11484
+ GGML_ASSERT(src1->type == GGML_TYPE_F32);
11485
+ GGML_ASSERT(dst->type == GGML_TYPE_F32);
11486
+
11487
+ GGML_TENSOR_BINARY_OP_LOCALS
11488
+
11489
+ const int ith = params->ith;
11490
+ const int nth = params->nth;
11491
+
11492
+ const int64_t n = ne10;
11493
+ GGML_ASSERT((n & (n - 1)) == 0); // must be power of 2
11494
+
11495
+ const int64_t nr = ne11 * ne12 * ne13;
11496
+ const int64_t rows_per_thread = (nr + nth - 1) / nth;
11497
+ const int64_t start_row = ith * rows_per_thread;
11498
+ const int64_t end_row = MIN(start_row + rows_per_thread, nr);
11499
+
11500
+ const float scale = 1.0f / sqrtf((float)n);
11501
+
11502
+ #if defined(GGML_SIMD)
11503
+ const GGML_F32_VEC v_minus_one = GGML_F32_VEC_SET1(-1.0f);
11504
+ #endif
11505
+
11506
+ for (int64_t r = start_row; r < end_row; r++) {
11507
+ const int64_t i13 = r / (ne11 * ne12);
11508
+ const int64_t i12 = (r - i13 * ne11 * ne12) / ne11;
11509
+ const int64_t i11 = r - i13 * ne11 * ne12 - i12 * ne11;
11510
+
11511
+ const float * src_row = (const float *) ((const char *) src1->data + i11 * nb11 + i12 * nb12 + i13 * nb13);
11512
+ float * dst_row = (float *) ((char *) dst->data + i11 * nb1 + i12 * nb2 + i13 * nb3);
11513
+
11514
+ for (int64_t j = 0; j < n; j++) {
11515
+ dst_row[j] = src_row[j] * scale;
11516
+ }
11517
+
11518
+ // Scalar passes
11519
+ #if defined(GGML_SIMD)
11520
+ #if defined(__ARM_FEATURE_SVE)
11521
+ const int step = svcntw();
11522
+ #else
11523
+ const int step = GGML_F32_EPR;
11524
+ #endif
11525
+ #else
11526
+ const int step = n;
11527
+ #endif
11528
+ for (int64_t len = 1; len < step && len < n; len <<= 1) {
11529
+ for (int64_t i = 0; i < n; i += 2 * len) {
11530
+ for (int64_t j = 0; j < len; j++) {
11531
+ float u = dst_row[i + j];
11532
+ float v = dst_row[i + len + j];
11533
+ dst_row[i + j] = u + v;
11534
+ dst_row[i + len + j] = u - v;
11535
+ }
11536
+ }
11537
+ }
11538
+
11539
+ // SIMD passes using GGML_F32_VEC_* macros for multi-architecture support
11540
+ #if defined(GGML_SIMD)
11541
+ for (int64_t len = step; len < n; len <<= 1) {
11542
+ for (int64_t i = 0; i < n; i += 2 * len) {
11543
+ for (int64_t j = 0; j < len; j += step) {
11544
+ GGML_F32_VEC u = GGML_F32_VEC_LOAD(dst_row + i + j);
11545
+ GGML_F32_VEC v = GGML_F32_VEC_LOAD(dst_row + i + len + j);
11546
+
11547
+ GGML_F32_VEC_STORE(dst_row + i + j, GGML_F32_VEC_ADD(u, v));
11548
+ GGML_F32_VEC_STORE(dst_row + i + len + j, GGML_F32_VEC_FMA(u, v, v_minus_one));
11549
+ }
11550
+ }
11551
+ }
11552
+ #endif
11553
+ }
11554
+ }
11555
+
11556
+ void ggml_compute_forward_fwht(const ggml_compute_params * params, ggml_tensor * dst) {
11557
+ const ggml_tensor * src1 = dst->src[1];
11558
+
11559
+ switch (src1->type) {
11560
+ case GGML_TYPE_F32:
11561
+ {
11562
+ ggml_compute_forward_fwht_f32(params, dst);
11563
+ }
11564
+ break;
11565
+ default:
11566
+ {
11567
+ GGML_ABORT("fatal error - fwht is F32 only");
11568
+ }
11569
+ }
11570
+ }