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.
- checksums.yaml +4 -4
- data/.document +3 -0
- data/.rdoc_options +2 -0
- data/README.md +43 -9
- data/Rakefile +18 -3
- data/ext/dependencies.rb +10 -4
- data/ext/dependencies_for_windows.rb +17 -0
- data/ext/extconf.rb +20 -8
- data/ext/options.rb +54 -14
- data/ext/options_for_windows.rb +51 -0
- data/ext/ruby_whisper.c +35 -42
- data/ext/ruby_whisper.h +141 -0
- data/ext/ruby_whisper_context.c +157 -29
- data/ext/ruby_whisper_log_queue.c +180 -0
- data/ext/ruby_whisper_log_settable.h +46 -0
- data/ext/ruby_whisper_parakeet.c +49 -0
- data/ext/ruby_whisper_parakeet_context.c +304 -0
- data/ext/ruby_whisper_parakeet_context_params.c +117 -0
- data/ext/ruby_whisper_parakeet_model.c +84 -0
- data/ext/ruby_whisper_parakeet_params.c +548 -0
- data/ext/ruby_whisper_parakeet_segment.c +157 -0
- data/ext/ruby_whisper_parakeet_token.c +188 -0
- data/ext/ruby_whisper_parakeet_transcribe.cpp +58 -0
- data/ext/ruby_whisper_params.c +265 -73
- data/ext/ruby_whisper_segment.c +6 -6
- data/ext/ruby_whisper_transcribe.cpp +23 -15
- data/ext/ruby_whisper_vad_context.c +30 -10
- data/ext/ruby_whisper_vad_context_detect.cpp +8 -9
- data/ext/ruby_whisper_vad_params.c +4 -4
- data/ext/ruby_whisper_vad_segment.c +2 -2
- data/ext/sources/CMakeLists.txt +42 -3
- data/ext/sources/CMakePresets.json +95 -0
- data/ext/sources/cmake/parakeet-config.cmake.in +30 -0
- data/ext/sources/cmake/parakeet.pc.in +10 -0
- data/ext/sources/cmake/whisper.pc.in +2 -2
- data/ext/sources/examples/CMakeLists.txt +4 -2
- data/ext/sources/examples/bench/bench.cpp +1 -1
- data/ext/sources/examples/cli/cli.cpp +52 -10
- data/ext/sources/examples/common-ggml.cpp +4 -0
- data/ext/sources/examples/common-whisper.cpp +139 -67
- data/ext/sources/examples/common-whisper.h +11 -0
- data/ext/sources/examples/ffmpeg-transcode.cpp +211 -341
- data/ext/sources/examples/parakeet-cli/CMakeLists.txt +8 -0
- data/ext/sources/examples/parakeet-cli/parakeet-cli.cpp +243 -0
- data/ext/sources/examples/parakeet-quantize/CMakeLists.txt +7 -0
- data/ext/sources/examples/parakeet-quantize/parakeet-quantize.cpp +230 -0
- data/ext/sources/examples/server/server.cpp +199 -163
- data/ext/sources/examples/vad-speech-segments/speech.cpp +3 -2
- data/ext/sources/ggml/CMakeLists.txt +21 -14
- data/ext/sources/ggml/cmake/FindNCCL.cmake +36 -0
- data/ext/sources/ggml/cmake/ggml-config.cmake.in +12 -2
- data/ext/sources/ggml/include/ggml-alloc.h +1 -0
- data/ext/sources/ggml/include/ggml-backend.h +72 -10
- data/ext/sources/ggml/include/ggml-cuda.h +2 -2
- data/ext/sources/ggml/include/ggml-rpc.h +3 -3
- data/ext/sources/ggml/include/ggml-sycl.h +8 -0
- data/ext/sources/ggml/include/ggml.h +103 -9
- data/ext/sources/ggml/include/gguf.h +10 -2
- data/ext/sources/ggml/src/CMakeLists.txt +30 -6
- data/ext/sources/ggml/src/ggml-alloc.c +5 -1
- data/ext/sources/ggml/src/ggml-backend-impl.h +22 -2
- data/ext/sources/ggml/src/ggml-backend-meta.cpp +2266 -0
- data/ext/sources/ggml/src/ggml-backend-reg.cpp +12 -0
- data/ext/sources/ggml/src/ggml-backend.cpp +110 -9
- data/ext/sources/ggml/src/ggml-blas/ggml-blas.cpp +4 -0
- data/ext/sources/ggml/src/ggml-cann/aclnn_ops.cpp +672 -257
- data/ext/sources/ggml/src/ggml-cann/aclnn_ops.h +71 -0
- data/ext/sources/ggml/src/ggml-cann/common.h +20 -10
- data/ext/sources/ggml/src/ggml-cann/ggml-cann.cpp +211 -30
- data/ext/sources/ggml/src/ggml-common.h +24 -2
- data/ext/sources/ggml/src/ggml-cpu/CMakeLists.txt +59 -30
- data/ext/sources/ggml/src/ggml-cpu/amx/amx.cpp +2 -0
- data/ext/sources/ggml/src/ggml-cpu/amx/mmq.cpp +21 -22
- data/ext/sources/ggml/src/ggml-cpu/arch/arm/quants.c +194 -11
- data/ext/sources/ggml/src/ggml-cpu/arch/arm/repack.cpp +65 -0
- data/ext/sources/ggml/src/ggml-cpu/arch/loongarch/quants.c +151 -1
- data/ext/sources/ggml/src/ggml-cpu/arch/powerpc/quants.c +0 -1
- data/ext/sources/ggml/src/ggml-cpu/arch/riscv/quants.c +4279 -1292
- data/ext/sources/ggml/src/ggml-cpu/arch/riscv/repack.cpp +5 -35
- data/ext/sources/ggml/src/ggml-cpu/arch/s390/quants.c +0 -1
- data/ext/sources/ggml/src/ggml-cpu/arch/wasm/quants.c +72 -1
- data/ext/sources/ggml/src/ggml-cpu/arch/x86/quants.c +319 -31
- data/ext/sources/ggml/src/ggml-cpu/arch/x86/repack.cpp +1 -1
- data/ext/sources/ggml/src/ggml-cpu/arch-fallback.h +12 -2
- data/ext/sources/ggml/src/ggml-cpu/cmake/FindSMTIME.cmake +32 -0
- data/ext/sources/ggml/src/ggml-cpu/ggml-cpu-impl.h +10 -0
- data/ext/sources/ggml/src/ggml-cpu/ggml-cpu.c +109 -5
- data/ext/sources/ggml/src/ggml-cpu/ggml-cpu.cpp +2 -0
- data/ext/sources/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +146 -134
- data/ext/sources/ggml/src/ggml-cpu/llamafile/sgemm.cpp +107 -82
- data/ext/sources/ggml/src/ggml-cpu/ops.cpp +501 -119
- data/ext/sources/ggml/src/ggml-cpu/ops.h +3 -0
- data/ext/sources/ggml/src/ggml-cpu/quants.c +106 -0
- data/ext/sources/ggml/src/ggml-cpu/quants.h +6 -0
- data/ext/sources/ggml/src/ggml-cpu/repack.cpp +3 -0
- data/ext/sources/ggml/src/ggml-cpu/simd-gemm.h +91 -1
- data/ext/sources/ggml/src/ggml-cpu/simd-mappings.h +14 -16
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime.cpp +1402 -687
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime.h +8 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime1_kernels.cpp +597 -2766
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime2_kernels.cpp +5768 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime_env.cpp +320 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime_env.h +55 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/ime_kernels.h +182 -19
- data/ext/sources/ggml/src/ggml-cpu/spacemit/repack.cpp +1795 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/repack.h +14 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/rvv_kernels.cpp +3178 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/rvv_kernels.h +95 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_barrier.h +34 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_mem_pool.cpp +760 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_mem_pool.h +32 -0
- data/ext/sources/ggml/src/ggml-cpu/spacemit/spine_tcm.h +409 -0
- data/ext/sources/ggml/src/ggml-cpu/vec.cpp +39 -55
- data/ext/sources/ggml/src/ggml-cpu/vec.h +225 -240
- data/ext/sources/ggml/src/ggml-cuda/CMakeLists.txt +17 -7
- data/ext/sources/ggml/src/ggml-cuda/allreduce.cu +971 -0
- data/ext/sources/ggml/src/ggml-cuda/allreduce.cuh +29 -0
- data/ext/sources/ggml/src/ggml-cuda/argsort.cu +62 -26
- data/ext/sources/ggml/src/ggml-cuda/binbcast.cu +134 -64
- data/ext/sources/ggml/src/ggml-cuda/binbcast.cuh +1 -0
- data/ext/sources/ggml/src/ggml-cuda/col2im-1d.cu +81 -0
- data/ext/sources/ggml/src/ggml-cuda/col2im-1d.cuh +3 -0
- data/ext/sources/ggml/src/ggml-cuda/common.cuh +246 -28
- data/ext/sources/ggml/src/ggml-cuda/concat.cu +134 -116
- data/ext/sources/ggml/src/ggml-cuda/conv-transpose-1d.cu +14 -12
- data/ext/sources/ggml/src/ggml-cuda/conv2d-transpose.cu +45 -21
- data/ext/sources/ggml/src/ggml-cuda/conv2d-transpose.cuh +1 -0
- data/ext/sources/ggml/src/ggml-cuda/convert.cu +139 -34
- data/ext/sources/ggml/src/ggml-cuda/convert.cuh +10 -0
- data/ext/sources/ggml/src/ggml-cuda/cpy.cu +88 -29
- data/ext/sources/ggml/src/ggml-cuda/dequantize.cuh +22 -0
- data/ext/sources/ggml/src/ggml-cuda/fattn-common.cuh +287 -49
- data/ext/sources/ggml/src/ggml-cuda/fattn-mma-f16.cuh +335 -130
- data/ext/sources/ggml/src/ggml-cuda/fattn-tile.cu +12 -0
- data/ext/sources/ggml/src/ggml-cuda/fattn-tile.cuh +127 -24
- data/ext/sources/ggml/src/ggml-cuda/fattn-vec.cuh +40 -15
- data/ext/sources/ggml/src/ggml-cuda/fattn-wmma-f16.cu +18 -9
- data/ext/sources/ggml/src/ggml-cuda/fattn.cu +169 -60
- data/ext/sources/ggml/src/ggml-cuda/fattn.cuh +2 -0
- data/ext/sources/ggml/src/ggml-cuda/fwht.cu +101 -0
- data/ext/sources/ggml/src/ggml-cuda/fwht.cuh +4 -0
- data/ext/sources/ggml/src/ggml-cuda/gated_delta_net.cu +109 -45
- data/ext/sources/ggml/src/ggml-cuda/gated_delta_net.cuh +10 -0
- data/ext/sources/ggml/src/ggml-cuda/getrows.cu +48 -23
- data/ext/sources/ggml/src/ggml-cuda/ggml-cuda.cu +2034 -2104
- data/ext/sources/ggml/src/ggml-cuda/im2col.cu +32 -29
- data/ext/sources/ggml/src/ggml-cuda/mean.cu +4 -2
- data/ext/sources/ggml/src/ggml-cuda/mma.cuh +242 -195
- data/ext/sources/ggml/src/ggml-cuda/mmf.cuh +3 -3
- data/ext/sources/ggml/src/ggml-cuda/mmq.cu +25 -12
- data/ext/sources/ggml/src/ggml-cuda/mmq.cuh +502 -423
- data/ext/sources/ggml/src/ggml-cuda/mmvf.cu +19 -12
- data/ext/sources/ggml/src/ggml-cuda/mmvq.cu +562 -97
- data/ext/sources/ggml/src/ggml-cuda/mmvq.cuh +6 -1
- data/ext/sources/ggml/src/ggml-cuda/norm.cu +36 -10
- data/ext/sources/ggml/src/ggml-cuda/out-prod.cu +66 -7
- data/ext/sources/ggml/src/ggml-cuda/quantize.cu +133 -26
- data/ext/sources/ggml/src/ggml-cuda/quantize.cuh +1 -1
- data/ext/sources/ggml/src/ggml-cuda/reduce_rows.cuh +5 -1
- data/ext/sources/ggml/src/ggml-cuda/rope.cu +11 -4
- data/ext/sources/ggml/src/ggml-cuda/scale.cu +4 -1
- data/ext/sources/ggml/src/ggml-cuda/set-rows.cu +78 -10
- data/ext/sources/ggml/src/ggml-cuda/snake.cu +72 -0
- data/ext/sources/ggml/src/ggml-cuda/snake.cuh +8 -0
- data/ext/sources/ggml/src/ggml-cuda/softcap.cu +4 -1
- data/ext/sources/ggml/src/ggml-cuda/ssm-conv.cu +45 -13
- data/ext/sources/ggml/src/ggml-cuda/ssm-conv.cuh +1 -1
- data/ext/sources/ggml/src/ggml-cuda/ssm-scan.cu +40 -18
- data/ext/sources/ggml/src/ggml-cuda/sumrows.cu +8 -4
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_16.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_8.cu +2 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_2.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_16-ncols2_4.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_16.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_4.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_8.cu +2 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_32-ncols2_2.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_16.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_2.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_4.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_4-ncols2_8.cu +2 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_2.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_4.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_8-ncols2_8.cu +2 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq192-dv128.cu +5 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu +5 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq512-dv512.cu +5 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-f16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_0.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q4_1.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_0.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q5_1.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-bf16-q8_0.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-f16-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_0-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q4_1-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_0-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q5_1-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/fattn-vec-instance-q8_0-bf16.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/mmq-instance-nvfp4.cu +5 -0
- data/ext/sources/ggml/src/ggml-cuda/template-instances/mmq-instance-q1_0.cu +5 -0
- data/ext/sources/ggml/src/ggml-cuda/top-k.cu +5 -4
- data/ext/sources/ggml/src/ggml-cuda/topk-moe.cu +33 -24
- data/ext/sources/ggml/src/ggml-cuda/unary.cu +31 -2
- data/ext/sources/ggml/src/ggml-cuda/unary.cuh +2 -0
- data/ext/sources/ggml/src/ggml-cuda/vecdotq.cuh +80 -0
- data/ext/sources/ggml/src/ggml-cuda/vendors/cuda.h +7 -2
- data/ext/sources/ggml/src/ggml-cuda/vendors/hip.h +23 -4
- data/ext/sources/ggml/src/ggml-cuda/vendors/musa.h +4 -0
- data/ext/sources/ggml/src/ggml-hexagon/CMakeLists.txt +1 -5
- data/ext/sources/ggml/src/ggml-hexagon/ggml-hexagon.cpp +2788 -1762
- data/ext/sources/ggml/src/ggml-hexagon/htp/CMakeLists.txt +13 -4
- data/ext/sources/ggml/src/ggml-hexagon/htp/act-ops.c +53 -84
- data/ext/sources/ggml/src/ggml-hexagon/htp/argsort-ops.c +25 -12
- data/ext/sources/ggml/src/ggml-hexagon/htp/binary-ops.c +165 -184
- data/ext/sources/ggml/src/ggml-hexagon/htp/cmake-toolchain.cmake +17 -19
- data/ext/sources/ggml/src/ggml-hexagon/htp/concat-ops.c +277 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/cpy-ops.c +170 -127
- data/ext/sources/ggml/src/ggml-hexagon/htp/cumsum-ops.c +270 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/diag-ops.c +216 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/fill-ops.c +123 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/flash-attn-ops.c +1774 -396
- data/ext/sources/ggml/src/ggml-hexagon/htp/flash-attn-ops.h +303 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/gated-delta-net-ops.c +1148 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/get-rows-ops.c +148 -42
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-common.h +80 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dma.c +2 -2
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dma.h +255 -62
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dump.h +9 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-profile.h +64 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-utils.h +25 -21
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-fa-kernels.h +555 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-mm-kernels-tiled.h +1303 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-queue.c +167 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-queue.h +157 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-utils.h +222 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-ctx.h +104 -13
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-ops.h +222 -57
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-vtcm.h +19 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp_iface.idl +10 -3
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-base.h +78 -26
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-copy.h +27 -10
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-div.h +63 -23
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-exp.h +48 -8
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-fa-kernels.h +232 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-flash-attn.h +47 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-log.h +65 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-mm-kernels-flat.h +1511 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-mm-kernels-tiled.h +1200 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-pow.h +42 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-repl.h +74 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-sigmoid.h +40 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-sin-cos.h +90 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-utils.h +5 -8
- data/ext/sources/ggml/src/ggml-hexagon/htp/main.c +625 -816
- data/ext/sources/ggml/src/ggml-hexagon/htp/matmul-ops.c +3052 -2166
- data/ext/sources/ggml/src/ggml-hexagon/htp/matmul-ops.h +650 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/pad-ops.c +547 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/repeat-ops.c +148 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/rope-ops.c +337 -106
- data/ext/sources/ggml/src/ggml-hexagon/htp/set-rows-ops.c +59 -37
- data/ext/sources/ggml/src/ggml-hexagon/htp/softmax-ops.c +121 -133
- data/ext/sources/ggml/src/ggml-hexagon/htp/solve-tri-ops.c +267 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/ssm-conv.c +245 -151
- data/ext/sources/ggml/src/ggml-hexagon/htp/sum-rows-ops.c +6 -6
- data/ext/sources/ggml/src/ggml-hexagon/htp/unary-ops.c +719 -45
- data/ext/sources/ggml/src/ggml-hexagon/htp/worker-pool.c +15 -3
- data/ext/sources/ggml/src/ggml-hexagon/htp/worker-pool.h +8 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp-opnode.h +390 -0
- data/ext/sources/ggml/src/ggml-hexagon/libggml-htp.inf +3 -5
- data/ext/sources/ggml/src/ggml-hip/CMakeLists.txt +27 -9
- data/ext/sources/ggml/src/ggml-impl.h +6 -1
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.cpp +207 -18
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.h +36 -2
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.m +186 -29
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-impl.h +118 -0
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-ops.cpp +322 -21
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-ops.h +4 -0
- data/ext/sources/ggml/src/ggml-metal/ggml-metal.cpp +39 -26
- data/ext/sources/ggml/src/ggml-metal/ggml-metal.metal +1226 -467
- data/ext/sources/ggml/src/ggml-musa/CMakeLists.txt +5 -6
- data/ext/sources/ggml/src/ggml-opencl/CMakeLists.txt +67 -5
- data/ext/sources/ggml/src/ggml-opencl/fa_tune.h +92 -0
- data/ext/sources/ggml/src/ggml-opencl/ggml-opencl.cpp +16290 -6246
- data/ext/sources/ggml/src/ggml-opencl/kernels/concat.cl +67 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/cpy.cl +59 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/cvt.cl +1997 -92
- data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl +81 -41
- data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl +88 -39
- data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl +1995 -96
- data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32_q4_0.cl +1615 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_f32_q8_0.cl +1486 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/flash_attn_pre_f16.cl +156 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gated_delta_net.cl +249 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_mxfp4_f32_ns.cl +374 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_0_f32_ns.cl +324 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_1_f32_ns.cl +326 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_k_f32_ns.cl +348 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_0_f32_ns.cl +328 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_1_f32_ns.cl +330 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_k_f32_ns.cl +356 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q6_k_f32_ns.cl +335 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_iq4_nl_f32.cl +150 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q1_0_f32.cl +94 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/{mul_mat_Ab_Bi_8x4.cl → gemm_noshuffle_q4_0_f32.cl} +1 -1
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q4_k_f32.cl +172 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_0_f32.cl +131 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_1_f32.cl +134 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q5_k_f32.cl +176 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q6_k_f32.cl +140 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/{mul_mm_q8_0_f32_8x4.cl → gemm_noshuffle_q8_0_f32.cl} +1 -1
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_xmem_f16_f32_os8.cl +233 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_mxfp4_f32_ns.cl +165 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q4_0_f32_ns.cl +120 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q4_1_f32_ns.cl +123 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q4_k_f32_ns.cl +155 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q5_0_f32_ns.cl +123 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q5_1_f32_ns.cl +125 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q5_k_f32_ns.cl +160 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_moe_q6_k_f32_ns.cl +141 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_iq4_nl_f32.cl +302 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q1_0_f32.cl +121 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/{gemv_noshuffle_general.cl → gemv_noshuffle_q4_0_f32.cl} +5 -5
- data/ext/sources/ggml/src/ggml-opencl/kernels/{gemv_noshuffle.cl → gemv_noshuffle_q4_0_f32_spec.cl} +5 -5
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q4_k_f32.cl +318 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_0_f32.cl +291 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_1_f32.cl +294 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q5_k_f32.cl +326 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemv_noshuffle_q6_k_f32.cl +293 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/{gemv_noshuffle_general_q8_0_f32.cl → gemv_noshuffle_q8_0_f32.cl} +1 -1
- data/ext/sources/ggml/src/ggml-opencl/kernels/get_rows.cl +15 -9
- data/ext/sources/ggml/src/ggml-opencl/kernels/moe_reorder_b.cl +30 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/moe_sort_by_expert.cl +82 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_iq4_nl_f32_l4_lm.cl +171 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q1_0_f32_l4_lm.cl +156 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q4_k_f32_l4_lm.cl +179 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q5_0_f32_l4_lm.cl +173 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q5_1_f32_l4_lm.cl +175 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mm_q5_k_f32_l4_lm.cl +192 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_f16_f32_l4.cl +1149 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32.cl +164 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32_flat.cl +202 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q1_0_f32.cl +141 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q1_0_f32_flat.cl +190 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q4_k_f32_flat.cl +196 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_0_f32.cl +241 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_0_f32_flat.cl +243 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_1_f32.cl +243 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_1_f32_flat.cl +247 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_k_f32.cl +187 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q5_k_f32_flat.cl +203 -0
- data/ext/sources/ggml/src/ggml-opencl/kernels/mul_mv_q6_k_f32_flat.cl +48 -64
- data/ext/sources/ggml/src/ggml-opencl/kernels/norm.cl +5 -2
- data/ext/sources/ggml/src/ggml-opencl/kernels/set_rows.cl +500 -0
- data/ext/sources/ggml/src/ggml-opencl/libdl.h +79 -0
- data/ext/sources/ggml/src/ggml-openvino/.clang-format +0 -5
- data/ext/sources/ggml/src/ggml-openvino/CMakeLists.txt +2 -4
- data/ext/sources/ggml/src/ggml-openvino/ggml-decoder.cpp +740 -127
- data/ext/sources/ggml/src/ggml-openvino/ggml-decoder.h +76 -23
- data/ext/sources/ggml/src/ggml-openvino/ggml-openvino-extra.cpp +75 -14
- data/ext/sources/ggml/src/ggml-openvino/ggml-openvino-extra.h +29 -8
- data/ext/sources/ggml/src/ggml-openvino/ggml-openvino.cpp +339 -69
- data/ext/sources/ggml/src/ggml-openvino/ggml-quants.cpp +330 -192
- data/ext/sources/ggml/src/ggml-openvino/ggml-quants.h +10 -4
- data/ext/sources/ggml/src/ggml-openvino/openvino/decoder.h +56 -16
- data/ext/sources/ggml/src/ggml-openvino/openvino/frontend.h +1 -1
- data/ext/sources/ggml/src/ggml-openvino/openvino/input_model.h +4 -4
- data/ext/sources/ggml/src/ggml-openvino/openvino/node_context.h +94 -37
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/add_id.cpp +76 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/argsort.cpp +47 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/clamp.cpp +33 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/concat.cpp +48 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/cont.cpp +8 -16
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/cpy.cpp +14 -1
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/div.cpp +146 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/flash_attn_ext.cpp +108 -21
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/gated_delta_net.cpp +282 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/gated_delta_net.hpp +65 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/get_rows.cpp +2 -9
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/glu_geglu.cpp +21 -7
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/glu_swiglu.cpp +41 -8
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/im2col.cpp +120 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/l2_norm.cpp +44 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/mul_mat_id.cpp +226 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/mulmat.cpp +19 -9
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/norm.cpp +58 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/pad.cpp +95 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/permute.cpp +58 -13
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/repeat.cpp +74 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/reshape.cpp +13 -6
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/rms_norm.cpp +1 -1
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/rope.cpp +161 -39
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/set_rows.cpp +3 -3
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/softmax.cpp +126 -49
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/ssm_conv.cpp +59 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/sum_rows.cpp +27 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/transpose.cpp +32 -1
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/unary_silu.cpp +1 -1
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/unary_softplus.cpp +38 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/view.cpp +90 -25
- data/ext/sources/ggml/src/ggml-openvino/openvino/op_table.cpp +41 -22
- data/ext/sources/ggml/src/ggml-openvino/openvino/op_table.h +18 -4
- data/ext/sources/ggml/src/ggml-openvino/openvino/pass/mark_decompression_convert_constant_folding.h +1 -1
- data/ext/sources/ggml/src/ggml-openvino/openvino/rt_info/weightless_caching_attributes.hpp +41 -0
- data/ext/sources/ggml/src/ggml-openvino/openvino/translate_session.cpp +70 -43
- data/ext/sources/ggml/src/ggml-openvino/openvino/translate_session.h +5 -4
- data/ext/sources/ggml/src/ggml-openvino/openvino/utils.cpp +612 -36
- data/ext/sources/ggml/src/ggml-openvino/openvino/utils.h +29 -26
- data/ext/sources/ggml/src/ggml-openvino/utils.cpp +460 -114
- data/ext/sources/ggml/src/ggml-openvino/utils.h +32 -9
- data/ext/sources/ggml/src/ggml-opt.cpp +1 -0
- data/ext/sources/ggml/src/ggml-quants.c +365 -114
- data/ext/sources/ggml/src/ggml-quants.h +6 -0
- data/ext/sources/ggml/src/ggml-rpc/CMakeLists.txt +24 -0
- data/ext/sources/ggml/src/ggml-rpc/ggml-rpc.cpp +167 -311
- data/ext/sources/ggml/src/ggml-rpc/transport.cpp +683 -0
- data/ext/sources/ggml/src/ggml-rpc/transport.h +34 -0
- data/ext/sources/ggml/src/ggml-sycl/CMakeLists.txt +50 -4
- data/ext/sources/ggml/src/ggml-sycl/add-id.cpp +1 -1
- data/ext/sources/ggml/src/ggml-sycl/backend.hpp +5 -1
- data/ext/sources/ggml/src/ggml-sycl/binbcast.cpp +12 -0
- data/ext/sources/ggml/src/ggml-sycl/col2im-1d.cpp +102 -0
- data/ext/sources/ggml/src/ggml-sycl/col2im-1d.hpp +8 -0
- data/ext/sources/ggml/src/ggml-sycl/common.cpp +72 -2
- data/ext/sources/ggml/src/ggml-sycl/common.hpp +59 -2
- data/ext/sources/ggml/src/ggml-sycl/concat.cpp +21 -1
- data/ext/sources/ggml/src/ggml-sycl/conv2d-dw.cpp +158 -0
- data/ext/sources/ggml/src/ggml-sycl/conv2d-dw.hpp +10 -0
- data/ext/sources/ggml/src/ggml-sycl/conv2d-transpose.cpp +125 -0
- data/ext/sources/ggml/src/ggml-sycl/conv2d-transpose.hpp +10 -0
- data/ext/sources/ggml/src/ggml-sycl/conv2d.cpp +150 -0
- data/ext/sources/ggml/src/ggml-sycl/conv2d.hpp +10 -0
- data/ext/sources/ggml/src/ggml-sycl/conv3d.cpp +224 -0
- data/ext/sources/ggml/src/ggml-sycl/conv3d.hpp +8 -0
- data/ext/sources/ggml/src/ggml-sycl/convert.cpp +121 -13
- data/ext/sources/ggml/src/ggml-sycl/convert.hpp +9 -0
- data/ext/sources/ggml/src/ggml-sycl/cpy.cpp +706 -0
- data/ext/sources/ggml/src/ggml-sycl/cpy.hpp +281 -0
- data/ext/sources/ggml/src/ggml-sycl/cross_entropy_loss.cpp +255 -0
- data/ext/sources/ggml/src/ggml-sycl/cross_entropy_loss.hpp +7 -0
- data/ext/sources/ggml/src/ggml-sycl/cumsum.cpp +148 -0
- data/ext/sources/ggml/src/ggml-sycl/cumsum.hpp +5 -0
- data/ext/sources/ggml/src/ggml-sycl/dequantize.hpp +678 -0
- data/ext/sources/ggml/src/ggml-sycl/diag.cpp +67 -0
- data/ext/sources/ggml/src/ggml-sycl/diag.hpp +5 -0
- data/ext/sources/ggml/src/ggml-sycl/dmmv.cpp +997 -244
- data/ext/sources/ggml/src/ggml-sycl/dpct/helper.hpp +15 -7
- data/ext/sources/ggml/src/ggml-sycl/element_wise.cpp +215 -204
- data/ext/sources/ggml/src/ggml-sycl/element_wise.hpp +2 -2
- data/ext/sources/ggml/src/ggml-sycl/fattn-buffers.cpp +56 -0
- data/ext/sources/ggml/src/ggml-sycl/fattn-buffers.hpp +63 -0
- data/ext/sources/ggml/src/ggml-sycl/fattn-common.hpp +7 -5
- data/ext/sources/ggml/src/ggml-sycl/fattn-tile.cpp +4 -0
- data/ext/sources/ggml/src/ggml-sycl/fattn-tile.hpp +76 -168
- data/ext/sources/ggml/src/ggml-sycl/fattn-vec.hpp +7 -0
- data/ext/sources/ggml/src/ggml-sycl/fattn.cpp +3 -1
- data/ext/sources/ggml/src/ggml-sycl/fill.cpp +55 -0
- data/ext/sources/ggml/src/ggml-sycl/fill.hpp +5 -0
- data/ext/sources/ggml/src/ggml-sycl/gated_delta_net.cpp +69 -31
- data/ext/sources/ggml/src/ggml-sycl/gated_delta_net.hpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/gemm.hpp +3 -0
- data/ext/sources/ggml/src/ggml-sycl/getrows.cpp +79 -3
- data/ext/sources/ggml/src/ggml-sycl/ggml-sycl.cpp +1758 -455
- data/ext/sources/ggml/src/ggml-sycl/im2col.cpp +353 -89
- data/ext/sources/ggml/src/ggml-sycl/im2col.hpp +5 -3
- data/ext/sources/ggml/src/ggml-sycl/mmvq.cpp +1542 -39
- data/ext/sources/ggml/src/ggml-sycl/mmvq.hpp +33 -0
- data/ext/sources/ggml/src/ggml-sycl/norm.cpp +103 -49
- data/ext/sources/ggml/src/ggml-sycl/outprod.cpp +45 -9
- data/ext/sources/ggml/src/ggml-sycl/pad.cpp +27 -27
- data/ext/sources/ggml/src/ggml-sycl/pool.cpp +185 -0
- data/ext/sources/ggml/src/ggml-sycl/pool.hpp +22 -0
- data/ext/sources/ggml/src/ggml-sycl/presets.hpp +3 -1
- data/ext/sources/ggml/src/ggml-sycl/quants.hpp +71 -0
- data/ext/sources/ggml/src/ggml-sycl/set_rows.cpp +17 -3
- data/ext/sources/ggml/src/ggml-sycl/softmax.cpp +9 -10
- data/ext/sources/ggml/src/ggml-sycl/solve_tri.cpp +172 -0
- data/ext/sources/ggml/src/ggml-sycl/solve_tri.hpp +8 -0
- data/ext/sources/ggml/src/ggml-sycl/ssm_conv.cpp +6 -1
- data/ext/sources/ggml/src/ggml-sycl/ssm_scan.cpp +156 -0
- data/ext/sources/ggml/src/ggml-sycl/ssm_scan.hpp +5 -0
- data/ext/sources/ggml/src/ggml-sycl/sycl_hw.cpp +62 -10
- data/ext/sources/ggml/src/ggml-sycl/sycl_hw.hpp +18 -6
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-tile-instance-dkq512-dv512.cpp +6 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-f16.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q4_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q4_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q5_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q5_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-f16-q8_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-f16.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q4_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q4_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q5_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q5_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_0-q8_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-f16.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q4_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q4_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q5_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q5_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q4_1-q8_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-f16.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q4_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q4_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q5_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q5_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_0-q8_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-f16.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q4_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q4_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q5_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q5_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q5_1-q8_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-f16.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q4_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q4_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q5_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q5_1.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/template-instances/fattn-vec-instance-q8_0-q8_0.cpp +1 -0
- data/ext/sources/ggml/src/ggml-sycl/type.hpp +112 -0
- data/ext/sources/ggml/src/ggml-sycl/upscale.cpp +410 -0
- data/ext/sources/ggml/src/ggml-sycl/upscale.hpp +9 -0
- data/ext/sources/ggml/src/ggml-sycl/vecdotq.hpp +242 -45
- data/ext/sources/ggml/src/ggml-virtgpu/ggml-backend-buffer.cpp +4 -0
- data/ext/sources/ggml/src/ggml-virtgpu/ggml-backend-device.cpp +2 -0
- data/ext/sources/ggml/src/ggml-virtgpu/ggml-backend.cpp +2 -0
- data/ext/sources/ggml/src/ggml-virtgpu/virtgpu-shm.cpp +1 -0
- data/ext/sources/ggml/src/ggml-virtgpu/virtgpu.cpp +1 -0
- data/ext/sources/ggml/src/ggml-virtgpu/virtgpu.h +0 -2
- data/ext/sources/ggml/src/ggml-vulkan/CMakeLists.txt +16 -0
- data/ext/sources/ggml/src/ggml-vulkan/ggml-vulkan.cpp +2843 -700
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +4 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/col2im_1d.comp +61 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/contig_copy.comp +6 -2
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp +146 -13
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/conv3d_mm.comp +431 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/copy.comp +3 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/copy_from_quant.comp +1 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/copy_to_quant.comp +25 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl +88 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl +643 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_nvfp4.comp +32 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dequant_q1_0.comp +29 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/diag.comp +3 -4
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/dot_product_funcs.glsl +27 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/feature-tests/coopmat2_decode_vector.comp +7 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +198 -48
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.glsl +60 -59
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +116 -113
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp +122 -31
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_dequant.glsl +131 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_mmq_funcs.glsl +203 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/fwht.comp +115 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gated_delta_net.comp +125 -64
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl +0 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/generic_unary_head.glsl +21 -19
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_back.comp +25 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/glu_head.glsl +29 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/glu_main.glsl +17 -11
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/im2col.comp +76 -54
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/im2col_3d.comp +0 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/l2_norm.comp +4 -7
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/log.comp +0 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec.comp +122 -27
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iface.glsl +6 -6
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q2_k.comp +1 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q4_k.comp +1 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_q5_k.comp +1 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp +22 -24
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl +88 -55
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +42 -40
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +49 -15
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +222 -171
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl +8 -8
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_shmem_types.glsl +24 -9
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp +0 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/norm.comp +10 -10
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/repeat_back.comp +3 -3
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/roll.comp +3 -3
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl +5 -2
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl +0 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl +3 -2
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/snake.comp +49 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/ssm_conv.comp +11 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/tri.comp +3 -4
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl +79 -2
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/unary.comp +168 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +282 -211
- data/ext/sources/ggml/src/ggml-webgpu/CMakeLists.txt +5 -2
- data/ext/sources/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +2209 -283
- data/ext/sources/ggml/src/ggml-webgpu/ggml-webgpu.cpp +2618 -1416
- data/ext/sources/ggml/src/ggml-webgpu/pre_wgsl.hpp +37 -7
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/add_id.wgsl +64 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl +8 -7
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/common_decls.tmpl +90 -95
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl +19 -1
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/conv2d.wgsl +165 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/{cpy.tmpl.wgsl → cpy.wgsl} +25 -50
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl +107 -184
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_quant_staging.tmpl +124 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_tile.wgsl +397 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl +101 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_reduce.wgsl +84 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl +619 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/gated_delta_net.wgsl +149 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl +204 -78
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/glu.wgsl +155 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/im2col.wgsl +101 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +805 -526
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id.wgsl +195 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_gather.wgsl +52 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_vec.wgsl +154 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.wgsl +8 -6
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.wgsl +5 -1
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl +90 -413
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_acc.tmpl +1553 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_q_acc.tmpl +297 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/quant_inner_loops.tmpl +21 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/quantize_q8.wgsl +178 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl +152 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/{rope.tmpl.wgsl → rope.wgsl} +71 -142
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/row_norm.wgsl +153 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl +6 -4
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/set.wgsl +109 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/set_rows.wgsl +2 -3
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/set_rows_quant.wgsl +224 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/{soft_max.tmpl.wgsl → soft_max.wgsl} +106 -206
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/solve_tri.wgsl +121 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/ssm_conv.wgsl +65 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/ssm_scan.wgsl +193 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl +68 -48
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/upscale.wgsl +240 -0
- data/ext/sources/ggml/src/ggml-zdnn/ggml-zdnn.cpp +18 -14
- data/ext/sources/ggml/src/ggml-zendnn/CMakeLists.txt +1 -1
- data/ext/sources/ggml/src/ggml-zendnn/ggml-zendnn.cpp +244 -10
- data/ext/sources/ggml/src/ggml.c +146 -42
- data/ext/sources/ggml/src/gguf.cpp +173 -28
- data/ext/sources/include/parakeet.h +342 -0
- data/ext/sources/include/whisper.h +31 -0
- data/ext/sources/media/matmul.png +0 -0
- data/ext/sources/src/CMakeLists.txt +23 -0
- data/ext/sources/src/parakeet-arch.h +188 -0
- data/ext/sources/src/parakeet.cpp +3838 -0
- data/ext/sources/src/whisper.cpp +220 -26
- data/extsources.rb +26 -10
- data/lib/whisper/log_settable.rb +33 -0
- data/lib/whisper/model/uri.rb +13 -8
- data/lib/whisper/output.rb +74 -0
- data/sig/whisper.rbs +417 -62
- data/test/helper.rb +2 -0
- data/test/jfk_reader/jfk_reader.c +50 -7
- data/test/test_callback.rb +1 -0
- data/test/test_package.rb +6 -5
- data/test/test_parakeet.rb +28 -0
- data/test/test_parakeet_callback.rb +107 -0
- data/test/test_parakeet_context.rb +116 -0
- data/test/test_parakeet_context_params.rb +24 -0
- data/test/test_parakeet_model.rb +21 -0
- data/test/test_parakeet_params.rb +78 -0
- data/test/test_parakeet_segment.rb +42 -0
- data/test/test_parakeet_token.rb +73 -0
- data/test/test_params.rb +2 -0
- data/test/test_vad.rb +9 -0
- data/test/test_vad_context.rb +2 -2
- data/test/test_vad_segment.rb +1 -1
- data/test/test_whisper.rb +24 -6
- data/whispercpp.gemspec +2 -2
- metadata +263 -304
- data/ext/sources/bindings/javascript/CMakeLists.txt +0 -41
- data/ext/sources/bindings/javascript/emscripten.cpp +0 -93
- data/ext/sources/bindings/javascript/libwhisper.worker.js +0 -1
- data/ext/sources/bindings/javascript/package.json +0 -26
- data/ext/sources/bindings/javascript/whisper.js +0 -19
- data/ext/sources/examples/addon.node/CMakeLists.txt +0 -31
- data/ext/sources/examples/addon.node/__test__/whisper.spec.js +0 -133
- data/ext/sources/examples/addon.node/addon.cpp +0 -557
- data/ext/sources/examples/addon.node/index.js +0 -59
- data/ext/sources/examples/addon.node/package.json +0 -16
- data/ext/sources/examples/addon.node/vad-example.js +0 -132
- data/ext/sources/examples/bench.wasm/CMakeLists.txt +0 -49
- data/ext/sources/examples/bench.wasm/emscripten.cpp +0 -87
- data/ext/sources/examples/bench.wasm/index-tmpl.html +0 -285
- data/ext/sources/examples/coi-serviceworker.js +0 -146
- data/ext/sources/examples/command/CMakeLists.txt +0 -10
- data/ext/sources/examples/command/command.cpp +0 -802
- data/ext/sources/examples/command/commands.txt +0 -9
- data/ext/sources/examples/command.wasm/CMakeLists.txt +0 -50
- data/ext/sources/examples/command.wasm/emscripten.cpp +0 -327
- data/ext/sources/examples/command.wasm/index-tmpl.html +0 -415
- data/ext/sources/examples/generate-karaoke.sh +0 -57
- data/ext/sources/examples/helpers.js +0 -191
- data/ext/sources/examples/livestream.sh +0 -112
- data/ext/sources/examples/lsp/CMakeLists.txt +0 -10
- data/ext/sources/examples/lsp/lsp.cpp +0 -471
- data/ext/sources/examples/lsp/whisper.vim +0 -362
- data/ext/sources/examples/python/test_whisper_processor.py +0 -7
- data/ext/sources/examples/python/whisper_processor.py +0 -54
- data/ext/sources/examples/server/bench.js +0 -29
- data/ext/sources/examples/server.py +0 -120
- data/ext/sources/examples/stream/CMakeLists.txt +0 -10
- data/ext/sources/examples/stream/stream.cpp +0 -437
- data/ext/sources/examples/stream.wasm/CMakeLists.txt +0 -49
- data/ext/sources/examples/stream.wasm/emscripten.cpp +0 -216
- data/ext/sources/examples/stream.wasm/index-tmpl.html +0 -491
- data/ext/sources/examples/sycl/CMakeLists.txt +0 -9
- data/ext/sources/examples/sycl/build.sh +0 -22
- data/ext/sources/examples/sycl/ls-sycl-device.cpp +0 -11
- data/ext/sources/examples/sycl/run-whisper.sh +0 -17
- data/ext/sources/examples/talk-llama/CMakeLists.txt +0 -48
- data/ext/sources/examples/talk-llama/eleven-labs.py +0 -80
- data/ext/sources/examples/talk-llama/llama-adapter.cpp +0 -488
- data/ext/sources/examples/talk-llama/llama-adapter.h +0 -89
- data/ext/sources/examples/talk-llama/llama-arch.cpp +0 -2877
- data/ext/sources/examples/talk-llama/llama-arch.h +0 -628
- data/ext/sources/examples/talk-llama/llama-batch.cpp +0 -919
- data/ext/sources/examples/talk-llama/llama-batch.h +0 -173
- data/ext/sources/examples/talk-llama/llama-chat.cpp +0 -896
- data/ext/sources/examples/talk-llama/llama-chat.h +0 -71
- data/ext/sources/examples/talk-llama/llama-context.cpp +0 -3633
- data/ext/sources/examples/talk-llama/llama-context.h +0 -359
- data/ext/sources/examples/talk-llama/llama-cparams.cpp +0 -5
- data/ext/sources/examples/talk-llama/llama-cparams.h +0 -47
- data/ext/sources/examples/talk-llama/llama-ext.h +0 -12
- data/ext/sources/examples/talk-llama/llama-grammar.cpp +0 -1464
- data/ext/sources/examples/talk-llama/llama-grammar.h +0 -194
- data/ext/sources/examples/talk-llama/llama-graph.cpp +0 -2735
- data/ext/sources/examples/talk-llama/llama-graph.h +0 -1031
- data/ext/sources/examples/talk-llama/llama-hparams.cpp +0 -258
- data/ext/sources/examples/talk-llama/llama-hparams.h +0 -353
- data/ext/sources/examples/talk-llama/llama-impl.cpp +0 -171
- data/ext/sources/examples/talk-llama/llama-impl.h +0 -75
- data/ext/sources/examples/talk-llama/llama-io.cpp +0 -15
- data/ext/sources/examples/talk-llama/llama-io.h +0 -35
- data/ext/sources/examples/talk-llama/llama-kv-cache-iswa.cpp +0 -330
- data/ext/sources/examples/talk-llama/llama-kv-cache-iswa.h +0 -137
- data/ext/sources/examples/talk-llama/llama-kv-cache.cpp +0 -2285
- data/ext/sources/examples/talk-llama/llama-kv-cache.h +0 -389
- data/ext/sources/examples/talk-llama/llama-kv-cells.h +0 -533
- data/ext/sources/examples/talk-llama/llama-memory-hybrid-iswa.cpp +0 -275
- data/ext/sources/examples/talk-llama/llama-memory-hybrid-iswa.h +0 -140
- data/ext/sources/examples/talk-llama/llama-memory-hybrid.cpp +0 -268
- data/ext/sources/examples/talk-llama/llama-memory-hybrid.h +0 -139
- data/ext/sources/examples/talk-llama/llama-memory-recurrent.cpp +0 -1165
- data/ext/sources/examples/talk-llama/llama-memory-recurrent.h +0 -182
- data/ext/sources/examples/talk-llama/llama-memory.cpp +0 -59
- data/ext/sources/examples/talk-llama/llama-memory.h +0 -122
- data/ext/sources/examples/talk-llama/llama-mmap.cpp +0 -752
- data/ext/sources/examples/talk-llama/llama-mmap.h +0 -73
- data/ext/sources/examples/talk-llama/llama-model-loader.cpp +0 -1655
- data/ext/sources/examples/talk-llama/llama-model-loader.h +0 -206
- data/ext/sources/examples/talk-llama/llama-model-saver.cpp +0 -299
- data/ext/sources/examples/talk-llama/llama-model-saver.h +0 -40
- data/ext/sources/examples/talk-llama/llama-model.cpp +0 -9056
- data/ext/sources/examples/talk-llama/llama-model.h +0 -597
- data/ext/sources/examples/talk-llama/llama-quant.cpp +0 -1304
- data/ext/sources/examples/talk-llama/llama-quant.h +0 -1
- data/ext/sources/examples/talk-llama/llama-sampler.cpp +0 -3885
- data/ext/sources/examples/talk-llama/llama-sampler.h +0 -42
- data/ext/sources/examples/talk-llama/llama-vocab.cpp +0 -3970
- data/ext/sources/examples/talk-llama/llama-vocab.h +0 -187
- data/ext/sources/examples/talk-llama/llama.cpp +0 -1194
- data/ext/sources/examples/talk-llama/llama.h +0 -1573
- data/ext/sources/examples/talk-llama/models/afmoe.cpp +0 -190
- data/ext/sources/examples/talk-llama/models/apertus.cpp +0 -125
- data/ext/sources/examples/talk-llama/models/arcee.cpp +0 -135
- data/ext/sources/examples/talk-llama/models/arctic.cpp +0 -137
- data/ext/sources/examples/talk-llama/models/arwkv7.cpp +0 -86
- data/ext/sources/examples/talk-llama/models/baichuan.cpp +0 -123
- data/ext/sources/examples/talk-llama/models/bailingmoe.cpp +0 -143
- data/ext/sources/examples/talk-llama/models/bailingmoe2.cpp +0 -133
- data/ext/sources/examples/talk-llama/models/bert.cpp +0 -184
- data/ext/sources/examples/talk-llama/models/bitnet.cpp +0 -145
- data/ext/sources/examples/talk-llama/models/bloom.cpp +0 -101
- data/ext/sources/examples/talk-llama/models/chameleon.cpp +0 -178
- data/ext/sources/examples/talk-llama/models/chatglm.cpp +0 -132
- data/ext/sources/examples/talk-llama/models/codeshell.cpp +0 -111
- data/ext/sources/examples/talk-llama/models/cogvlm.cpp +0 -102
- data/ext/sources/examples/talk-llama/models/cohere2-iswa.cpp +0 -134
- data/ext/sources/examples/talk-llama/models/command-r.cpp +0 -122
- data/ext/sources/examples/talk-llama/models/dbrx.cpp +0 -122
- data/ext/sources/examples/talk-llama/models/deci.cpp +0 -135
- data/ext/sources/examples/talk-llama/models/deepseek.cpp +0 -142
- data/ext/sources/examples/talk-llama/models/deepseek2.cpp +0 -262
- data/ext/sources/examples/talk-llama/models/delta-net-base.cpp +0 -445
- data/ext/sources/examples/talk-llama/models/dots1.cpp +0 -132
- data/ext/sources/examples/talk-llama/models/dream.cpp +0 -105
- data/ext/sources/examples/talk-llama/models/ernie4-5-moe.cpp +0 -148
- data/ext/sources/examples/talk-llama/models/ernie4-5.cpp +0 -110
- data/ext/sources/examples/talk-llama/models/eurobert.cpp +0 -97
- data/ext/sources/examples/talk-llama/models/exaone-moe.cpp +0 -145
- data/ext/sources/examples/talk-llama/models/exaone.cpp +0 -114
- data/ext/sources/examples/talk-llama/models/exaone4.cpp +0 -123
- data/ext/sources/examples/talk-llama/models/falcon-h1.cpp +0 -111
- data/ext/sources/examples/talk-llama/models/falcon.cpp +0 -120
- data/ext/sources/examples/talk-llama/models/gemma-embedding.cpp +0 -116
- data/ext/sources/examples/talk-llama/models/gemma.cpp +0 -112
- data/ext/sources/examples/talk-llama/models/gemma2-iswa.cpp +0 -128
- data/ext/sources/examples/talk-llama/models/gemma3.cpp +0 -155
- data/ext/sources/examples/talk-llama/models/gemma3n-iswa.cpp +0 -384
- data/ext/sources/examples/talk-llama/models/glm4-moe.cpp +0 -170
- data/ext/sources/examples/talk-llama/models/glm4.cpp +0 -157
- data/ext/sources/examples/talk-llama/models/gpt2.cpp +0 -105
- data/ext/sources/examples/talk-llama/models/gptneox.cpp +0 -144
- data/ext/sources/examples/talk-llama/models/granite-hybrid.cpp +0 -195
- data/ext/sources/examples/talk-llama/models/granite.cpp +0 -210
- data/ext/sources/examples/talk-llama/models/grok.cpp +0 -159
- data/ext/sources/examples/talk-llama/models/grovemoe.cpp +0 -139
- data/ext/sources/examples/talk-llama/models/hunyuan-dense.cpp +0 -132
- data/ext/sources/examples/talk-llama/models/hunyuan-moe.cpp +0 -153
- data/ext/sources/examples/talk-llama/models/internlm2.cpp +0 -120
- data/ext/sources/examples/talk-llama/models/jais.cpp +0 -86
- data/ext/sources/examples/talk-llama/models/jais2.cpp +0 -123
- data/ext/sources/examples/talk-llama/models/jamba.cpp +0 -106
- data/ext/sources/examples/talk-llama/models/kimi-linear.cpp +0 -381
- data/ext/sources/examples/talk-llama/models/lfm2.cpp +0 -196
- data/ext/sources/examples/talk-llama/models/llada-moe.cpp +0 -122
- data/ext/sources/examples/talk-llama/models/llada.cpp +0 -99
- data/ext/sources/examples/talk-llama/models/llama-iswa.cpp +0 -178
- data/ext/sources/examples/talk-llama/models/llama.cpp +0 -175
- data/ext/sources/examples/talk-llama/models/maincoder.cpp +0 -117
- data/ext/sources/examples/talk-llama/models/mamba-base.cpp +0 -289
- data/ext/sources/examples/talk-llama/models/mamba.cpp +0 -54
- data/ext/sources/examples/talk-llama/models/mimo2-iswa.cpp +0 -129
- data/ext/sources/examples/talk-llama/models/minicpm3.cpp +0 -200
- data/ext/sources/examples/talk-llama/models/minimax-m2.cpp +0 -123
- data/ext/sources/examples/talk-llama/models/mistral3.cpp +0 -160
- data/ext/sources/examples/talk-llama/models/models.h +0 -704
- data/ext/sources/examples/talk-llama/models/modern-bert.cpp +0 -109
- data/ext/sources/examples/talk-llama/models/mpt.cpp +0 -126
- data/ext/sources/examples/talk-llama/models/nemotron-h.cpp +0 -162
- data/ext/sources/examples/talk-llama/models/nemotron.cpp +0 -122
- data/ext/sources/examples/talk-llama/models/neo-bert.cpp +0 -104
- data/ext/sources/examples/talk-llama/models/olmo.cpp +0 -121
- data/ext/sources/examples/talk-llama/models/olmo2.cpp +0 -150
- data/ext/sources/examples/talk-llama/models/olmoe.cpp +0 -124
- data/ext/sources/examples/talk-llama/models/openai-moe-iswa.cpp +0 -127
- data/ext/sources/examples/talk-llama/models/openelm.cpp +0 -124
- data/ext/sources/examples/talk-llama/models/orion.cpp +0 -123
- data/ext/sources/examples/talk-llama/models/paddleocr.cpp +0 -122
- data/ext/sources/examples/talk-llama/models/pangu-embedded.cpp +0 -121
- data/ext/sources/examples/talk-llama/models/phi2.cpp +0 -121
- data/ext/sources/examples/talk-llama/models/phi3.cpp +0 -152
- data/ext/sources/examples/talk-llama/models/plamo.cpp +0 -110
- data/ext/sources/examples/talk-llama/models/plamo2.cpp +0 -320
- data/ext/sources/examples/talk-llama/models/plamo3.cpp +0 -128
- data/ext/sources/examples/talk-llama/models/plm.cpp +0 -169
- data/ext/sources/examples/talk-llama/models/qwen.cpp +0 -108
- data/ext/sources/examples/talk-llama/models/qwen2.cpp +0 -126
- data/ext/sources/examples/talk-llama/models/qwen2moe.cpp +0 -151
- data/ext/sources/examples/talk-llama/models/qwen2vl.cpp +0 -117
- data/ext/sources/examples/talk-llama/models/qwen3.cpp +0 -120
- data/ext/sources/examples/talk-llama/models/qwen35.cpp +0 -381
- data/ext/sources/examples/talk-llama/models/qwen35moe.cpp +0 -422
- data/ext/sources/examples/talk-llama/models/qwen3moe.cpp +0 -131
- data/ext/sources/examples/talk-llama/models/qwen3next.cpp +0 -525
- data/ext/sources/examples/talk-llama/models/qwen3vl-moe.cpp +0 -140
- data/ext/sources/examples/talk-llama/models/qwen3vl.cpp +0 -132
- data/ext/sources/examples/talk-llama/models/refact.cpp +0 -94
- data/ext/sources/examples/talk-llama/models/rnd1.cpp +0 -126
- data/ext/sources/examples/talk-llama/models/rwkv6-base.cpp +0 -164
- data/ext/sources/examples/talk-llama/models/rwkv6.cpp +0 -94
- data/ext/sources/examples/talk-llama/models/rwkv6qwen2.cpp +0 -86
- data/ext/sources/examples/talk-llama/models/rwkv7-base.cpp +0 -137
- data/ext/sources/examples/talk-llama/models/rwkv7.cpp +0 -90
- data/ext/sources/examples/talk-llama/models/seed-oss.cpp +0 -124
- data/ext/sources/examples/talk-llama/models/smallthinker.cpp +0 -126
- data/ext/sources/examples/talk-llama/models/smollm3.cpp +0 -128
- data/ext/sources/examples/talk-llama/models/stablelm.cpp +0 -146
- data/ext/sources/examples/talk-llama/models/starcoder.cpp +0 -100
- data/ext/sources/examples/talk-llama/models/starcoder2.cpp +0 -121
- data/ext/sources/examples/talk-llama/models/step35-iswa.cpp +0 -165
- data/ext/sources/examples/talk-llama/models/t5-dec.cpp +0 -166
- data/ext/sources/examples/talk-llama/models/t5-enc.cpp +0 -96
- data/ext/sources/examples/talk-llama/models/wavtokenizer-dec.cpp +0 -149
- data/ext/sources/examples/talk-llama/models/xverse.cpp +0 -108
- data/ext/sources/examples/talk-llama/prompts/talk-alpaca.txt +0 -23
- data/ext/sources/examples/talk-llama/speak +0 -40
- data/ext/sources/examples/talk-llama/speak.bat +0 -1
- data/ext/sources/examples/talk-llama/speak.ps1 +0 -14
- data/ext/sources/examples/talk-llama/talk-llama.cpp +0 -813
- data/ext/sources/examples/talk-llama/unicode-data.cpp +0 -7034
- data/ext/sources/examples/talk-llama/unicode-data.h +0 -20
- data/ext/sources/examples/talk-llama/unicode.cpp +0 -1103
- data/ext/sources/examples/talk-llama/unicode.h +0 -111
- data/ext/sources/examples/wchess/CMakeLists.txt +0 -10
- data/ext/sources/examples/wchess/libwchess/CMakeLists.txt +0 -19
- data/ext/sources/examples/wchess/libwchess/Chessboard.cpp +0 -803
- data/ext/sources/examples/wchess/libwchess/Chessboard.h +0 -33
- data/ext/sources/examples/wchess/libwchess/WChess.cpp +0 -193
- data/ext/sources/examples/wchess/libwchess/WChess.h +0 -63
- data/ext/sources/examples/wchess/libwchess/test-chessboard.cpp +0 -117
- data/ext/sources/examples/wchess/wchess.cmd/CMakeLists.txt +0 -8
- data/ext/sources/examples/wchess/wchess.cmd/wchess.cmd.cpp +0 -253
- data/ext/sources/examples/whisper.wasm/CMakeLists.txt +0 -50
- data/ext/sources/examples/whisper.wasm/emscripten.cpp +0 -118
- data/ext/sources/examples/whisper.wasm/index-tmpl.html +0 -659
- data/ext/sources/ggml/src/ggml-cuda/template-instances/generate_cu_files.py +0 -99
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-msg.h +0 -155
- data/ext/sources/ggml/src/ggml-hexagon/op-desc.h +0 -153
- data/ext/sources/ggml/src/ggml-opencl/kernels/embed_kernel.py +0 -26
- data/ext/sources/ggml/src/ggml-openvino/openvino/pass/eliminate_zp.cpp +0 -123
- data/ext/sources/ggml/src/ggml-openvino/openvino/pass/eliminate_zp.h +0 -17
- data/ext/sources/ggml/src/ggml-virtgpu/regenerate_remoting.py +0 -333
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/abs.comp +0 -21
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/ceil.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/clamp.comp +0 -17
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/cos.comp +0 -17
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/elu.comp +0 -27
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp +0 -21
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/floor.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gelu.comp +0 -25
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gelu_erf.comp +0 -39
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/gelu_quick.comp +0 -23
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/hardsigmoid.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/hardswish.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/leaky_relu.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/neg.comp +0 -20
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/relu.comp +0 -21
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/round.comp +0 -29
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/rte.glsl +0 -5
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sgn.comp +0 -21
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sigmoid.comp +0 -20
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/silu.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sin.comp +0 -17
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/softplus.comp +0 -23
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp +0 -17
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/square.comp +0 -17
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/step.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/tanh.comp +0 -20
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/trunc.comp +0 -22
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/xielu.comp +0 -35
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py +0 -182
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/glu.tmpl.wgsl +0 -323
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl +0 -718
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm.wgsl +0 -123
- data/ext/sources/tests/CMakeLists.txt +0 -112
- data/ext/sources/tests/earnings21/eval.mk +0 -58
- data/ext/sources/tests/earnings21/eval.py +0 -68
- data/ext/sources/tests/earnings21/normalizers/__init__.py +0 -2
- data/ext/sources/tests/earnings21/normalizers/basic.py +0 -80
- data/ext/sources/tests/earnings21/normalizers/english.json +0 -1741
- data/ext/sources/tests/earnings21/normalizers/english.py +0 -550
- data/ext/sources/tests/earnings21/requirements.txt +0 -6
- data/ext/sources/tests/en-0-ref.txt +0 -1
- data/ext/sources/tests/en-1-ref.txt +0 -1
- data/ext/sources/tests/en-2-ref.txt +0 -1
- data/ext/sources/tests/es-0-ref.txt +0 -1
- data/ext/sources/tests/librispeech/eval.mk +0 -39
- data/ext/sources/tests/librispeech/eval.py +0 -47
- data/ext/sources/tests/librispeech/normalizers/__init__.py +0 -2
- data/ext/sources/tests/librispeech/normalizers/basic.py +0 -80
- data/ext/sources/tests/librispeech/normalizers/english.json +0 -1741
- data/ext/sources/tests/librispeech/normalizers/english.py +0 -550
- data/ext/sources/tests/librispeech/requirements.txt +0 -6
- data/ext/sources/tests/run-tests.sh +0 -130
- data/ext/sources/tests/test-c.c +0 -3
- data/ext/sources/tests/test-vad-full.cpp +0 -56
- data/ext/sources/tests/test-vad.cpp +0 -83
- data/ext/sources/tests/test-whisper.js +0 -58
- data/lib/whisper/context.rb +0 -15
- 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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
3672
|
-
|
|
3673
|
-
float mean = sum/ne00;
|
|
3722
|
+
if (nb00 == sizeof(float) && nb0 == sizeof(float)) {
|
|
3723
|
+
const float * xf = (const float *) x;
|
|
3674
3724
|
|
|
3675
|
-
|
|
3676
|
-
|
|
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
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3733
|
+
mean = -mean;
|
|
3734
|
+
vDSP_vsadd(xf, 1, &mean, yf, 1, ne00);
|
|
3735
|
+
vDSP_measqv(yf, 1, &variance, ne00);
|
|
3682
3736
|
#else
|
|
3683
|
-
|
|
3737
|
+
variance = ggml_vec_cvar_f32(ne00, yf, xf, mean);
|
|
3684
3738
|
#endif //GGML_USE_ACCELERATE
|
|
3685
3739
|
|
|
3686
|
-
|
|
3687
|
-
|
|
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 *
|
|
3797
|
+
ggml_tensor * dst_rms_norm,
|
|
3798
|
+
ggml_tensor * dst_fused = nullptr) {
|
|
3716
3799
|
|
|
3717
|
-
const ggml_tensor * src0 =
|
|
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
|
-
|
|
3816
|
+
GGML_TENSOR_BINARY_OP_LOCALS
|
|
3727
3817
|
|
|
3728
3818
|
float eps;
|
|
3729
|
-
memcpy(&eps,
|
|
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
|
|
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
|
-
|
|
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)
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
4941
|
-
|
|
4942
|
-
|
|
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
|
-
|
|
5101
|
+
ggml_compute_forward_set_rows_impl<float, int64_t>(params, dst);
|
|
4960
5102
|
} else if (src1->type == GGML_TYPE_I32) {
|
|
4961
|
-
|
|
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
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
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 ==
|
|
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
|
-
|
|
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
|
|
6959
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7204
|
+
kernel_t * dst_data = wdata + i11*ne10*ne12;
|
|
6976
7205
|
for (int i10 = 0; i10 < ne10; i10++) {
|
|
6977
|
-
|
|
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
|
-
|
|
7000
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7012
|
-
|
|
7013
|
-
|
|
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
|
|
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
|
-
|
|
7330
|
+
pkg_size = svcntw();
|
|
7059
7331
|
#else
|
|
7060
|
-
|
|
7332
|
+
pkg_size = GGML_F32_EPR;
|
|
7061
7333
|
#endif
|
|
7062
|
-
|
|
7063
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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 +=
|
|
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
|
-
|
|
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
|
-
|
|
9926
|
-
|
|
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
|
-
|
|
10143
|
-
|
|
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
|
-
//
|
|
10441
|
-
const int64_t
|
|
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
|
|
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
|
|
10448
|
-
// new_states: S_v * S_v * H * n_seqs floats
|
|
10449
|
-
const int64_t attn_score_elems
|
|
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
|
-
|
|
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
|
|
10475
|
-
|
|
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
|
-
|
|
10606
|
-
|
|
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
|
+
}
|