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
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
#include "dequantize.hpp"
|
|
4
4
|
#include "presets.hpp"
|
|
5
5
|
|
|
6
|
+
#if defined(__INTEL_LLVM_COMPILER)
|
|
7
|
+
#if __has_include(<sycl/ext/oneapi/bfloat16.hpp>)
|
|
8
|
+
#include <sycl/ext/oneapi/bfloat16.hpp>
|
|
9
|
+
#define GGML_SYCL_DMMV_HAS_BF16
|
|
10
|
+
#endif
|
|
11
|
+
#endif
|
|
12
|
+
|
|
6
13
|
static void convert_f16(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
|
|
7
14
|
const sycl::half *x = (const sycl::half *)vx;
|
|
8
15
|
|
|
@@ -11,6 +18,16 @@ static void convert_f16(const void * vx, const int64_t ib, const int iqs, dfloat
|
|
|
11
18
|
v.y() = x[ib + iqs + 1];
|
|
12
19
|
}
|
|
13
20
|
|
|
21
|
+
#ifdef GGML_SYCL_DMMV_HAS_BF16
|
|
22
|
+
static void convert_bf16(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
|
|
23
|
+
const sycl::ext::oneapi::bfloat16 *x = (const sycl::ext::oneapi::bfloat16 *)vx;
|
|
24
|
+
|
|
25
|
+
// automatic bfloat16 -> float type cast if dfloat == float
|
|
26
|
+
v.x() = x[ib + iqs + 0];
|
|
27
|
+
v.y() = x[ib + iqs + 1];
|
|
28
|
+
}
|
|
29
|
+
#endif
|
|
30
|
+
|
|
14
31
|
static void convert_f32(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
|
|
15
32
|
const float * x = (const float *) vx;
|
|
16
33
|
|
|
@@ -217,13 +234,28 @@ static void convert_mul_mat_vec_f16_sycl(const void *vx, const dfloat *y,
|
|
|
217
234
|
}
|
|
218
235
|
}
|
|
219
236
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
237
|
+
#ifdef GGML_SYCL_DMMV_HAS_BF16
|
|
238
|
+
static void convert_mul_mat_vec_bf16_sycl(const void *vx, const dfloat *y,
|
|
239
|
+
float *dst, const int ncols,
|
|
240
|
+
const int nrows,
|
|
241
|
+
dpct::queue_ptr stream) {
|
|
242
|
+
// The qk=1 kernel iterates with stride 2*GGML_SYCL_DMMV_X, so ncols must be a
|
|
243
|
+
// multiple of that — not just GGML_SYCL_DMMV_X — to avoid out-of-bounds reads.
|
|
244
|
+
GGML_ASSERT(ncols % (2*GGML_SYCL_DMMV_X) == 0);
|
|
245
|
+
const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
|
|
246
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
247
|
+
const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
|
|
248
|
+
{
|
|
249
|
+
stream->parallel_for(
|
|
250
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
251
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
252
|
+
dequantize_mul_mat_vec<1, 1, convert_bf16>(vx, y, dst, ncols,
|
|
253
|
+
nrows, item_ct1);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
#endif
|
|
258
|
+
|
|
227
259
|
static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
|
|
228
260
|
const float *__restrict__ yy,
|
|
229
261
|
float *__restrict__ dst,
|
|
@@ -245,19 +277,15 @@ static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
|
|
|
245
277
|
|
|
246
278
|
#if QK_K == 256
|
|
247
279
|
const int tid =
|
|
248
|
-
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...
|
|
280
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
249
281
|
const int ix =
|
|
250
282
|
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
|
|
251
283
|
|
|
252
284
|
const int step = 16/K_QUANTS_PER_ITERATION;
|
|
253
285
|
|
|
254
|
-
const int
|
|
255
|
-
const int in = tid - step*im; // 0...15 or 0...7
|
|
286
|
+
const int in = tid % step; // 0...15 or 0...7
|
|
256
287
|
|
|
257
288
|
const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 or 0...14 in steps of 2
|
|
258
|
-
const int q_offset = 32*im + l0;
|
|
259
|
-
const int s_offset = 8*im;
|
|
260
|
-
const int y_offset = 128*im + l0;
|
|
261
289
|
|
|
262
290
|
uint32_t aux[4];
|
|
263
291
|
const uint8_t * d = (const uint8_t *)aux;
|
|
@@ -265,33 +293,39 @@ static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
|
|
|
265
293
|
|
|
266
294
|
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
267
295
|
|
|
268
|
-
const float * y = yy + i * QK_K + y_offset;
|
|
269
|
-
const uint8_t * q = x[i].qs + q_offset;
|
|
270
|
-
|
|
271
296
|
const float dall = x[i].dm[0];
|
|
272
297
|
const float dmin = x[i].dm[1];
|
|
273
298
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
299
|
+
for (int im = 0; im < 2; ++im) {
|
|
300
|
+
const int q_offset = 32*im + l0;
|
|
301
|
+
const int s_offset = 8*im;
|
|
302
|
+
const int y_offset = 128*im + l0;
|
|
303
|
+
|
|
304
|
+
const float * y = yy + i * QK_K + y_offset;
|
|
305
|
+
const uint8_t * q = x[i].qs + q_offset;
|
|
306
|
+
|
|
307
|
+
const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset);
|
|
308
|
+
aux[0] = a[0] & 0x0f0f0f0f;
|
|
309
|
+
aux[1] = a[1] & 0x0f0f0f0f;
|
|
310
|
+
aux[2] = (a[0] >> 4) & 0x0f0f0f0f;
|
|
311
|
+
aux[3] = (a[1] >> 4) & 0x0f0f0f0f;
|
|
312
|
+
|
|
313
|
+
float sum1 = 0, sum2 = 0;
|
|
314
|
+
for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
|
|
315
|
+
sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3)
|
|
316
|
+
+ y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3)
|
|
317
|
+
+ y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3)
|
|
318
|
+
+ y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3)
|
|
319
|
+
+ y[l+16] * d[1] * ((q[l+16] >> 0) & 3)
|
|
320
|
+
+ y[l+48] * d[3] * ((q[l+16] >> 2) & 3)
|
|
321
|
+
+ y[l+80] * d[5] * ((q[l+16] >> 4) & 3)
|
|
322
|
+
+y[l+112] * d[7] * ((q[l+16] >> 6) & 3);
|
|
323
|
+
sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6]
|
|
324
|
+
+ y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7];
|
|
292
325
|
|
|
326
|
+
}
|
|
327
|
+
tmp += dall * sum1 - dmin * sum2;
|
|
293
328
|
}
|
|
294
|
-
tmp += dall * sum1 - dmin * sum2;
|
|
295
329
|
|
|
296
330
|
}
|
|
297
331
|
#else
|
|
@@ -333,7 +367,7 @@ static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
|
|
|
333
367
|
|
|
334
368
|
// sum up partial sums and write back result
|
|
335
369
|
#pragma unroll
|
|
336
|
-
for (int mask =
|
|
370
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
337
371
|
tmp +=
|
|
338
372
|
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
339
373
|
}
|
|
@@ -343,13 +377,6 @@ static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
|
|
|
343
377
|
}
|
|
344
378
|
}
|
|
345
379
|
|
|
346
|
-
/*
|
|
347
|
-
DPCT1110:5: The total declared local variable size in device function
|
|
348
|
-
dequantize_mul_mat_vec_q3_k exceeds 128 bytes and may cause high register
|
|
349
|
-
pressure. Consult with your hardware vendor to find the total register size
|
|
350
|
-
available and adjust the code, or use smaller sub-group size to avoid high
|
|
351
|
-
register pressure.
|
|
352
|
-
*/
|
|
353
380
|
static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx,
|
|
354
381
|
const float *__restrict__ yy,
|
|
355
382
|
float *__restrict__ dst,
|
|
@@ -373,52 +400,52 @@ static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx,
|
|
|
373
400
|
const uint16_t kmask2 = 0x0f0f;
|
|
374
401
|
|
|
375
402
|
const int tid =
|
|
376
|
-
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...
|
|
403
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
377
404
|
const int ix =
|
|
378
405
|
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
|
|
379
406
|
|
|
380
407
|
const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop
|
|
381
408
|
const int step = 16/K_QUANTS_PER_ITERATION;
|
|
382
|
-
const int
|
|
383
|
-
const int in = tid - step*im; // 0....15 or 0...7
|
|
384
|
-
|
|
385
|
-
const uint8_t m = 1 << (4*im);
|
|
409
|
+
const int in = tid % step; // 0...15 or 0...7
|
|
386
410
|
|
|
387
411
|
const int l0 = n*in; // 0...15 or 0...14 in steps of 2
|
|
388
|
-
const int q_offset = 32*im + l0;
|
|
389
|
-
const int y_offset = 128*im + l0;
|
|
390
412
|
|
|
391
413
|
uint16_t utmp[4];
|
|
392
414
|
const int8_t * s = (const int8_t *)utmp;
|
|
393
415
|
|
|
394
|
-
const uint16_t s_shift = 4*im;
|
|
395
|
-
|
|
396
416
|
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
397
417
|
|
|
398
|
-
const float * y = yy + i * QK_K + y_offset;
|
|
399
|
-
const uint8_t * q = x[i].qs + q_offset;
|
|
400
418
|
const uint8_t * h = x[i].hmask + l0;
|
|
401
|
-
|
|
402
|
-
const uint16_t * a = (const uint16_t *)x[i].scales;
|
|
403
|
-
utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
|
|
404
|
-
utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
|
|
405
|
-
utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
|
|
406
|
-
utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
|
|
407
|
-
|
|
408
419
|
const float d = x[i].d;
|
|
409
420
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
421
|
+
for (int im = 0; im < 2; ++im) {
|
|
422
|
+
const int q_offset = 32*im + l0;
|
|
423
|
+
const int y_offset = 128*im + l0;
|
|
424
|
+
const uint16_t s_shift = 4*im;
|
|
425
|
+
const uint8_t m = 1 << (4*im);
|
|
426
|
+
|
|
427
|
+
const float * y = yy + i * QK_K + y_offset;
|
|
428
|
+
const uint8_t * q = x[i].qs + q_offset;
|
|
429
|
+
|
|
430
|
+
const uint16_t * a = (const uint16_t *)x[i].scales;
|
|
431
|
+
utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
|
|
432
|
+
utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
|
|
433
|
+
utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
|
|
434
|
+
utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
|
|
435
|
+
|
|
436
|
+
float sum = 0;
|
|
437
|
+
for (int l = 0; l < n; ++l) {
|
|
438
|
+
sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4))
|
|
439
|
+
+ y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4))
|
|
440
|
+
+ y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4))
|
|
441
|
+
+ y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4));
|
|
442
|
+
sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4))
|
|
443
|
+
+ y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4))
|
|
444
|
+
+ y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4))
|
|
445
|
+
+ y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4));
|
|
446
|
+
}
|
|
447
|
+
tmp += d * sum;
|
|
420
448
|
}
|
|
421
|
-
tmp += d * sum;
|
|
422
449
|
|
|
423
450
|
}
|
|
424
451
|
#else
|
|
@@ -452,7 +479,105 @@ static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx,
|
|
|
452
479
|
|
|
453
480
|
// sum up partial sums and write back result
|
|
454
481
|
#pragma unroll
|
|
455
|
-
for (int mask =
|
|
482
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
483
|
+
tmp +=
|
|
484
|
+
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
if (item_ct1.get_local_id(2) == 0) {
|
|
488
|
+
dst[row] = tmp;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
static void dequantize_mul_mat_vec_q3_k_reorder(const void *__restrict__ vx,
|
|
493
|
+
const float *__restrict__ yy,
|
|
494
|
+
float *__restrict__ dst,
|
|
495
|
+
const int ncols, int nrows,
|
|
496
|
+
const sycl::nd_item<3> &item_ct1) {
|
|
497
|
+
|
|
498
|
+
const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
|
|
499
|
+
item_ct1.get_local_id(1);
|
|
500
|
+
if (row > nrows) return;
|
|
501
|
+
|
|
502
|
+
const int num_blocks_per_row = ncols / QK_K;
|
|
503
|
+
const int ib0 = row*num_blocks_per_row;
|
|
504
|
+
|
|
505
|
+
// SOA base pointers for the reordered layout:
|
|
506
|
+
// [qs: nb * (QK_K/4)] [hmask: nb * (QK_K/8)] [scales: nb * 12] [d: nb * sizeof(half)]
|
|
507
|
+
const int nb = nrows * num_blocks_per_row;
|
|
508
|
+
const uint8_t * qs_base = (const uint8_t *)vx;
|
|
509
|
+
const uint8_t * hmask_base = qs_base + (size_t)nb * (QK_K / 4);
|
|
510
|
+
const uint8_t * scales_base = hmask_base + (size_t)nb * (QK_K / 8);
|
|
511
|
+
const sycl::half * d_base = (const sycl::half *)(scales_base + (size_t)nb * 12);
|
|
512
|
+
|
|
513
|
+
float tmp = 0; // partial sum for thread in warp
|
|
514
|
+
|
|
515
|
+
#if QK_K == 256
|
|
516
|
+
|
|
517
|
+
const uint16_t kmask1 = 0x0303;
|
|
518
|
+
const uint16_t kmask2 = 0x0f0f;
|
|
519
|
+
|
|
520
|
+
const int tid =
|
|
521
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
522
|
+
const int ix =
|
|
523
|
+
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
|
|
524
|
+
|
|
525
|
+
const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop
|
|
526
|
+
const int step = 16/K_QUANTS_PER_ITERATION;
|
|
527
|
+
const int in = tid % step; // 0...15 or 0...7
|
|
528
|
+
|
|
529
|
+
const int l0 = n*in; // 0...15 or 0...14 in steps of 2
|
|
530
|
+
|
|
531
|
+
uint16_t utmp[4];
|
|
532
|
+
const int8_t * s = (const int8_t *)utmp;
|
|
533
|
+
|
|
534
|
+
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
535
|
+
const int bi = ib0 + i;
|
|
536
|
+
|
|
537
|
+
const uint8_t * h = hmask_base + bi * (QK_K / 8) + l0;
|
|
538
|
+
|
|
539
|
+
const float d = d_base[bi];
|
|
540
|
+
|
|
541
|
+
for (int im = 0; im < 2; ++im) {
|
|
542
|
+
const int q_offset = 32*im + l0;
|
|
543
|
+
const int y_offset = 128*im + l0;
|
|
544
|
+
const uint16_t s_shift = 4*im;
|
|
545
|
+
const uint8_t m = 1 << (4*im);
|
|
546
|
+
|
|
547
|
+
const float * y = yy + i * QK_K + y_offset;
|
|
548
|
+
const uint8_t * q = qs_base + bi * (QK_K / 4) + q_offset;
|
|
549
|
+
|
|
550
|
+
const uint16_t * a = (const uint16_t *)(scales_base + bi * 12);
|
|
551
|
+
utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
|
|
552
|
+
utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
|
|
553
|
+
utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
|
|
554
|
+
utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
|
|
555
|
+
|
|
556
|
+
float sum = 0;
|
|
557
|
+
for (int l = 0; l < n; ++l) {
|
|
558
|
+
sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4))
|
|
559
|
+
+ y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4))
|
|
560
|
+
+ y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4))
|
|
561
|
+
+ y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4));
|
|
562
|
+
sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4))
|
|
563
|
+
+ y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4))
|
|
564
|
+
+ y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4))
|
|
565
|
+
+ y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4));
|
|
566
|
+
}
|
|
567
|
+
tmp += d * sum;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
#else
|
|
571
|
+
GGML_UNUSED(vx);
|
|
572
|
+
GGML_UNUSED(yy);
|
|
573
|
+
GGML_UNUSED(ncols);
|
|
574
|
+
GGML_UNUSED(item_ct1);
|
|
575
|
+
GGML_ABORT("Q3_K reorder DMMV not supported for QK_K != 256");
|
|
576
|
+
#endif
|
|
577
|
+
|
|
578
|
+
// sum up partial sums and write back result
|
|
579
|
+
#pragma unroll
|
|
580
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
456
581
|
tmp +=
|
|
457
582
|
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
458
583
|
}
|
|
@@ -462,13 +587,6 @@ static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx,
|
|
|
462
587
|
}
|
|
463
588
|
}
|
|
464
589
|
|
|
465
|
-
/*
|
|
466
|
-
DPCT1110:6: The total declared local variable size in device function
|
|
467
|
-
dequantize_mul_mat_vec_q4_k exceeds 128 bytes and may cause high register
|
|
468
|
-
pressure. Consult with your hardware vendor to find the total register size
|
|
469
|
-
available and adjust the code, or use smaller sub-group size to avoid high
|
|
470
|
-
register pressure.
|
|
471
|
-
*/
|
|
472
590
|
static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
|
|
473
591
|
const float *__restrict__ yy,
|
|
474
592
|
float *__restrict__ dst,
|
|
@@ -489,22 +607,19 @@ static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
|
|
|
489
607
|
const uint16_t kmask3 = 0xc0c0;
|
|
490
608
|
|
|
491
609
|
const int tid =
|
|
492
|
-
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...
|
|
610
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
493
611
|
const int ix =
|
|
494
612
|
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
|
|
495
613
|
|
|
496
614
|
const int step = 8/K_QUANTS_PER_ITERATION; // 8 or 4
|
|
497
615
|
|
|
498
|
-
const int
|
|
499
|
-
const int ir = tid - step*
|
|
616
|
+
const int il_base = tid/step; // 0 or 1 (was 0...3)
|
|
617
|
+
const int ir = tid - step*il_base; // 0...7 or 0...3
|
|
500
618
|
const int n = 2 * K_QUANTS_PER_ITERATION; // 2 or 4
|
|
501
619
|
|
|
502
|
-
const int
|
|
503
|
-
const int in = il%2;
|
|
620
|
+
const int in = il_base%2;
|
|
504
621
|
|
|
505
622
|
const int l0 = n*(2*ir + in);
|
|
506
|
-
const int q_offset = 32*im + l0;
|
|
507
|
-
const int y_offset = 64*im + l0;
|
|
508
623
|
|
|
509
624
|
uint16_t aux[4];
|
|
510
625
|
const uint8_t * sc = (const uint8_t *)aux;
|
|
@@ -521,55 +636,60 @@ static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
|
|
|
521
636
|
|
|
522
637
|
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
523
638
|
|
|
524
|
-
const float * y1 = yy + i*QK_K + y_offset;
|
|
525
|
-
const float * y2 = y1 + 128;
|
|
526
|
-
|
|
527
639
|
const float dall = x[i].dm[0];
|
|
528
640
|
const float dmin = x[i].dm[1];
|
|
529
641
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
|
|
534
|
-
aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
|
|
642
|
+
for (int im = 0; im < 2; ++im) {
|
|
643
|
+
const int q_offset = 32*im + l0;
|
|
644
|
+
const int y_offset = 64*im + l0;
|
|
535
645
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
const uint32_t * q2 = q1 + 16;
|
|
646
|
+
const float * y1 = yy + i*QK_K + y_offset;
|
|
647
|
+
const float * y2 = y1 + 128;
|
|
539
648
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
649
|
+
const uint16_t * a = (const uint16_t *)x[i].scales;
|
|
650
|
+
aux[0] = a[im+0] & kmask1;
|
|
651
|
+
aux[1] = a[im+2] & kmask1;
|
|
652
|
+
aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
|
|
653
|
+
aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
|
|
544
654
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
655
|
+
#if K_QUANTS_PER_ITERATION == 2
|
|
656
|
+
const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset);
|
|
657
|
+
const uint32_t * q2 = q1 + 16;
|
|
658
|
+
|
|
659
|
+
q32[0] = q1[0] & 0x0f0f0f0f;
|
|
660
|
+
q32[1] = q1[0] & 0xf0f0f0f0;
|
|
661
|
+
q32[2] = q2[0] & 0x0f0f0f0f;
|
|
662
|
+
q32[3] = q2[0] & 0xf0f0f0f0;
|
|
663
|
+
|
|
664
|
+
sycl::float4 s = {0.f, 0.f, 0.f, 0.f};
|
|
665
|
+
float smin = 0;
|
|
666
|
+
for (int l = 0; l < 4; ++l) {
|
|
667
|
+
s.x() += y1[l] * q4[l + 0]; s.y() += y1[l + 32] * q4[l + 4];
|
|
668
|
+
s.z() += y2[l] * q4[l + 8]; s.w() += y2[l + 32] * q4[l + 12];
|
|
669
|
+
smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
|
|
670
|
+
}
|
|
671
|
+
tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f / 16.f +
|
|
672
|
+
s.z() * sc[4] + s.w() * sc[5] * 1.f / 16.f) -
|
|
673
|
+
dmin * smin;
|
|
555
674
|
#else
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
675
|
+
const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset);
|
|
676
|
+
const uint16_t * q2 = q1 + 32;
|
|
677
|
+
|
|
678
|
+
q16[0] = q1[0] & 0x0f0f;
|
|
679
|
+
q16[1] = q1[0] & 0xf0f0;
|
|
680
|
+
q16[2] = q2[0] & 0x0f0f;
|
|
681
|
+
q16[3] = q2[0] & 0xf0f0;
|
|
682
|
+
|
|
683
|
+
sycl::float4 s = {0.f, 0.f, 0.f, 0.f};
|
|
684
|
+
float smin = 0;
|
|
685
|
+
for (int l = 0; l < 2; ++l) {
|
|
686
|
+
s.x() += y1[l] * q4[l+0]; s.y() += y1[l+32] * q4[l+2];
|
|
687
|
+
s.z() += y2[l] * q4[l+4]; s.w() += y2[l+32] * q4[l+6];
|
|
688
|
+
smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
|
|
689
|
+
}
|
|
690
|
+
tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f/16.f + s.z() * sc[4] + s.w() * sc[5] * 1.f/16.f) - dmin * smin;
|
|
572
691
|
#endif
|
|
692
|
+
}
|
|
573
693
|
|
|
574
694
|
}
|
|
575
695
|
#else
|
|
@@ -605,7 +725,165 @@ static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
|
|
|
605
725
|
|
|
606
726
|
// sum up partial sums and write back result
|
|
607
727
|
#pragma unroll
|
|
608
|
-
for (int mask =
|
|
728
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
729
|
+
tmp +=
|
|
730
|
+
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
if (tid == 0) {
|
|
734
|
+
dst[row] = tmp;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
static void dequantize_mul_mat_vec_q4_k_reorder(const void *__restrict__ vx,
|
|
739
|
+
const float *__restrict__ yy,
|
|
740
|
+
float *__restrict__ dst,
|
|
741
|
+
const int ncols, int nrows,
|
|
742
|
+
const sycl::nd_item<3> &item_ct1) {
|
|
743
|
+
|
|
744
|
+
const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
|
|
745
|
+
item_ct1.get_local_id(1);
|
|
746
|
+
if (row > nrows) return;
|
|
747
|
+
const int num_blocks_per_row = ncols / QK_K;
|
|
748
|
+
const int ib0 = row*num_blocks_per_row;
|
|
749
|
+
|
|
750
|
+
// SOA base pointers for the reordered layout:
|
|
751
|
+
// [qs: nb * QK_K/2] [scales: nb * K_SCALE_SIZE] [dm: nb * sizeof(half2)]
|
|
752
|
+
const int nb = nrows * num_blocks_per_row;
|
|
753
|
+
const uint8_t * qs_base = (const uint8_t *)vx;
|
|
754
|
+
const uint8_t * scales_base = qs_base + (size_t)nb * (QK_K / 2);
|
|
755
|
+
const sycl::half2 * dm_base = (const sycl::half2 *)(scales_base + (size_t)nb * K_SCALE_SIZE);
|
|
756
|
+
|
|
757
|
+
#if QK_K == 256
|
|
758
|
+
const uint16_t kmask1 = 0x3f3f;
|
|
759
|
+
const uint16_t kmask2 = 0x0f0f;
|
|
760
|
+
const uint16_t kmask3 = 0xc0c0;
|
|
761
|
+
|
|
762
|
+
const int tid =
|
|
763
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
764
|
+
const int ix =
|
|
765
|
+
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
|
|
766
|
+
|
|
767
|
+
const int step = 8/K_QUANTS_PER_ITERATION; // 8 or 4
|
|
768
|
+
|
|
769
|
+
const int il_base = tid/step; // 0 or 1 (was 0...3)
|
|
770
|
+
const int ir = tid - step*il_base; // 0...7 or 0...3
|
|
771
|
+
const int n = 2 * K_QUANTS_PER_ITERATION; // 2 or 4
|
|
772
|
+
|
|
773
|
+
const int in = il_base%2;
|
|
774
|
+
|
|
775
|
+
const int l0 = n*(2*ir + in);
|
|
776
|
+
|
|
777
|
+
uint16_t aux[4];
|
|
778
|
+
const uint8_t * sc = (const uint8_t *)aux;
|
|
779
|
+
|
|
780
|
+
#if K_QUANTS_PER_ITERATION == 2
|
|
781
|
+
uint32_t q32[4];
|
|
782
|
+
const uint8_t * q4 = (const uint8_t *)q32;
|
|
783
|
+
#else
|
|
784
|
+
uint16_t q16[4];
|
|
785
|
+
const uint8_t * q4 = (const uint8_t *)q16;
|
|
786
|
+
#endif
|
|
787
|
+
|
|
788
|
+
float tmp = 0; // partial sum for thread in warp
|
|
789
|
+
|
|
790
|
+
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
791
|
+
const int bi = ib0 + i;
|
|
792
|
+
|
|
793
|
+
const sycl::half2 dm_val = dm_base[bi];
|
|
794
|
+
const float dall = dm_val[0];
|
|
795
|
+
const float dmin = dm_val[1];
|
|
796
|
+
|
|
797
|
+
for (int im = 0; im < 2; ++im) {
|
|
798
|
+
const int q_offset = 32*im + l0;
|
|
799
|
+
const int y_offset = 64*im + l0;
|
|
800
|
+
|
|
801
|
+
const float * y1 = yy + i*QK_K + y_offset;
|
|
802
|
+
const float * y2 = y1 + 128;
|
|
803
|
+
|
|
804
|
+
const uint16_t * a = (const uint16_t *)(scales_base + bi * K_SCALE_SIZE);
|
|
805
|
+
aux[0] = a[im+0] & kmask1;
|
|
806
|
+
aux[1] = a[im+2] & kmask1;
|
|
807
|
+
aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
|
|
808
|
+
aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
|
|
809
|
+
|
|
810
|
+
#if K_QUANTS_PER_ITERATION == 2
|
|
811
|
+
const uint32_t * q1 = (const uint32_t *)(qs_base + bi * (QK_K / 2) + q_offset);
|
|
812
|
+
const uint32_t * q2 = q1 + 16;
|
|
813
|
+
|
|
814
|
+
q32[0] = q1[0] & 0x0f0f0f0f;
|
|
815
|
+
q32[1] = q1[0] & 0xf0f0f0f0;
|
|
816
|
+
q32[2] = q2[0] & 0x0f0f0f0f;
|
|
817
|
+
q32[3] = q2[0] & 0xf0f0f0f0;
|
|
818
|
+
|
|
819
|
+
sycl::float4 s = {0.f, 0.f, 0.f, 0.f};
|
|
820
|
+
float smin = 0;
|
|
821
|
+
for (int l = 0; l < 4; ++l) {
|
|
822
|
+
s.x() += y1[l] * q4[l + 0]; s.y() += y1[l + 32] * q4[l + 4];
|
|
823
|
+
s.z() += y2[l] * q4[l + 8]; s.w() += y2[l + 32] * q4[l + 12];
|
|
824
|
+
smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
|
|
825
|
+
}
|
|
826
|
+
tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f / 16.f +
|
|
827
|
+
s.z() * sc[4] + s.w() * sc[5] * 1.f / 16.f) -
|
|
828
|
+
dmin * smin;
|
|
829
|
+
#else
|
|
830
|
+
const uint16_t * q1 = (const uint16_t *)(qs_base + bi * (QK_K / 2) + q_offset);
|
|
831
|
+
const uint16_t * q2 = q1 + 32;
|
|
832
|
+
|
|
833
|
+
q16[0] = q1[0] & 0x0f0f;
|
|
834
|
+
q16[1] = q1[0] & 0xf0f0;
|
|
835
|
+
q16[2] = q2[0] & 0x0f0f;
|
|
836
|
+
q16[3] = q2[0] & 0xf0f0;
|
|
837
|
+
|
|
838
|
+
sycl::float4 s = {0.f, 0.f, 0.f, 0.f};
|
|
839
|
+
float smin = 0;
|
|
840
|
+
for (int l = 0; l < 2; ++l) {
|
|
841
|
+
s.x() += y1[l] * q4[l+0]; s.y() += y1[l+32] * q4[l+2];
|
|
842
|
+
s.z() += y2[l] * q4[l+4]; s.w() += y2[l+32] * q4[l+6];
|
|
843
|
+
smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
|
|
844
|
+
}
|
|
845
|
+
tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f/16.f + s.z() * sc[4] + s.w() * sc[5] * 1.f/16.f) - dmin * smin;
|
|
846
|
+
#endif
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
}
|
|
850
|
+
#else
|
|
851
|
+
const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION); // 0...15
|
|
852
|
+
const int ix = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION);
|
|
853
|
+
|
|
854
|
+
const int step = tid * K_QUANTS_PER_ITERATION;
|
|
855
|
+
|
|
856
|
+
uint16_t aux16[2];
|
|
857
|
+
const uint8_t * s = (const uint8_t *)aux16;
|
|
858
|
+
|
|
859
|
+
float tmp = 0;
|
|
860
|
+
|
|
861
|
+
for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
|
|
862
|
+
const int bi = ib0 + i;
|
|
863
|
+
|
|
864
|
+
const uint8_t * q = qs_base + bi * (QK_K / 2) + step;
|
|
865
|
+
const float * y = yy + i*QK_K + step;
|
|
866
|
+
const uint16_t * a = (const uint16_t *)(scales_base + bi * K_SCALE_SIZE);
|
|
867
|
+
aux16[0] = a[0] & 0x0f0f;
|
|
868
|
+
aux16[1] = (a[0] >> 4) & 0x0f0f;
|
|
869
|
+
const sycl::half2 dm_val = dm_base[bi];
|
|
870
|
+
const float d = (float)dm_val[0];
|
|
871
|
+
const float m = (float)dm_val[1];
|
|
872
|
+
float sum = 0.f;
|
|
873
|
+
for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) {
|
|
874
|
+
sum += y[j+ 0] * (d * s[0] * (q[j+ 0] & 0xF) - m * s[2])
|
|
875
|
+
+ y[j+16] * (d * s[0] * (q[j+16] & 0xF) - m * s[2])
|
|
876
|
+
+ y[j+32] * (d * s[1] * (q[j+ 0] >> 4) - m * s[3])
|
|
877
|
+
+ y[j+48] * (d * s[1] * (q[j+16] >> 4) - m * s[3]);
|
|
878
|
+
}
|
|
879
|
+
tmp += sum;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
#endif
|
|
883
|
+
|
|
884
|
+
// sum up partial sums and write back result
|
|
885
|
+
#pragma unroll
|
|
886
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
609
887
|
tmp +=
|
|
610
888
|
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
611
889
|
}
|
|
@@ -615,13 +893,6 @@ static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
|
|
|
615
893
|
}
|
|
616
894
|
}
|
|
617
895
|
|
|
618
|
-
/*
|
|
619
|
-
DPCT1110:7: The total declared local variable size in device function
|
|
620
|
-
dequantize_mul_mat_vec_q5_k exceeds 128 bytes and may cause high register
|
|
621
|
-
pressure. Consult with your hardware vendor to find the total register size
|
|
622
|
-
available and adjust the code, or use smaller sub-group size to avoid high
|
|
623
|
-
register pressure.
|
|
624
|
-
*/
|
|
625
896
|
static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
|
|
626
897
|
const float *__restrict__ yy,
|
|
627
898
|
float *__restrict__ dst,
|
|
@@ -641,22 +912,16 @@ static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
|
|
|
641
912
|
const uint16_t kmask2 = 0x0f0f;
|
|
642
913
|
const uint16_t kmask3 = 0xc0c0;
|
|
643
914
|
|
|
644
|
-
const int tid = item_ct1.get_local_id(2) / 2; // 0...
|
|
915
|
+
const int tid = item_ct1.get_local_id(2) / 2; // 0...7
|
|
645
916
|
const int ix = item_ct1.get_local_id(2) % 2;
|
|
646
917
|
|
|
647
|
-
const int
|
|
648
|
-
const int ir = tid - 4*
|
|
918
|
+
const int il_base = tid/4; // 0 or 1 (was 0...3)
|
|
919
|
+
const int ir = tid - 4*il_base;// 0...3
|
|
649
920
|
const int n = 2;
|
|
650
921
|
|
|
651
|
-
const int
|
|
652
|
-
const int in = il%2;
|
|
922
|
+
const int in = il_base%2;
|
|
653
923
|
|
|
654
924
|
const int l0 = n*(2*ir + in);
|
|
655
|
-
const int q_offset = 32*im + l0;
|
|
656
|
-
const int y_offset = 64*im + l0;
|
|
657
|
-
|
|
658
|
-
const uint8_t hm1 = 1 << (2*im);
|
|
659
|
-
const uint8_t hm2 = hm1 << 4;
|
|
660
925
|
|
|
661
926
|
uint16_t aux[4];
|
|
662
927
|
const uint8_t * sc = (const uint8_t *)aux;
|
|
@@ -666,51 +931,59 @@ static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
|
|
|
666
931
|
|
|
667
932
|
for (int i = ix; i < num_blocks_per_row; i += 2) {
|
|
668
933
|
|
|
669
|
-
const uint8_t * ql1 = x[i].qs + q_offset;
|
|
670
934
|
const uint8_t * qh = x[i].qh + l0;
|
|
671
|
-
const float * y1 = yy + i*QK_K + y_offset;
|
|
672
|
-
const float * y2 = y1 + 128;
|
|
673
|
-
|
|
674
935
|
const float dall = x[i].dm[0];
|
|
675
936
|
const float dmin = x[i].dm[1];
|
|
676
937
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
938
|
+
for (int im = 0; im < 2; ++im) {
|
|
939
|
+
const int q_offset = 32*im + l0;
|
|
940
|
+
const int y_offset = 64*im + l0;
|
|
941
|
+
|
|
942
|
+
const uint8_t hm1 = 1 << (2*im);
|
|
943
|
+
const uint8_t hm2 = hm1 << 4;
|
|
944
|
+
|
|
945
|
+
const uint8_t * ql1 = x[i].qs + q_offset;
|
|
946
|
+
const float * y1 = yy + i*QK_K + y_offset;
|
|
947
|
+
const float * y2 = y1 + 128;
|
|
948
|
+
|
|
949
|
+
const uint16_t * a = (const uint16_t *)x[i].scales;
|
|
950
|
+
aux[0] = a[im+0] & kmask1;
|
|
951
|
+
aux[1] = a[im+2] & kmask1;
|
|
952
|
+
aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
|
|
953
|
+
aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
|
|
954
|
+
|
|
955
|
+
sycl::float4 sum = {0.f, 0.f, 0.f, 0.f};
|
|
956
|
+
float smin = 0;
|
|
957
|
+
const uint16_t * q1 = (const uint16_t *)ql1;
|
|
958
|
+
const uint16_t * q2 = q1 + 32;
|
|
959
|
+
q16[0] = q1[0] & 0x0f0f;
|
|
960
|
+
q16[1] = q1[8] & 0x0f0f;
|
|
961
|
+
q16[2] = (q1[0] >> 4) & 0x0f0f;
|
|
962
|
+
q16[3] = (q1[8] >> 4) & 0x0f0f;
|
|
963
|
+
q16[4] = q2[0] & 0x0f0f;
|
|
964
|
+
q16[5] = q2[8] & 0x0f0f;
|
|
965
|
+
q16[6] = (q2[0] >> 4) & 0x0f0f;
|
|
966
|
+
q16[7] = (q2[8] >> 4) & 0x0f0f;
|
|
967
|
+
for (int l = 0; l < n; ++l) {
|
|
968
|
+
sum.x() +=
|
|
969
|
+
y1[l + 0] * (q4[l + 0] + (qh[l + 0] & (hm1 << 0) ? 16 : 0)) +
|
|
970
|
+
y1[l + 16] * (q4[l + 2] + (qh[l + 16] & (hm1 << 0) ? 16 : 0));
|
|
971
|
+
sum.y() +=
|
|
972
|
+
y1[l + 32] * (q4[l + 4] + (qh[l + 0] & (hm1 << 1) ? 16 : 0)) +
|
|
973
|
+
y1[l + 48] * (q4[l + 6] + (qh[l + 16] & (hm1 << 1) ? 16 : 0));
|
|
974
|
+
sum.z() +=
|
|
975
|
+
y2[l + 0] * (q4[l + 8] + (qh[l + 0] & (hm2 << 0) ? 16 : 0)) +
|
|
976
|
+
y2[l + 16] * (q4[l + 10] + (qh[l + 16] & (hm2 << 0) ? 16 : 0));
|
|
977
|
+
sum.w() +=
|
|
978
|
+
y2[l + 32] * (q4[l + 12] + (qh[l + 0] & (hm2 << 1) ? 16 : 0)) +
|
|
979
|
+
y2[l + 48] * (q4[l + 14] + (qh[l + 16] & (hm2 << 1) ? 16 : 0));
|
|
980
|
+
smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3]
|
|
981
|
+
+ (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7];
|
|
982
|
+
}
|
|
983
|
+
tmp += dall * (sum.x() * sc[0] + sum.y() * sc[1] + sum.z() * sc[4] +
|
|
984
|
+
sum.w() * sc[5]) -
|
|
985
|
+
dmin * smin;
|
|
710
986
|
}
|
|
711
|
-
tmp += dall * (sum.x() * sc[0] + sum.y() * sc[1] + sum.z() * sc[4] +
|
|
712
|
-
sum.w() * sc[5]) -
|
|
713
|
-
dmin * smin;
|
|
714
987
|
}
|
|
715
988
|
|
|
716
989
|
#else
|
|
@@ -739,7 +1012,7 @@ static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
|
|
|
739
1012
|
|
|
740
1013
|
// sum up partial sums and write back result
|
|
741
1014
|
#pragma unroll
|
|
742
|
-
for (int mask =
|
|
1015
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
743
1016
|
tmp +=
|
|
744
1017
|
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
745
1018
|
}
|
|
@@ -749,31 +1022,144 @@ static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
|
|
|
749
1022
|
}
|
|
750
1023
|
}
|
|
751
1024
|
|
|
752
|
-
static void
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
|
|
758
|
-
item_ct1.get_local_id(1);
|
|
759
|
-
if (row > nrows) return;
|
|
1025
|
+
static void dequantize_mul_mat_vec_q5_k_reorder(const void *__restrict__ vx,
|
|
1026
|
+
const float *__restrict__ yy,
|
|
1027
|
+
float *__restrict__ dst,
|
|
1028
|
+
const int ncols, int nrows,
|
|
1029
|
+
const sycl::nd_item<3> &item_ct1) {
|
|
760
1030
|
|
|
1031
|
+
const int row = item_ct1.get_group(2);
|
|
761
1032
|
const int num_blocks_per_row = ncols / QK_K;
|
|
762
1033
|
const int ib0 = row*num_blocks_per_row;
|
|
763
1034
|
|
|
764
|
-
|
|
1035
|
+
// SOA base pointers for the reordered layout:
|
|
1036
|
+
// [qs: nb * QK_K/2] [qh: nb * QK_K/8] [scales: nb * K_SCALE_SIZE] [dm: nb * sizeof(half2)]
|
|
1037
|
+
const int nb = nrows * num_blocks_per_row;
|
|
1038
|
+
const uint8_t * qs_base = (const uint8_t *)vx;
|
|
1039
|
+
const uint8_t * qh_base = qs_base + (size_t)nb * (QK_K / 2);
|
|
1040
|
+
const uint8_t * scales_base = qh_base + (size_t)nb * (QK_K / 8);
|
|
1041
|
+
const sycl::half2 * dm_base = (const sycl::half2 *)(scales_base + (size_t)nb * K_SCALE_SIZE);
|
|
765
1042
|
|
|
766
|
-
|
|
1043
|
+
float tmp = 0; // partial sum for thread in warp
|
|
1044
|
+
|
|
1045
|
+
#if QK_K == 256
|
|
1046
|
+
const uint16_t kmask1 = 0x3f3f;
|
|
1047
|
+
const uint16_t kmask2 = 0x0f0f;
|
|
1048
|
+
const uint16_t kmask3 = 0xc0c0;
|
|
1049
|
+
|
|
1050
|
+
const int tid = item_ct1.get_local_id(2) / 2; // 0...15
|
|
1051
|
+
const int ix = item_ct1.get_local_id(2) % 2;
|
|
1052
|
+
|
|
1053
|
+
const int il = tid/4; // 0...3
|
|
1054
|
+
const int ir = tid - 4*il;// 0...3
|
|
1055
|
+
const int n = 2;
|
|
1056
|
+
|
|
1057
|
+
const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
|
|
1058
|
+
const int in = il%2;
|
|
1059
|
+
|
|
1060
|
+
const int l0 = n*(2*ir + in);
|
|
1061
|
+
const int q_offset = 32*im + l0;
|
|
1062
|
+
const int y_offset = 64*im + l0;
|
|
1063
|
+
|
|
1064
|
+
const uint8_t hm1 = 1 << (2*im);
|
|
1065
|
+
const uint8_t hm2 = hm1 << 4;
|
|
1066
|
+
|
|
1067
|
+
uint16_t aux[4];
|
|
1068
|
+
const uint8_t * sc = (const uint8_t *)aux;
|
|
1069
|
+
|
|
1070
|
+
uint16_t q16[8];
|
|
1071
|
+
const uint8_t * q4 = (const uint8_t *)q16;
|
|
1072
|
+
|
|
1073
|
+
for (int i = ix; i < num_blocks_per_row; i += 2) {
|
|
1074
|
+
const int bi = ib0 + i;
|
|
1075
|
+
|
|
1076
|
+
const uint8_t * ql1 = qs_base + bi * (QK_K / 2) + q_offset;
|
|
1077
|
+
const uint8_t * qh = qh_base + bi * (QK_K / 8) + l0;
|
|
1078
|
+
const float * y1 = yy + i*QK_K + y_offset;
|
|
1079
|
+
const float * y2 = y1 + 128;
|
|
1080
|
+
|
|
1081
|
+
const sycl::half2 dm_val = dm_base[bi];
|
|
1082
|
+
const float dall = dm_val[0];
|
|
1083
|
+
const float dmin = dm_val[1];
|
|
1084
|
+
|
|
1085
|
+
const uint16_t * a = (const uint16_t *)(scales_base + bi * K_SCALE_SIZE);
|
|
1086
|
+
aux[0] = a[im+0] & kmask1;
|
|
1087
|
+
aux[1] = a[im+2] & kmask1;
|
|
1088
|
+
aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
|
|
1089
|
+
aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
|
|
1090
|
+
|
|
1091
|
+
sycl::float4 sum = {0.f, 0.f, 0.f, 0.f};
|
|
1092
|
+
float smin = 0;
|
|
1093
|
+
const uint16_t * q1 = (const uint16_t *)ql1;
|
|
1094
|
+
const uint16_t * q2 = q1 + 32;
|
|
1095
|
+
q16[0] = q1[0] & 0x0f0f;
|
|
1096
|
+
q16[1] = q1[8] & 0x0f0f;
|
|
1097
|
+
q16[2] = (q1[0] >> 4) & 0x0f0f;
|
|
1098
|
+
q16[3] = (q1[8] >> 4) & 0x0f0f;
|
|
1099
|
+
q16[4] = q2[0] & 0x0f0f;
|
|
1100
|
+
q16[5] = q2[8] & 0x0f0f;
|
|
1101
|
+
q16[6] = (q2[0] >> 4) & 0x0f0f;
|
|
1102
|
+
q16[7] = (q2[8] >> 4) & 0x0f0f;
|
|
1103
|
+
for (int l = 0; l < n; ++l) {
|
|
1104
|
+
sum.x() +=
|
|
1105
|
+
y1[l + 0] * (q4[l + 0] + (qh[l + 0] & (hm1 << 0) ? 16 : 0)) +
|
|
1106
|
+
y1[l + 16] * (q4[l + 2] + (qh[l + 16] & (hm1 << 0) ? 16 : 0));
|
|
1107
|
+
sum.y() +=
|
|
1108
|
+
y1[l + 32] * (q4[l + 4] + (qh[l + 0] & (hm1 << 1) ? 16 : 0)) +
|
|
1109
|
+
y1[l + 48] * (q4[l + 6] + (qh[l + 16] & (hm1 << 1) ? 16 : 0));
|
|
1110
|
+
sum.z() +=
|
|
1111
|
+
y2[l + 0] * (q4[l + 8] + (qh[l + 0] & (hm2 << 0) ? 16 : 0)) +
|
|
1112
|
+
y2[l + 16] * (q4[l + 10] + (qh[l + 16] & (hm2 << 0) ? 16 : 0));
|
|
1113
|
+
sum.w() +=
|
|
1114
|
+
y2[l + 32] * (q4[l + 12] + (qh[l + 0] & (hm2 << 1) ? 16 : 0)) +
|
|
1115
|
+
y2[l + 48] * (q4[l + 14] + (qh[l + 16] & (hm2 << 1) ? 16 : 0));
|
|
1116
|
+
smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3]
|
|
1117
|
+
+ (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7];
|
|
1118
|
+
}
|
|
1119
|
+
tmp += dall * (sum.x() * sc[0] + sum.y() * sc[1] + sum.z() * sc[4] +
|
|
1120
|
+
sum.w() * sc[5]) -
|
|
1121
|
+
dmin * smin;
|
|
1122
|
+
}
|
|
1123
|
+
#else
|
|
1124
|
+
// The reordered Q5_K layout is only produced for QK_K == 256.
|
|
1125
|
+
#endif
|
|
1126
|
+
|
|
1127
|
+
// sum up partial sums and write back result
|
|
1128
|
+
#pragma unroll
|
|
1129
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
1130
|
+
tmp +=
|
|
1131
|
+
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
if (item_ct1.get_local_id(2) == 0) {
|
|
1135
|
+
dst[row] = tmp;
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
static void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows,
|
|
1140
|
+
const sycl::nd_item<3> &item_ct1) {
|
|
1141
|
+
|
|
1142
|
+
static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
|
|
1143
|
+
|
|
1144
|
+
const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
|
|
1145
|
+
item_ct1.get_local_id(1);
|
|
1146
|
+
if (row > nrows) return;
|
|
1147
|
+
|
|
1148
|
+
const int num_blocks_per_row = ncols / QK_K;
|
|
1149
|
+
const int ib0 = row*num_blocks_per_row;
|
|
1150
|
+
|
|
1151
|
+
const block_q6_K * x = (const block_q6_K *)vx + ib0;
|
|
1152
|
+
|
|
1153
|
+
#if QK_K == 256
|
|
767
1154
|
|
|
768
1155
|
const int tid =
|
|
769
|
-
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...
|
|
1156
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
770
1157
|
const int ix =
|
|
771
1158
|
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0, 1
|
|
772
1159
|
|
|
773
1160
|
const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8
|
|
774
1161
|
|
|
775
|
-
const int
|
|
776
|
-
const int in = tid - step*im; // 0...15 or 0...7
|
|
1162
|
+
const int in = tid % step; // 0...15 or 0...7
|
|
777
1163
|
|
|
778
1164
|
#if K_QUANTS_PER_ITERATION == 1
|
|
779
1165
|
const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15
|
|
@@ -782,42 +1168,45 @@ static void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const floa
|
|
|
782
1168
|
const int l0 = 4 * in; // 0, 4, 8, ..., 28
|
|
783
1169
|
const int is = in / 4;
|
|
784
1170
|
#endif
|
|
785
|
-
const int ql_offset = 64*im + l0;
|
|
786
|
-
const int qh_offset = 32*im + l0;
|
|
787
|
-
const int s_offset = 8*im + is;
|
|
788
|
-
const int y_offset = 128*im + l0;
|
|
789
1171
|
|
|
790
1172
|
float tmp = 0; // partial sum for thread in warp
|
|
791
1173
|
|
|
792
1174
|
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
793
1175
|
|
|
794
|
-
const float * y = yy + i * QK_K + y_offset;
|
|
795
|
-
const uint8_t * ql = x[i].ql + ql_offset;
|
|
796
|
-
const uint8_t * qh = x[i].qh + qh_offset;
|
|
797
|
-
const int8_t * s = x[i].scales + s_offset;
|
|
798
|
-
|
|
799
1176
|
const float d = x[i].d;
|
|
800
1177
|
|
|
1178
|
+
for (int im = 0; im < 2; ++im) {
|
|
1179
|
+
const int ql_offset = 64*im + l0;
|
|
1180
|
+
const int qh_offset = 32*im + l0;
|
|
1181
|
+
const int s_offset = 8*im + is;
|
|
1182
|
+
const int y_offset = 128*im + l0;
|
|
1183
|
+
|
|
1184
|
+
const float * y = yy + i * QK_K + y_offset;
|
|
1185
|
+
const uint8_t * ql = x[i].ql + ql_offset;
|
|
1186
|
+
const uint8_t * qh = x[i].qh + qh_offset;
|
|
1187
|
+
const int8_t * s = x[i].scales + s_offset;
|
|
1188
|
+
|
|
801
1189
|
#if K_QUANTS_PER_ITERATION == 1
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
1190
|
+
float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32)
|
|
1191
|
+
+ y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32)
|
|
1192
|
+
+ y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32)
|
|
1193
|
+
+ y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32)
|
|
1194
|
+
+ y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32)
|
|
1195
|
+
+ y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32)
|
|
1196
|
+
+ y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32)
|
|
1197
|
+
+y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32);
|
|
1198
|
+
tmp += sum;
|
|
811
1199
|
#else
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
1200
|
+
float sum = 0;
|
|
1201
|
+
for (int l = 0; l < 4; ++l) {
|
|
1202
|
+
sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32)
|
|
1203
|
+
+ y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32)
|
|
1204
|
+
+ y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32)
|
|
1205
|
+
+ y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32);
|
|
1206
|
+
}
|
|
1207
|
+
tmp += sum;
|
|
820
1208
|
#endif
|
|
1209
|
+
}
|
|
821
1210
|
|
|
822
1211
|
}
|
|
823
1212
|
|
|
@@ -854,7 +1243,132 @@ static void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const floa
|
|
|
854
1243
|
|
|
855
1244
|
// sum up partial sums and write back result
|
|
856
1245
|
#pragma unroll
|
|
857
|
-
for (int mask =
|
|
1246
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
1247
|
+
tmp +=
|
|
1248
|
+
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
if (tid == 0) {
|
|
1252
|
+
dst[row] = tmp;
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
static void dequantize_mul_mat_vec_q6_k_reorder(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows,
|
|
1257
|
+
const sycl::nd_item<3> &item_ct1) {
|
|
1258
|
+
|
|
1259
|
+
static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
|
|
1260
|
+
|
|
1261
|
+
const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
|
|
1262
|
+
item_ct1.get_local_id(1);
|
|
1263
|
+
if (row > nrows) return;
|
|
1264
|
+
|
|
1265
|
+
const int num_blocks_per_row = ncols / QK_K;
|
|
1266
|
+
const int ib0 = row*num_blocks_per_row;
|
|
1267
|
+
|
|
1268
|
+
// SOA base pointers for the reordered layout:
|
|
1269
|
+
// [ql: nb * QK_K/2] [qh: nb * QK_K/4] [scales: nb * QK_K/16] [d: nb * sizeof(half)]
|
|
1270
|
+
const int nb = nrows * num_blocks_per_row;
|
|
1271
|
+
const uint8_t * ql_base = (const uint8_t *)vx;
|
|
1272
|
+
const uint8_t * qh_base = ql_base + (size_t)nb * (QK_K / 2);
|
|
1273
|
+
const int8_t * scales_base = (const int8_t *)(qh_base + (size_t)nb * (QK_K / 4));
|
|
1274
|
+
const sycl::half * d_base = (const sycl::half *)((const uint8_t *)scales_base + (size_t)nb * (QK_K / 16));
|
|
1275
|
+
|
|
1276
|
+
#if QK_K == 256
|
|
1277
|
+
|
|
1278
|
+
const int tid =
|
|
1279
|
+
item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...7 or 0...15
|
|
1280
|
+
const int ix =
|
|
1281
|
+
item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0, 1
|
|
1282
|
+
|
|
1283
|
+
const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8
|
|
1284
|
+
|
|
1285
|
+
const int in = tid % step; // 0...15 or 0...7
|
|
1286
|
+
|
|
1287
|
+
#if K_QUANTS_PER_ITERATION == 1
|
|
1288
|
+
const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15
|
|
1289
|
+
const int is = 0;
|
|
1290
|
+
#else
|
|
1291
|
+
const int l0 = 4 * in; // 0, 4, 8, ..., 28
|
|
1292
|
+
const int is = in / 4;
|
|
1293
|
+
#endif
|
|
1294
|
+
|
|
1295
|
+
float tmp = 0; // partial sum for thread in warp
|
|
1296
|
+
|
|
1297
|
+
for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
|
|
1298
|
+
const int bi = ib0 + i;
|
|
1299
|
+
|
|
1300
|
+
const float d = d_base[bi];
|
|
1301
|
+
|
|
1302
|
+
for (int im = 0; im < 2; ++im) {
|
|
1303
|
+
const int ql_offset = 64*im + l0;
|
|
1304
|
+
const int qh_offset = 32*im + l0;
|
|
1305
|
+
const int s_offset = 8*im + is;
|
|
1306
|
+
const int y_offset = 128*im + l0;
|
|
1307
|
+
|
|
1308
|
+
const float * y = yy + i * QK_K + y_offset;
|
|
1309
|
+
const uint8_t * ql = ql_base + bi * (QK_K / 2) + ql_offset;
|
|
1310
|
+
const uint8_t * qh = qh_base + bi * (QK_K / 4) + qh_offset;
|
|
1311
|
+
const int8_t * s = scales_base + bi * (QK_K / 16) + s_offset;
|
|
1312
|
+
|
|
1313
|
+
#if K_QUANTS_PER_ITERATION == 1
|
|
1314
|
+
float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32)
|
|
1315
|
+
+ y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32)
|
|
1316
|
+
+ y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32)
|
|
1317
|
+
+ y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32)
|
|
1318
|
+
+ y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32)
|
|
1319
|
+
+ y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32)
|
|
1320
|
+
+ y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32)
|
|
1321
|
+
+y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32);
|
|
1322
|
+
tmp += sum;
|
|
1323
|
+
#else
|
|
1324
|
+
float sum = 0;
|
|
1325
|
+
for (int l = 0; l < 4; ++l) {
|
|
1326
|
+
sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32)
|
|
1327
|
+
+ y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32)
|
|
1328
|
+
+ y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32)
|
|
1329
|
+
+ y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32);
|
|
1330
|
+
}
|
|
1331
|
+
tmp += sum;
|
|
1332
|
+
#endif
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
#else
|
|
1338
|
+
|
|
1339
|
+
const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION); // 0...7
|
|
1340
|
+
const int ix = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION); // 0...3
|
|
1341
|
+
|
|
1342
|
+
const int step = tid * K_QUANTS_PER_ITERATION;
|
|
1343
|
+
|
|
1344
|
+
float tmp = 0; // partial sum for thread in warp
|
|
1345
|
+
|
|
1346
|
+
for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
|
|
1347
|
+
const int bi = ib0 + i;
|
|
1348
|
+
|
|
1349
|
+
const float * y = yy + i * QK_K + step;
|
|
1350
|
+
const uint8_t * ql = ql_base + bi * (QK_K / 2) + step;
|
|
1351
|
+
const uint8_t * qh = qh_base + bi * (QK_K / 4) + step;
|
|
1352
|
+
const int8_t * s = scales_base + bi * (QK_K / 16);
|
|
1353
|
+
|
|
1354
|
+
const float d = d_base[bi];
|
|
1355
|
+
|
|
1356
|
+
float sum = 0;
|
|
1357
|
+
for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) {
|
|
1358
|
+
sum += y[j+ 0] * s[0] * d * ((int8_t)((ql[j+ 0] & 0xF) | ((qh[j] & 0x03) << 4)) - 32)
|
|
1359
|
+
+ y[j+16] * s[1] * d * ((int8_t)((ql[j+16] & 0xF) | ((qh[j] & 0x0c) << 2)) - 32)
|
|
1360
|
+
+ y[j+32] * s[2] * d * ((int8_t)((ql[j+ 0] >> 4) | ((qh[j] & 0x30) >> 0)) - 32)
|
|
1361
|
+
+ y[j+48] * s[3] * d * ((int8_t)((ql[j+16] >> 4) | ((qh[j] & 0xc0) >> 2)) - 32);
|
|
1362
|
+
}
|
|
1363
|
+
tmp += sum;
|
|
1364
|
+
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
#endif
|
|
1368
|
+
|
|
1369
|
+
// sum up partial sums and write back result
|
|
1370
|
+
#pragma unroll
|
|
1371
|
+
for (int mask = WARP_SIZE / 2; mask > 0; mask >>= 1) {
|
|
858
1372
|
tmp +=
|
|
859
1373
|
dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
860
1374
|
}
|
|
@@ -909,6 +1423,50 @@ static void dequantize_mul_mat_vec_q4_0_sycl(const void *vx, const dfloat *y,
|
|
|
909
1423
|
}
|
|
910
1424
|
}
|
|
911
1425
|
|
|
1426
|
+
static void dequantize_mul_mat_vec_q1_0_sycl_reorder(const void *vx, const dfloat *y,
|
|
1427
|
+
float *dst, const int ncols,
|
|
1428
|
+
const int nrows,
|
|
1429
|
+
dpct::queue_ptr stream) {
|
|
1430
|
+
GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
|
|
1431
|
+
const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
|
|
1432
|
+
// the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead
|
|
1433
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1434
|
+
const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
|
|
1435
|
+
{
|
|
1436
|
+
dpct::has_capability_or_fail(stream->get_device(),
|
|
1437
|
+
{sycl::aspect::fp16});
|
|
1438
|
+
|
|
1439
|
+
stream->parallel_for(
|
|
1440
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1441
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1442
|
+
dequantize_mul_mat_vec_reorder<QK1_0, QR1_0, dequantize_q1_0_reorder>(
|
|
1443
|
+
vx, y, dst, ncols, nrows, item_ct1);
|
|
1444
|
+
});
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
static void dequantize_mul_mat_vec_q1_0_sycl(const void *vx, const dfloat *y,
|
|
1449
|
+
float *dst, const int ncols,
|
|
1450
|
+
const int nrows,
|
|
1451
|
+
dpct::queue_ptr stream) {
|
|
1452
|
+
GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
|
|
1453
|
+
const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
|
|
1454
|
+
// the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead
|
|
1455
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1456
|
+
const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
|
|
1457
|
+
{
|
|
1458
|
+
dpct::has_capability_or_fail(stream->get_device(),
|
|
1459
|
+
{sycl::aspect::fp16});
|
|
1460
|
+
|
|
1461
|
+
stream->parallel_for(
|
|
1462
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1463
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1464
|
+
dequantize_mul_mat_vec<QK1_0, QR1_0, dequantize_q1_0>(
|
|
1465
|
+
vx, y, dst, ncols, nrows, item_ct1);
|
|
1466
|
+
});
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
|
|
912
1470
|
static void dequantize_mul_mat_vec_q4_1_sycl(const void *vx, const dfloat *y,
|
|
913
1471
|
float *dst, const int ncols,
|
|
914
1472
|
const int nrows,
|
|
@@ -972,6 +1530,103 @@ static void dequantize_mul_mat_vec_q5_1_sycl(const void *vx, const dfloat *y,
|
|
|
972
1530
|
}
|
|
973
1531
|
}
|
|
974
1532
|
|
|
1533
|
+
static void dequantize_mul_mat_vec_q8_0_sycl_reorder(const void *vx, const dfloat *y,
|
|
1534
|
+
float *dst, const int ncols,
|
|
1535
|
+
const int nrows,
|
|
1536
|
+
dpct::queue_ptr stream) {
|
|
1537
|
+
GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
|
|
1538
|
+
const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
|
|
1539
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1540
|
+
const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
|
|
1541
|
+
{
|
|
1542
|
+
dpct::has_capability_or_fail(stream->get_device(),
|
|
1543
|
+
{sycl::aspect::fp16});
|
|
1544
|
+
|
|
1545
|
+
stream->parallel_for(
|
|
1546
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1547
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1548
|
+
// Q8_0 reorder layout: [all qs (ncols*nrows bytes)][all d values]
|
|
1549
|
+
// Cannot reuse dequantize_mul_mat_vec_reorder template because it has
|
|
1550
|
+
// Q4_0-specific constants hardcoded (d_ptr offset and qs stride).
|
|
1551
|
+
const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
|
|
1552
|
+
item_ct1.get_local_id(1);
|
|
1553
|
+
if (row >= nrows) return;
|
|
1554
|
+
|
|
1555
|
+
const int tid = item_ct1.get_local_id(2);
|
|
1556
|
+
const int iter_stride = 8*2*GGML_SYCL_DMMV_X;
|
|
1557
|
+
const int vals_per_iter = iter_stride / WARP_SIZE;
|
|
1558
|
+
const int ncols_left = ncols % (QK8_0*WARP_SIZE);
|
|
1559
|
+
const int ncols_align = ncols - ncols_left;
|
|
1560
|
+
|
|
1561
|
+
#ifdef GGML_SYCL_F16
|
|
1562
|
+
sycl::half2 tmp = {0.0f, 0.0f};
|
|
1563
|
+
#else
|
|
1564
|
+
float tmp = 0.0f;
|
|
1565
|
+
#endif
|
|
1566
|
+
const char *d_ptr = (const char*)vx + ncols*nrows; // d after all qs
|
|
1567
|
+
|
|
1568
|
+
int i = 0;
|
|
1569
|
+
for (i = 0; i < ncols_align; i += iter_stride) {
|
|
1570
|
+
const int col = i + vals_per_iter*tid;
|
|
1571
|
+
const int ib = (row*ncols + col)/QK8_0;
|
|
1572
|
+
const int iqs = col % QK8_0;
|
|
1573
|
+
|
|
1574
|
+
#pragma unroll
|
|
1575
|
+
for (int j = 0; j < vals_per_iter; j += 2) {
|
|
1576
|
+
dfloat2 v;
|
|
1577
|
+
dequantize_q8_0_reorder((const void *)d_ptr, ib, (const void *)vx,
|
|
1578
|
+
ib * QK8_0 + iqs + j, v);
|
|
1579
|
+
|
|
1580
|
+
#ifdef GGML_SYCL_F16
|
|
1581
|
+
dfloat2 t1{y[col + j + 0], y[col + j + 1]};
|
|
1582
|
+
tmp += v * t1;
|
|
1583
|
+
#else
|
|
1584
|
+
tmp += v.x() * y[col + j + 0];
|
|
1585
|
+
tmp += v.y() * y[col + j + 1];
|
|
1586
|
+
#endif
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
// handle remaining columns
|
|
1591
|
+
for (; i < ncols; i += iter_stride) {
|
|
1592
|
+
if (tid >= ncols_left/QK8_0) continue;
|
|
1593
|
+
const int col = i + vals_per_iter*tid;
|
|
1594
|
+
const int ib = (row*ncols + col)/QK8_0;
|
|
1595
|
+
const int iqs = col % QK8_0;
|
|
1596
|
+
|
|
1597
|
+
#pragma unroll
|
|
1598
|
+
for (int j = 0; j < vals_per_iter; j += 2) {
|
|
1599
|
+
dfloat2 v;
|
|
1600
|
+
dequantize_q8_0_reorder((const void *)d_ptr, ib, (const void *)vx,
|
|
1601
|
+
ib * QK8_0 + iqs + j, v);
|
|
1602
|
+
|
|
1603
|
+
#ifdef GGML_SYCL_F16
|
|
1604
|
+
dfloat2 t1{y[col + j + 0], y[col + j + 1]};
|
|
1605
|
+
tmp += v * t1;
|
|
1606
|
+
#else
|
|
1607
|
+
tmp += v.x() * y[col + j + 0];
|
|
1608
|
+
tmp += v.y() * y[col + j + 1];
|
|
1609
|
+
#endif
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
// reduce
|
|
1614
|
+
const int mask_start = ncols > GGML_SYCL_DMMV_X ? WARP_SIZE >> 1 : WARP_SIZE >> 2;
|
|
1615
|
+
for (int mask = mask_start; mask > 0; mask >>= 1) {
|
|
1616
|
+
tmp += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
if (tid == 0) {
|
|
1620
|
+
#ifdef GGML_SYCL_F16
|
|
1621
|
+
dst[row] = tmp.x() + tmp.y();
|
|
1622
|
+
#else
|
|
1623
|
+
dst[row] = tmp;
|
|
1624
|
+
#endif
|
|
1625
|
+
}
|
|
1626
|
+
});
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
|
|
975
1630
|
static void dequantize_mul_mat_vec_q8_0_sycl(const void *vx, const dfloat *y,
|
|
976
1631
|
float *dst, const int ncols,
|
|
977
1632
|
const int nrows,
|
|
@@ -1001,10 +1656,10 @@ static void dequantize_mul_mat_vec_q2_K_sycl(const void *vx, const float *y,
|
|
|
1001
1656
|
const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2
|
|
1002
1657
|
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1003
1658
|
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1004
|
-
const sycl::range<3> block_dims(1, ny,
|
|
1659
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1005
1660
|
stream->parallel_for(
|
|
1006
1661
|
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1007
|
-
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(
|
|
1662
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1008
1663
|
dequantize_mul_mat_vec_q2_k(vx, y, dst, ncols, nrows, item_ct1);
|
|
1009
1664
|
});
|
|
1010
1665
|
}
|
|
@@ -1017,14 +1672,30 @@ static void dequantize_mul_mat_vec_q3_K_sycl(const void *vx, const float *y,
|
|
|
1017
1672
|
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1018
1673
|
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1019
1674
|
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1020
|
-
const sycl::range<3> block_dims(1, ny,
|
|
1675
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1021
1676
|
stream->parallel_for(
|
|
1022
1677
|
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1023
|
-
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(
|
|
1678
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1024
1679
|
dequantize_mul_mat_vec_q3_k(vx, y, dst, ncols, nrows, item_ct1);
|
|
1025
1680
|
});
|
|
1026
1681
|
}
|
|
1027
1682
|
|
|
1683
|
+
static void dequantize_mul_mat_vec_q3_K_sycl_reorder(const void *vx, const float *y,
|
|
1684
|
+
float *dst, const int ncols,
|
|
1685
|
+
const int nrows,
|
|
1686
|
+
dpct::queue_ptr stream) {
|
|
1687
|
+
GGML_ASSERT(ncols % QK_K == 0);
|
|
1688
|
+
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1689
|
+
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1690
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1691
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1692
|
+
stream->parallel_for(
|
|
1693
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1694
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1695
|
+
dequantize_mul_mat_vec_q3_k_reorder(vx, y, dst, ncols, nrows, item_ct1);
|
|
1696
|
+
});
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1028
1699
|
static void dequantize_mul_mat_vec_q4_K_sycl(const void *vx, const float *y,
|
|
1029
1700
|
float *dst, const int ncols,
|
|
1030
1701
|
const int nrows,
|
|
@@ -1033,10 +1704,10 @@ static void dequantize_mul_mat_vec_q4_K_sycl(const void *vx, const float *y,
|
|
|
1033
1704
|
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1034
1705
|
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1035
1706
|
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1036
|
-
const sycl::range<3> block_dims(1, ny,
|
|
1707
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1037
1708
|
stream->parallel_for(
|
|
1038
1709
|
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1039
|
-
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(
|
|
1710
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1040
1711
|
dequantize_mul_mat_vec_q4_k(vx, y, dst, ncols, nrows, item_ct1);
|
|
1041
1712
|
});
|
|
1042
1713
|
}
|
|
@@ -1046,10 +1717,10 @@ static void dequantize_mul_mat_vec_q5_K_sycl(const void *vx, const float *y,
|
|
|
1046
1717
|
const int nrows,
|
|
1047
1718
|
dpct::queue_ptr stream) {
|
|
1048
1719
|
GGML_ASSERT(ncols % QK_K == 0);
|
|
1049
|
-
const sycl::range<3> block_dims(1, 1,
|
|
1720
|
+
const sycl::range<3> block_dims(1, 1, WARP_SIZE);
|
|
1050
1721
|
stream->parallel_for(
|
|
1051
1722
|
sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, block_dims),
|
|
1052
|
-
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(
|
|
1723
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1053
1724
|
dequantize_mul_mat_vec_q5_k(vx, y, dst, ncols, item_ct1);
|
|
1054
1725
|
});
|
|
1055
1726
|
}
|
|
@@ -1062,14 +1733,62 @@ static void dequantize_mul_mat_vec_q6_K_sycl(const void *vx, const float *y,
|
|
|
1062
1733
|
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1063
1734
|
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1064
1735
|
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1065
|
-
const sycl::range<3> block_dims(1, ny,
|
|
1736
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1066
1737
|
stream->parallel_for(
|
|
1067
1738
|
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1068
|
-
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(
|
|
1739
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1069
1740
|
dequantize_mul_mat_vec_q6_k(vx, y, dst, ncols, nrows, item_ct1);
|
|
1070
1741
|
});
|
|
1071
1742
|
}
|
|
1072
1743
|
|
|
1744
|
+
static void dequantize_mul_mat_vec_q4_K_sycl_reorder(const void *vx, const float *y,
|
|
1745
|
+
float *dst, const int ncols,
|
|
1746
|
+
const int nrows,
|
|
1747
|
+
dpct::queue_ptr stream) {
|
|
1748
|
+
GGML_ASSERT(ncols % QK_K == 0);
|
|
1749
|
+
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1750
|
+
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1751
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1752
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1753
|
+
stream->parallel_for(
|
|
1754
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1755
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1756
|
+
dequantize_mul_mat_vec_q4_k_reorder(vx, y, dst, ncols, nrows, item_ct1);
|
|
1757
|
+
});
|
|
1758
|
+
}
|
|
1759
|
+
|
|
1760
|
+
static void dequantize_mul_mat_vec_q5_K_sycl_reorder(const void *vx, const float *y,
|
|
1761
|
+
float *dst, const int ncols,
|
|
1762
|
+
const int nrows,
|
|
1763
|
+
dpct::queue_ptr stream) {
|
|
1764
|
+
GGML_ASSERT(ncols % QK_K == 0);
|
|
1765
|
+
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1766
|
+
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1767
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1768
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1769
|
+
stream->parallel_for(
|
|
1770
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1771
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1772
|
+
dequantize_mul_mat_vec_q5_k_reorder(vx, y, dst, ncols, nrows, item_ct1);
|
|
1773
|
+
});
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
static void dequantize_mul_mat_vec_q6_K_sycl_reorder(const void *vx, const float *y,
|
|
1777
|
+
float *dst, const int ncols,
|
|
1778
|
+
const int nrows,
|
|
1779
|
+
dpct::queue_ptr stream) {
|
|
1780
|
+
GGML_ASSERT(ncols % QK_K == 0);
|
|
1781
|
+
const int ny = 2 / K_QUANTS_PER_ITERATION;
|
|
1782
|
+
const int block_num_y = (nrows + ny - 1) / ny;
|
|
1783
|
+
const sycl::range<3> block_nums(1, 1, block_num_y);
|
|
1784
|
+
const sycl::range<3> block_dims(1, ny, WARP_SIZE);
|
|
1785
|
+
stream->parallel_for(
|
|
1786
|
+
sycl::nd_range<3>(block_nums * block_dims, block_dims),
|
|
1787
|
+
[=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]] {
|
|
1788
|
+
dequantize_mul_mat_vec_q6_k_reorder(vx, y, dst, ncols, nrows, item_ct1);
|
|
1789
|
+
});
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1073
1792
|
void ggml_sycl_op_dequantize_mul_mat_vec(
|
|
1074
1793
|
ggml_backend_sycl_context & ctx,
|
|
1075
1794
|
const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
|
|
@@ -1087,9 +1806,11 @@ void ggml_sycl_op_dequantize_mul_mat_vec(
|
|
|
1087
1806
|
sycl::half *src1_dfloat = nullptr; // dfloat == half
|
|
1088
1807
|
|
|
1089
1808
|
bool src1_convert_f16 =
|
|
1809
|
+
src0->type == GGML_TYPE_Q1_0 ||
|
|
1090
1810
|
src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 ||
|
|
1091
1811
|
src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 ||
|
|
1092
|
-
src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16
|
|
1812
|
+
src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16 ||
|
|
1813
|
+
src0->type == GGML_TYPE_BF16;
|
|
1093
1814
|
|
|
1094
1815
|
if (src1_convert_f16) {
|
|
1095
1816
|
scope_op_debug_print scope_dbg_print(__func__, "/to_fp16_sycl", dst, /*num_src=*/2,
|
|
@@ -1104,6 +1825,14 @@ void ggml_sycl_op_dequantize_mul_mat_vec(
|
|
|
1104
1825
|
#endif // GGML_SYCL_F16
|
|
1105
1826
|
|
|
1106
1827
|
switch (src0->type) {
|
|
1828
|
+
case GGML_TYPE_Q1_0:
|
|
1829
|
+
if ((ggml_tensor_extra_gpu*)dst->src[0]->extra &&
|
|
1830
|
+
((ggml_tensor_extra_gpu*)dst->src[0]->extra)->optimized_feature.reorder) {
|
|
1831
|
+
dequantize_mul_mat_vec_q1_0_sycl_reorder(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1832
|
+
} else {
|
|
1833
|
+
dequantize_mul_mat_vec_q1_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1834
|
+
}
|
|
1835
|
+
break;
|
|
1107
1836
|
case GGML_TYPE_Q4_0:
|
|
1108
1837
|
if ((ggml_tensor_extra_gpu*)dst->src[0]->extra &&
|
|
1109
1838
|
((ggml_tensor_extra_gpu*)dst->src[0]->extra)->optimized_feature.reorder) {
|
|
@@ -1122,32 +1851,56 @@ void ggml_sycl_op_dequantize_mul_mat_vec(
|
|
|
1122
1851
|
dequantize_mul_mat_vec_q5_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1123
1852
|
break;
|
|
1124
1853
|
case GGML_TYPE_Q8_0:
|
|
1125
|
-
|
|
1854
|
+
if ((ggml_tensor_extra_gpu *) dst->src[0]->extra &&
|
|
1855
|
+
((ggml_tensor_extra_gpu *) dst->src[0]->extra)->optimized_feature.reorder) {
|
|
1856
|
+
dequantize_mul_mat_vec_q8_0_sycl_reorder(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1857
|
+
} else {
|
|
1858
|
+
dequantize_mul_mat_vec_q8_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1859
|
+
}
|
|
1126
1860
|
break;
|
|
1127
1861
|
case GGML_TYPE_Q2_K:
|
|
1128
1862
|
dequantize_mul_mat_vec_q2_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1129
1863
|
break;
|
|
1130
1864
|
case GGML_TYPE_Q3_K:
|
|
1131
|
-
|
|
1865
|
+
if ((ggml_tensor_extra_gpu *) dst->src[0]->extra &&
|
|
1866
|
+
((ggml_tensor_extra_gpu *) dst->src[0]->extra)->optimized_feature.reorder) {
|
|
1867
|
+
dequantize_mul_mat_vec_q3_K_sycl_reorder(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1868
|
+
} else {
|
|
1869
|
+
dequantize_mul_mat_vec_q3_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1870
|
+
}
|
|
1132
1871
|
break;
|
|
1133
1872
|
case GGML_TYPE_Q4_K:
|
|
1134
1873
|
if ((ggml_tensor_extra_gpu *) dst->src[0]->extra &&
|
|
1135
1874
|
((ggml_tensor_extra_gpu *) dst->src[0]->extra)->optimized_feature.reorder) {
|
|
1136
|
-
|
|
1137
|
-
GGML_ABORT("Unimplemented dequantize case case for q4_k reorder");
|
|
1875
|
+
dequantize_mul_mat_vec_q4_K_sycl_reorder(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1138
1876
|
} else {
|
|
1139
1877
|
dequantize_mul_mat_vec_q4_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1140
1878
|
}
|
|
1141
1879
|
break;
|
|
1142
1880
|
case GGML_TYPE_Q5_K:
|
|
1143
|
-
|
|
1881
|
+
if ((ggml_tensor_extra_gpu *) dst->src[0]->extra &&
|
|
1882
|
+
((ggml_tensor_extra_gpu *) dst->src[0]->extra)->optimized_feature.reorder) {
|
|
1883
|
+
dequantize_mul_mat_vec_q5_K_sycl_reorder(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1884
|
+
} else {
|
|
1885
|
+
dequantize_mul_mat_vec_q5_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1886
|
+
}
|
|
1144
1887
|
break;
|
|
1145
1888
|
case GGML_TYPE_Q6_K:
|
|
1146
|
-
|
|
1889
|
+
if ((ggml_tensor_extra_gpu *) dst->src[0]->extra &&
|
|
1890
|
+
((ggml_tensor_extra_gpu *) dst->src[0]->extra)->optimized_feature.reorder) {
|
|
1891
|
+
dequantize_mul_mat_vec_q6_K_sycl_reorder(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1892
|
+
} else {
|
|
1893
|
+
dequantize_mul_mat_vec_q6_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
|
|
1894
|
+
}
|
|
1147
1895
|
break;
|
|
1148
1896
|
case GGML_TYPE_F16:
|
|
1149
1897
|
convert_mul_mat_vec_f16_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1150
1898
|
break;
|
|
1899
|
+
#ifdef GGML_SYCL_DMMV_HAS_BF16
|
|
1900
|
+
case GGML_TYPE_BF16:
|
|
1901
|
+
convert_mul_mat_vec_bf16_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
|
|
1902
|
+
break;
|
|
1903
|
+
#endif
|
|
1151
1904
|
default:
|
|
1152
1905
|
printf("ggml_sycl_op_dequantize_mul_mat_vec unsupported GGML_TYPE %d\n", src0->type);
|
|
1153
1906
|
GGML_ABORT("fatal error");
|