whispercpp 1.3.7 → 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/README.md +5 -4
- data/ext/options.rb +1 -1
- data/ext/ruby_whisper.c +0 -1
- data/ext/ruby_whisper.h +7 -1
- data/ext/ruby_whisper_context.c +50 -1
- data/ext/ruby_whisper_log_settable.h +1 -2
- data/ext/ruby_whisper_params.c +9 -8
- data/ext/ruby_whisper_transcribe.cpp +0 -19
- 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 +2 -1
- data/ext/sources/cmake/parakeet.pc.in +2 -2
- data/ext/sources/cmake/whisper.pc.in +2 -2
- data/ext/sources/examples/cli/cli.cpp +9 -1
- data/ext/sources/examples/common-ggml.cpp +2 -0
- data/ext/sources/examples/vad-speech-segments/speech.cpp +3 -2
- data/ext/sources/ggml/CMakeLists.txt +3 -4
- data/ext/sources/ggml/include/ggml-cuda.h +0 -3
- data/ext/sources/ggml/include/ggml-sycl.h +8 -0
- data/ext/sources/ggml/include/ggml.h +3 -1
- data/ext/sources/ggml/src/CMakeLists.txt +8 -1
- data/ext/sources/ggml/src/ggml-backend-meta.cpp +7 -4
- data/ext/sources/ggml/src/ggml-common.h +13 -2
- data/ext/sources/ggml/src/ggml-cpu/CMakeLists.txt +1 -1
- data/ext/sources/ggml/src/ggml-cpu/amx/mmq.cpp +5 -6
- data/ext/sources/ggml/src/ggml-cpu/arch/arm/quants.c +78 -4
- data/ext/sources/ggml/src/ggml-cpu/arch/x86/quants.c +142 -4
- data/ext/sources/ggml/src/ggml-cpu/arch-fallback.h +7 -2
- data/ext/sources/ggml/src/ggml-cpu/ggml-cpu.c +14 -0
- data/ext/sources/ggml/src/ggml-cpu/llamafile/sgemm.cpp +26 -19
- data/ext/sources/ggml/src/ggml-cpu/ops.cpp +129 -46
- data/ext/sources/ggml/src/ggml-cpu/quants.c +51 -0
- data/ext/sources/ggml/src/ggml-cpu/quants.h +3 -0
- data/ext/sources/ggml/src/ggml-cpu/simd-gemm.h +1 -1
- data/ext/sources/ggml/src/ggml-cpu/simd-mappings.h +11 -0
- data/ext/sources/ggml/src/ggml-cpu/vec.cpp +2 -2
- data/ext/sources/ggml/src/ggml-cuda/binbcast.cu +90 -46
- 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 +4 -0
- data/ext/sources/ggml/src/ggml-cuda/concat.cu +33 -21
- data/ext/sources/ggml/src/ggml-cuda/conv-transpose-1d.cu +14 -12
- data/ext/sources/ggml/src/ggml-cuda/convert.cu +86 -34
- data/ext/sources/ggml/src/ggml-cuda/cpy.cu +80 -29
- data/ext/sources/ggml/src/ggml-cuda/fattn-common.cuh +9 -5
- data/ext/sources/ggml/src/ggml-cuda/fattn-mma-f16.cuh +4 -0
- data/ext/sources/ggml/src/ggml-cuda/fattn-tile.cuh +9 -5
- data/ext/sources/ggml/src/ggml-cuda/fattn.cu +27 -21
- data/ext/sources/ggml/src/ggml-cuda/gated_delta_net.cu +40 -25
- data/ext/sources/ggml/src/ggml-cuda/gated_delta_net.cuh +10 -0
- data/ext/sources/ggml/src/ggml-cuda/getrows.cu +15 -12
- data/ext/sources/ggml/src/ggml-cuda/ggml-cuda.cu +718 -1248
- data/ext/sources/ggml/src/ggml-cuda/mmq.cu +7 -0
- data/ext/sources/ggml/src/ggml-cuda/mmvq.cu +77 -40
- data/ext/sources/ggml/src/ggml-cuda/out-prod.cu +55 -12
- data/ext/sources/ggml/src/ggml-cuda/set-rows.cu +64 -4
- 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_32-ncols2_2.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_8-ncols2_2.cu +1 -0
- data/ext/sources/ggml/src/ggml-cuda/topk-moe.cu +7 -1
- data/ext/sources/ggml/src/ggml-cuda/vendors/hip.h +1 -0
- data/ext/sources/ggml/src/ggml-cuda/vendors/musa.h +1 -0
- data/ext/sources/ggml/src/ggml-hexagon/CMakeLists.txt +0 -5
- data/ext/sources/ggml/src/ggml-hexagon/ggml-hexagon.cpp +1634 -1293
- data/ext/sources/ggml/src/ggml-hexagon/htp/CMakeLists.txt +11 -40
- data/ext/sources/ggml/src/ggml-hexagon/htp/cmake-toolchain.cmake +13 -15
- data/ext/sources/ggml/src/ggml-hexagon/htp/concat-ops.c +1 -1
- data/ext/sources/ggml/src/ggml-hexagon/htp/flash-attn-ops.c +1749 -399
- data/ext/sources/ggml/src/ggml-hexagon/htp/flash-attn-ops.h +303 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-common.h +80 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-dma.h +26 -23
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-profile.h +64 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hex-utils.h +1 -83
- 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 +9 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-queue.h +27 -4
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-utils.h +59 -37
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-ctx.h +11 -3
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-ops.h +52 -12
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp-vtcm.h +19 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/htp_iface.idl +2 -1
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-base.h +14 -30
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-exp.h +39 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/hvx-fa-kernels.h +232 -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-sigmoid.h +39 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/main.c +127 -32
- data/ext/sources/ggml/src/ggml-hexagon/htp/matmul-ops.c +3023 -4425
- data/ext/sources/ggml/src/ggml-hexagon/htp/matmul-ops.h +650 -0
- data/ext/sources/ggml/src/ggml-hexagon/htp/rope-ops.c +48 -13
- data/ext/sources/ggml/src/ggml-hexagon/htp/ssm-conv.c +10 -9
- 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 +168 -50
- data/ext/sources/ggml/src/ggml-hexagon/libggml-htp.inf +0 -4
- data/ext/sources/ggml/src/ggml-hip/CMakeLists.txt +5 -0
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.cpp +69 -5
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.h +4 -1
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-device.m +27 -6
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-impl.h +38 -0
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-ops.cpp +132 -2
- data/ext/sources/ggml/src/ggml-metal/ggml-metal-ops.h +2 -0
- data/ext/sources/ggml/src/ggml-metal/ggml-metal.metal +345 -87
- data/ext/sources/ggml/src/ggml-opencl/CMakeLists.txt +13 -0
- data/ext/sources/ggml/src/ggml-opencl/fa_tune.h +92 -0
- data/ext/sources/ggml/src/ggml-opencl/ggml-opencl.cpp +4060 -357
- data/ext/sources/ggml/src/ggml-opencl/kernels/cvt.cl +198 -0
- 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/gemm_moe_mxfp4_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_0_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_1_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q4_k_f32_ns.cl +71 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_0_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_1_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q5_k_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_moe_q6_k_f32_ns.cl +74 -6
- data/ext/sources/ggml/src/ggml-opencl/kernels/gemm_noshuffle_q1_0_f32.cl +94 -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_q8_0_f32.cl +1 -1
- 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_mv_f16_f32_l4.cl +1149 -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/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 +733 -130
- data/ext/sources/ggml/src/ggml-openvino/ggml-decoder.h +76 -23
- data/ext/sources/ggml/src/ggml-openvino/ggml-openvino-extra.cpp +57 -3
- data/ext/sources/ggml/src/ggml-openvino/ggml-openvino-extra.h +29 -8
- data/ext/sources/ggml/src/ggml-openvino/ggml-openvino.cpp +307 -59
- data/ext/sources/ggml/src/ggml-openvino/ggml-quants.cpp +66 -0
- 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 +134 -38
- 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 -23
- data/ext/sources/ggml/src/ggml-openvino/openvino/op_table.h +18 -5
- 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/translate_session.cpp +43 -40
- data/ext/sources/ggml/src/ggml-openvino/openvino/translate_session.h +5 -4
- data/ext/sources/ggml/src/ggml-openvino/openvino/utils.cpp +548 -3
- data/ext/sources/ggml/src/ggml-openvino/openvino/utils.h +28 -26
- data/ext/sources/ggml/src/ggml-openvino/utils.cpp +383 -94
- data/ext/sources/ggml/src/ggml-openvino/utils.h +11 -8
- data/ext/sources/ggml/src/ggml-quants.c +76 -0
- data/ext/sources/ggml/src/ggml-quants.h +3 -0
- data/ext/sources/ggml/src/ggml-sycl/CMakeLists.txt +5 -5
- data/ext/sources/ggml/src/ggml-sycl/backend.hpp +2 -0
- 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 +6 -8
- data/ext/sources/ggml/src/ggml-sycl/common.hpp +19 -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 +6 -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/dequantize.hpp +15 -0
- data/ext/sources/ggml/src/ggml-sycl/dmmv.cpp +492 -319
- data/ext/sources/ggml/src/ggml-sycl/dpct/helper.hpp +15 -7
- data/ext/sources/ggml/src/ggml-sycl/element_wise.cpp +215 -115
- data/ext/sources/ggml/src/ggml-sycl/element_wise.hpp +2 -0
- data/ext/sources/ggml/src/ggml-sycl/ggml-sycl.cpp +1006 -336
- data/ext/sources/ggml/src/ggml-sycl/mmvq.cpp +252 -67
- data/ext/sources/ggml/src/ggml-sycl/mmvq.hpp +17 -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/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/set_rows.cpp +10 -2
- data/ext/sources/ggml/src/ggml-sycl/softmax.cpp +9 -10
- data/ext/sources/ggml/src/ggml-sycl/vecdotq.hpp +35 -0
- data/ext/sources/ggml/src/ggml-vulkan/CMakeLists.txt +5 -0
- data/ext/sources/ggml/src/ggml-vulkan/ggml-vulkan.cpp +833 -215
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/col2im_1d.comp +61 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp +1 -1
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/conv3d_mm.comp +431 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/diag.comp +3 -3
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +1 -0
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +1 -0
- 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 +23 -4
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/glu_main.glsl +14 -18
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/l2_norm.comp +4 -7
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp +21 -24
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +31 -23
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +6 -5
- data/ext/sources/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +84 -67
- 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/tri.comp +3 -3
- 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 +121 -74
- data/ext/sources/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +26 -19
- data/ext/sources/ggml/src/ggml-webgpu/ggml-webgpu.cpp +31 -36
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/common_decls.tmpl +16 -2
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl +7 -7
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl +21 -0
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +439 -320
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_id_vec.wgsl +2 -2
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl +45 -39
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_acc.tmpl +586 -465
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec_q_acc.tmpl +63 -69
- data/ext/sources/ggml/src/ggml-webgpu/wgsl-shaders/quantize_q8.wgsl +14 -9
- data/ext/sources/ggml/src/ggml.c +36 -14
- data/ext/sources/include/whisper.h +21 -0
- data/ext/sources/src/whisper.cpp +164 -14
- data/lib/whisper/log_settable.rb +5 -8
- data/lib/whisper/model/uri.rb +0 -7
- data/sig/whisper.rbs +6 -0
- data/test/test_vad.rb +9 -0
- data/test/test_vad_context.rb +2 -2
- data/whispercpp.gemspec +1 -1
- metadata +62 -37
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-flash-attn-ops.c +0 -1878
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-matmul-ops.c +0 -2066
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-ops.c +0 -6
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-ops.h +0 -88
- data/ext/sources/ggml/src/ggml-hexagon/htp/hmx-profile.h +0 -34
- data/ext/sources/ggml/src/ggml-hexagon/htp/vtcm-utils.h +0 -16
- data/ext/sources/ggml/src/ggml-openvino/openvino/op/unary_gelu.cpp +0 -25
- 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 -20
- 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/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
|
@@ -34,26 +34,26 @@ template <float (*bin_op)(const float, const float),
|
|
|
34
34
|
static __global__ void k_bin_bcast(const src0_t * src0,
|
|
35
35
|
const src1_t * src1,
|
|
36
36
|
dst_t * dst,
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
37
|
+
const uint32_t ne0,
|
|
38
|
+
const uint32_t ne1,
|
|
39
|
+
const uint32_t ne2,
|
|
40
40
|
const uint3 ne3,
|
|
41
41
|
const uint3 ne10,
|
|
42
42
|
const uint3 ne11,
|
|
43
43
|
const uint3 ne12,
|
|
44
44
|
const uint3 ne13,
|
|
45
|
-
/*const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const
|
|
45
|
+
/*const uint32_t s0,*/
|
|
46
|
+
const uint32_t s1,
|
|
47
|
+
const uint32_t s2,
|
|
48
|
+
const uint32_t s3,
|
|
49
|
+
const uint32_t s00,
|
|
50
|
+
const uint32_t s01,
|
|
51
|
+
const uint32_t s02,
|
|
52
|
+
const uint32_t s03,
|
|
53
|
+
const uint32_t s10,
|
|
54
|
+
const uint32_t s11,
|
|
55
|
+
const uint32_t s12,
|
|
56
|
+
const uint32_t s13,
|
|
57
57
|
src1_ptrs... src1s) {
|
|
58
58
|
ggml_cuda_pdl_lc();
|
|
59
59
|
const uint32_t i0s = blockDim.x * blockIdx.x + threadIdx.x;
|
|
@@ -61,7 +61,7 @@ static __global__ void k_bin_bcast(const src0_t * src0,
|
|
|
61
61
|
const uint32_t i2 = fastdiv((blockDim.z * blockIdx.z + threadIdx.z), ne3);
|
|
62
62
|
const uint32_t i3 = (blockDim.z * blockIdx.z + threadIdx.z) - (i2 * ne3.z);
|
|
63
63
|
|
|
64
|
-
if (i0s >=
|
|
64
|
+
if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3.z) {
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -69,25 +69,32 @@ static __global__ void k_bin_bcast(const src0_t * src0,
|
|
|
69
69
|
const uint32_t i12 = fastmodulo(i2, ne12);
|
|
70
70
|
const uint32_t i13 = fastmodulo(i3, ne13);
|
|
71
71
|
|
|
72
|
-
const size_t i_src0 =
|
|
73
|
-
const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
|
|
74
|
-
const size_t i_dst =
|
|
72
|
+
const size_t i_src0 = size_t( i3)*s03 + size_t( i2)*s02 + size_t( i1)*s01;
|
|
73
|
+
const size_t i_src1 = size_t(i13)*s13 + size_t(i12)*s12 + size_t(i11)*s11;
|
|
74
|
+
const size_t i_dst = size_t( i3)*s3 + size_t( i2)*s2 + size_t( i1)*s1;
|
|
75
75
|
|
|
76
76
|
const src0_t * src0_row = src0 ? (src0 + i_src0) : nullptr;
|
|
77
77
|
dst_t * dst_row = dst + i_dst;
|
|
78
78
|
|
|
79
|
+
const uint32_t s0 = blockDim.x * gridDim.x;
|
|
80
|
+
|
|
79
81
|
ggml_cuda_pdl_sync();
|
|
80
|
-
for (
|
|
82
|
+
for (uint32_t i0 = i0s; i0 < ne0; i0 += s0) {
|
|
81
83
|
const uint32_t i10 = fastmodulo(i0, ne10);
|
|
82
84
|
|
|
83
|
-
float result = src0_row ? (float) src0_row[i0*s00] : 0.0f;
|
|
85
|
+
float result = src0_row ? (float) src0_row[size_t(i0)*s00] : 0.0f;
|
|
84
86
|
if constexpr (sizeof...(src1_ptrs) > 0) {
|
|
85
|
-
result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10*s10])));
|
|
87
|
+
result = (..., (result = bin_op(result, (float)src1s[i_src1 + size_t(i10)*s10])));
|
|
86
88
|
} else {
|
|
87
|
-
result = bin_op(result, (float)src1[i_src1 + i10*s10]);
|
|
89
|
+
result = bin_op(result, (float)src1[i_src1 + size_t(i10)*s10]);
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
dst_row[i0] = (dst_t) result;
|
|
93
|
+
|
|
94
|
+
// protect i0 from overflow
|
|
95
|
+
if (ne0 - i0 <= s0) {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
91
98
|
}
|
|
92
99
|
}
|
|
93
100
|
|
|
@@ -110,19 +117,19 @@ static __global__ void k_bin_bcast_unravel(const src0_t * src0,
|
|
|
110
117
|
const uint3 ne12,
|
|
111
118
|
const uint3 ne13,
|
|
112
119
|
/*const int s0,*/
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
const
|
|
120
|
+
const uint32_t s1,
|
|
121
|
+
const uint32_t s2,
|
|
122
|
+
const uint32_t s3,
|
|
123
|
+
const uint32_t s00,
|
|
124
|
+
const uint32_t s01,
|
|
125
|
+
const uint32_t s02,
|
|
126
|
+
const uint32_t s03,
|
|
127
|
+
const uint32_t s10,
|
|
128
|
+
const uint32_t s11,
|
|
129
|
+
const uint32_t s12,
|
|
130
|
+
const uint32_t s13,
|
|
124
131
|
src1_ptrs... src1s) {
|
|
125
|
-
const
|
|
132
|
+
const uint32_t i = blockDim.x*blockIdx.x + threadIdx.x;
|
|
126
133
|
|
|
127
134
|
const uint32_t i3 = fastdiv(i, prod_012);
|
|
128
135
|
const uint32_t i2 = fastdiv(i - i3 * prod_012.z, prod_01);
|
|
@@ -133,25 +140,25 @@ static __global__ void k_bin_bcast_unravel(const src0_t * src0,
|
|
|
133
140
|
return;
|
|
134
141
|
}
|
|
135
142
|
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
const
|
|
143
|
+
const uint32_t i11 = fastmodulo(i1, ne11);
|
|
144
|
+
const uint32_t i12 = fastmodulo(i2, ne12);
|
|
145
|
+
const uint32_t i13 = fastmodulo(i3, ne13);
|
|
139
146
|
|
|
140
|
-
const size_t i_src0 =
|
|
141
|
-
const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
|
|
142
|
-
const size_t i_dst =
|
|
147
|
+
const size_t i_src0 = size_t( i3)*s03 + size_t( i2)*s02 + size_t( i1)*s01;
|
|
148
|
+
const size_t i_src1 = size_t(i13)*s13 + size_t(i12)*s12 + size_t(i11)*s11;
|
|
149
|
+
const size_t i_dst = size_t( i3)*s3 + size_t( i2)*s2 + size_t( i1)*s1;
|
|
143
150
|
|
|
144
151
|
const src0_t * src0_row = src0 ? (src0 + i_src0) : nullptr;
|
|
145
152
|
dst_t * dst_row = dst + i_dst;
|
|
146
153
|
|
|
147
|
-
const
|
|
154
|
+
const uint32_t i10 = fastmodulo(i0, ne10);
|
|
148
155
|
|
|
149
156
|
ggml_cuda_pdl_sync();
|
|
150
|
-
float result = src0_row ? (float) src0_row[i0*s00] : 0.0f;
|
|
157
|
+
float result = src0_row ? (float) src0_row[size_t(i0)*s00] : 0.0f;
|
|
151
158
|
if constexpr (sizeof...(src1_ptrs) > 0) {
|
|
152
|
-
result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10*s10])));
|
|
159
|
+
result = (..., (result = bin_op(result, (float)src1s[i_src1 + size_t(i10)*s10])));
|
|
153
160
|
} else {
|
|
154
|
-
result = bin_op(result, (float)src1[i_src1 + i10*s10]);
|
|
161
|
+
result = bin_op(result, (float)src1[i_src1 + size_t(i10)*s10]);
|
|
155
162
|
}
|
|
156
163
|
|
|
157
164
|
dst_row[i0] = (dst_t) result;
|
|
@@ -248,6 +255,31 @@ static void launch_bin_bcast_pack(const ggml_tensor * src0, const ggml_tensor *
|
|
|
248
255
|
size_t s02 = nb02 / sizeof(src0_t);
|
|
249
256
|
size_t s03 = nb03 / sizeof(src0_t);
|
|
250
257
|
|
|
258
|
+
GGML_ASSERT(ne0 <= std::numeric_limits<uint32_t>::max());
|
|
259
|
+
GGML_ASSERT(ne1 <= std::numeric_limits<uint32_t>::max());
|
|
260
|
+
GGML_ASSERT(ne2 <= std::numeric_limits<uint32_t>::max());
|
|
261
|
+
GGML_ASSERT(ne3 <= std::numeric_limits<uint32_t>::max());
|
|
262
|
+
|
|
263
|
+
//GGML_ASSERT(s0 <= std::numeric_limits<uint32_t>::max());
|
|
264
|
+
GGML_ASSERT(s1 <= std::numeric_limits<uint32_t>::max());
|
|
265
|
+
GGML_ASSERT(s2 <= std::numeric_limits<uint32_t>::max());
|
|
266
|
+
GGML_ASSERT(s3 <= std::numeric_limits<uint32_t>::max());
|
|
267
|
+
|
|
268
|
+
GGML_ASSERT(s00 <= std::numeric_limits<uint32_t>::max());
|
|
269
|
+
GGML_ASSERT(s01 <= std::numeric_limits<uint32_t>::max());
|
|
270
|
+
GGML_ASSERT(s02 <= std::numeric_limits<uint32_t>::max());
|
|
271
|
+
GGML_ASSERT(s03 <= std::numeric_limits<uint32_t>::max());
|
|
272
|
+
|
|
273
|
+
GGML_ASSERT(s10 <= std::numeric_limits<uint32_t>::max());
|
|
274
|
+
GGML_ASSERT(s11 <= std::numeric_limits<uint32_t>::max());
|
|
275
|
+
GGML_ASSERT(s12 <= std::numeric_limits<uint32_t>::max());
|
|
276
|
+
GGML_ASSERT(s13 <= std::numeric_limits<uint32_t>::max());
|
|
277
|
+
|
|
278
|
+
GGML_ASSERT(cne1[0] <= std::numeric_limits<uint32_t>::max());
|
|
279
|
+
GGML_ASSERT(cne1[1] <= std::numeric_limits<uint32_t>::max());
|
|
280
|
+
GGML_ASSERT(cne1[2] <= std::numeric_limits<uint32_t>::max());
|
|
281
|
+
GGML_ASSERT(cne1[3] <= std::numeric_limits<uint32_t>::max());
|
|
282
|
+
|
|
251
283
|
GGML_ASSERT(nb0 % sizeof(dst_t) == 0);
|
|
252
284
|
GGML_ASSERT(nb1 % sizeof(dst_t) == 0);
|
|
253
285
|
GGML_ASSERT(nb2 % sizeof(dst_t) == 0);
|
|
@@ -263,6 +295,8 @@ static void launch_bin_bcast_pack(const ggml_tensor * src0, const ggml_tensor *
|
|
|
263
295
|
GGML_ASSERT(nb12 % sizeof(src1_t) == 0);
|
|
264
296
|
GGML_ASSERT(nb13 % sizeof(src1_t) == 0);
|
|
265
297
|
|
|
298
|
+
GGML_ASSERT(ne2 * ne3 <= std::numeric_limits<unsigned int>::max());
|
|
299
|
+
|
|
266
300
|
const int block_size = 128;
|
|
267
301
|
|
|
268
302
|
int64_t hne0 = std::max(ne0 / 2LL, 1LL);
|
|
@@ -281,7 +315,13 @@ static void launch_bin_bcast_pack(const ggml_tensor * src0, const ggml_tensor *
|
|
|
281
315
|
const uint3 ne13 = init_fastdiv_values((uint32_t) cne1[3]);
|
|
282
316
|
|
|
283
317
|
if (block_nums.z > 65535 || block_nums.y > 65535) {
|
|
284
|
-
|
|
318
|
+
int64_t block_num = (ne0 * ne1 * ne2 * ne3 + block_size - 1) / block_size;
|
|
319
|
+
|
|
320
|
+
GGML_ASSERT(block_num <= std::numeric_limits<uint32_t>::max());
|
|
321
|
+
GGML_ASSERT(block_num * block_size <= std::numeric_limits<uint32_t>::max());
|
|
322
|
+
GGML_ASSERT(ne0 * ne1 <= std::numeric_limits<uint32_t>::max());
|
|
323
|
+
GGML_ASSERT(ne0 * ne1 * ne2 <= std::numeric_limits<uint32_t>::max());
|
|
324
|
+
|
|
285
325
|
const uint3 prod_012 = init_fastdiv_values((uint32_t) (ne0 * ne1 * ne2));
|
|
286
326
|
const uint3 prod_01 = init_fastdiv_values((uint32_t) (ne0 * ne1));
|
|
287
327
|
const uint3 ne0_fastdiv = init_fastdiv_values((uint32_t) ne0);
|
|
@@ -298,6 +338,10 @@ static void launch_bin_bcast_pack(const ggml_tensor * src0, const ggml_tensor *
|
|
|
298
338
|
s10, s11, s12, s13, (const src1_t *) dst->src[I + 1]->data...);
|
|
299
339
|
}
|
|
300
340
|
} else {
|
|
341
|
+
GGML_ASSERT(int64_t(block_nums.x) * block_dims.x <= std::numeric_limits<uint32_t>::max());
|
|
342
|
+
GGML_ASSERT(int64_t(block_nums.y) * block_dims.y <= std::numeric_limits<uint32_t>::max());
|
|
343
|
+
GGML_ASSERT(int64_t(block_nums.z) * block_dims.z <= std::numeric_limits<uint32_t>::max());
|
|
344
|
+
|
|
301
345
|
const uint3 ne3_fastdiv = init_fastdiv_values((uint32_t) ne3);
|
|
302
346
|
{
|
|
303
347
|
const ggml_cuda_kernel_launch_params launch_params = ggml_cuda_kernel_launch_params(block_nums, block_dims, 0, stream);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#include "col2im-1d.cuh"
|
|
2
|
+
#include "convert.cuh"
|
|
3
|
+
|
|
4
|
+
// col2im_1d: scatter-add GEMM columns to 1D signal (gather approach)
|
|
5
|
+
// columns: [K*OC, T_in] -> output: [T_out, OC]
|
|
6
|
+
// Supports F32, F16, BF16 data with F32 accumulator.
|
|
7
|
+
|
|
8
|
+
template <typename T>
|
|
9
|
+
static __global__ void col2im_1d_kernel(
|
|
10
|
+
const T * __restrict__ col,
|
|
11
|
+
T * __restrict__ dst,
|
|
12
|
+
const int T_in, const uint3 T_out_fd,
|
|
13
|
+
const int OC, const int K, const int K_OC,
|
|
14
|
+
const int s0, const int p0, const int total) {
|
|
15
|
+
|
|
16
|
+
const int idx = threadIdx.x + blockIdx.x * blockDim.x;
|
|
17
|
+
if (idx >= total) return;
|
|
18
|
+
|
|
19
|
+
// dst layout: [T_out, OC], ne[0]=T_out fastest
|
|
20
|
+
const uint2 qr = fast_div_modulo((uint32_t)idx, T_out_fd); // qr.x = idx / T_out, qr.y = idx % T_out
|
|
21
|
+
const int oc = (int)qr.x;
|
|
22
|
+
const int t_out = (int)qr.y;
|
|
23
|
+
const int t_abs = t_out + p0; // absolute position in uncropped signal
|
|
24
|
+
|
|
25
|
+
// Gather: find all (t_in, k) where t_in*s + k == t_abs, 0 <= k < K
|
|
26
|
+
int t_in_min = (t_abs - K + s0) / s0; // ceil((t_abs - K + 1) / s)
|
|
27
|
+
if (t_in_min < 0) t_in_min = 0;
|
|
28
|
+
int t_in_max = t_abs / s0;
|
|
29
|
+
if (t_in_max >= T_in) t_in_max = T_in - 1;
|
|
30
|
+
|
|
31
|
+
float sum = 0.0f;
|
|
32
|
+
for (int t_in = t_in_min; t_in <= t_in_max; t_in++) {
|
|
33
|
+
const int k = t_abs - t_in * s0;
|
|
34
|
+
// col layout: [K*OC, T_in], column index = oc * K + k
|
|
35
|
+
sum += ggml_cuda_cast<float>(col[(oc * K + k) + t_in * K_OC]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
dst[idx] = ggml_cuda_cast<T>(sum);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void ggml_cuda_op_col2im_1d(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
|
|
42
|
+
const ggml_tensor * src0 = dst->src[0];
|
|
43
|
+
cudaStream_t stream = ctx.stream();
|
|
44
|
+
|
|
45
|
+
GGML_ASSERT(ggml_is_contiguous(src0));
|
|
46
|
+
|
|
47
|
+
const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
|
|
48
|
+
const int32_t OC = ((const int32_t *)(dst->op_params))[1];
|
|
49
|
+
const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
|
|
50
|
+
|
|
51
|
+
const int K_OC = (int) src0->ne[0];
|
|
52
|
+
const int T_in = (int) src0->ne[1];
|
|
53
|
+
const int K = K_OC / OC;
|
|
54
|
+
const int T_out = (int) dst->ne[0];
|
|
55
|
+
|
|
56
|
+
const uint3 T_out_fd = init_fastdiv_values((uint32_t)T_out);
|
|
57
|
+
|
|
58
|
+
const int total = T_out * OC;
|
|
59
|
+
const int block_size = 256;
|
|
60
|
+
const int num_blocks = (total + block_size - 1) / block_size;
|
|
61
|
+
|
|
62
|
+
switch (src0->type) {
|
|
63
|
+
case GGML_TYPE_F32: {
|
|
64
|
+
col2im_1d_kernel<<<num_blocks, block_size, 0, stream>>>(
|
|
65
|
+
(const float *)src0->data, (float *)dst->data,
|
|
66
|
+
T_in, T_out_fd, OC, K, K_OC, s0, p0, total);
|
|
67
|
+
} break;
|
|
68
|
+
case GGML_TYPE_F16: {
|
|
69
|
+
col2im_1d_kernel<<<num_blocks, block_size, 0, stream>>>(
|
|
70
|
+
(const half *)src0->data, (half *)dst->data,
|
|
71
|
+
T_in, T_out_fd, OC, K, K_OC, s0, p0, total);
|
|
72
|
+
} break;
|
|
73
|
+
case GGML_TYPE_BF16: {
|
|
74
|
+
col2im_1d_kernel<<<num_blocks, block_size, 0, stream>>>(
|
|
75
|
+
(const nv_bfloat16 *)src0->data, (nv_bfloat16 *)dst->data,
|
|
76
|
+
T_in, T_out_fd, OC, K, K_OC, s0, p0, total);
|
|
77
|
+
} break;
|
|
78
|
+
default:
|
|
79
|
+
GGML_ABORT("col2im_1d: unsupported type");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -1505,12 +1505,16 @@ struct ggml_cuda_mm_fusion_args_host {
|
|
|
1505
1505
|
const ggml_tensor * x_bias = nullptr;
|
|
1506
1506
|
const ggml_tensor * gate = nullptr;
|
|
1507
1507
|
const ggml_tensor * gate_bias = nullptr;
|
|
1508
|
+
const ggml_tensor * x_scale = nullptr;
|
|
1509
|
+
const ggml_tensor * gate_scale = nullptr;
|
|
1508
1510
|
ggml_glu_op glu_op;
|
|
1509
1511
|
};
|
|
1510
1512
|
struct ggml_cuda_mm_fusion_args_device {
|
|
1511
1513
|
const void * x_bias = nullptr;
|
|
1512
1514
|
const void * gate = nullptr;
|
|
1513
1515
|
const void * gate_bias = nullptr;
|
|
1516
|
+
const void * x_scale = nullptr;
|
|
1517
|
+
const void * gate_scale = nullptr;
|
|
1514
1518
|
ggml_glu_op glu_op;
|
|
1515
1519
|
};
|
|
1516
1520
|
|
|
@@ -152,8 +152,8 @@ static void concat_cuda(const ggml_tensor * src0, const ggml_tensor * src1, ggml
|
|
|
152
152
|
src0_d + i3*(src0->nb[3] / sizeof(T)),
|
|
153
153
|
src1_d + i3*(src1->nb[3] / sizeof(T)),
|
|
154
154
|
dst_d + i3*( dst->nb[3] / sizeof(T)),
|
|
155
|
-
src0->ne[0], src0->ne[1], src0->ne[2],
|
|
156
|
-
dst->ne[0], dst->ne[1], dst->ne[2], dim, stream);
|
|
155
|
+
ggml_row_size(src0->type, src0->ne[0])/sizeof(T), src0->ne[1], src0->ne[2],
|
|
156
|
+
ggml_row_size(dst->type, dst->ne[0])/sizeof(T), dst->ne[1], dst->ne[2], dim, stream);
|
|
157
157
|
}
|
|
158
158
|
} else {
|
|
159
159
|
const size_t size0 = ggml_nbytes(src0);
|
|
@@ -163,6 +163,8 @@ static void concat_cuda(const ggml_tensor * src0, const ggml_tensor * src1, ggml
|
|
|
163
163
|
CUDA_CHECK(cudaMemcpyAsync((char *) dst->data + size0, src1->data, size1, cudaMemcpyDeviceToDevice, stream));
|
|
164
164
|
}
|
|
165
165
|
} else {
|
|
166
|
+
GGML_ASSERT(!ggml_is_quantized(src0->type));
|
|
167
|
+
|
|
166
168
|
dim3 grid_dim(dst->ne[1], dst->ne[2], dst->ne[3]);
|
|
167
169
|
auto launch_kernel = [&](auto dim) {
|
|
168
170
|
concat_non_cont<T, dim><<<grid_dim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(
|
|
@@ -204,24 +206,34 @@ void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
|
|
|
204
206
|
|
|
205
207
|
GGML_ASSERT(src0->type == src1->type);
|
|
206
208
|
GGML_ASSERT(dst->type == src0->type);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
209
|
+
|
|
210
|
+
if (ggml_is_quantized(src0->type)) {
|
|
211
|
+
GGML_ASSERT(ggml_is_contiguous(src0));
|
|
212
|
+
GGML_ASSERT(ggml_is_contiguous(src1));
|
|
213
|
+
GGML_ASSERT(src0->ne[0] % ggml_blck_size(src0->type) == 0);
|
|
214
|
+
GGML_ASSERT(src1->ne[0] % ggml_blck_size(src1->type) == 0);
|
|
215
|
+
|
|
216
|
+
// if tensors are contiguous and ne[0] is multiple of the block size we can concat both tensors as byte tensors
|
|
217
|
+
concat_cuda<uint8_t>(src0, src1, dst, dim, stream);
|
|
218
|
+
} else {
|
|
219
|
+
GGML_ASSERT(ggml_blck_size(src0->type) == 1);
|
|
220
|
+
|
|
221
|
+
switch (ggml_type_size(src0->type)) {
|
|
222
|
+
case 1:
|
|
223
|
+
concat_cuda<uint8_t>(src0, src1, dst, dim, stream);
|
|
224
|
+
break;
|
|
225
|
+
case 2:
|
|
226
|
+
concat_cuda<uint16_t>(src0, src1, dst, dim, stream);
|
|
227
|
+
break;
|
|
228
|
+
case 4:
|
|
229
|
+
concat_cuda<uint32_t>(src0, src1, dst, dim, stream);
|
|
230
|
+
break;
|
|
231
|
+
case 8:
|
|
232
|
+
concat_cuda<uint64_t>(src0, src1, dst, dim, stream);
|
|
233
|
+
break;
|
|
234
|
+
default:
|
|
235
|
+
GGML_ABORT("Unsupported type size: %zu", ggml_type_size(src0->type));
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
226
238
|
}
|
|
227
239
|
}
|
|
@@ -11,30 +11,32 @@ static __global__ void conv_transpose_1d_kernel(
|
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
int
|
|
14
|
+
int out_t = global_index % dst_ne0;
|
|
15
|
+
int out_ch = (global_index / dst_ne0) % dst_ne1;
|
|
16
|
+
int plane = global_index / (dst_ne0 * dst_ne1);
|
|
15
17
|
|
|
16
18
|
float accumulator = 0;
|
|
17
19
|
|
|
18
20
|
for (int c = 0; c < src0_ne2; c++) {
|
|
19
|
-
int
|
|
21
|
+
int kernel_offset = src0_ne0 * (out_ch + src0_ne1 * c);
|
|
22
|
+
int input_offset = src1_ne0 * (c + src1_ne1 * plane);
|
|
20
23
|
|
|
21
|
-
int
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
for (int i = 0; i < src1_ne0; i++) {
|
|
25
|
-
if (!(idx >= i*s0 && idx < i*s0 + src0_ne0)) {
|
|
24
|
+
for (int k = 0; k < src0_ne0; k++) {
|
|
25
|
+
int input_numer = out_t + p0 - k*d0;
|
|
26
|
+
if (input_numer < 0 || input_numer % s0 != 0) {
|
|
26
27
|
continue;
|
|
27
28
|
}
|
|
28
|
-
int weight_idx = idx - i*s0;
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
int input_t = input_numer / s0;
|
|
31
|
+
if (input_t >= src1_ne0) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
32
34
|
|
|
33
|
-
accumulator +=
|
|
35
|
+
accumulator += src0[kernel_offset + k] * src1[input_offset + input_t];
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
dst[global_index] = accumulator;
|
|
37
|
-
GGML_UNUSED_VARS(
|
|
39
|
+
GGML_UNUSED_VARS(src0_ne3, src1_ne2, src1_ne3, dst_ne2, dst_ne3);
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
static void conv_transpose_1d_f32_f32_cuda(
|