You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit fa237db
Browse filesBrowse the repository at this point in the historyBrowse files
feat(build): build the whisper helper natively for Windows on ARM
18x faster than the emulated x64 helper, and the only one that produces a usable
transcript at all. Same 60 s of German speech, same ggml-small-q8_0 model, both
binaries driven directly over /inference:
native arm64 (ggml threads) load 0.9s inference 10.1s 9059 chars, language "de"
emulated x64 (Vulkan) load 1.3s inference 183.3s failed, 0 chars
The emulated run is not merely slow. It returns nothing after three minutes, and
in-app it reported "auto-detected language: th" on German speech — the same shape of
failure as the D3D11 preview drawing black on this adapter. Adreno under emulation
produces results that look like application bugs.
Five things had to change, each a separate x64 assumption:
`os_arch_tag` derived the architecture from `uname -m`. Git Bash is an x86_64 build,
so on Windows on ARM it reports x86_64 while running emulated, and the script would
have built and staged an x64 helper on an ARM64 host without a word. Node is native
and knows better.
`backend_flag_for_host` had no win32-arm64 case and exited with "Unknown os-arch".
ggml refuses MSVC for ARM outright ("MSVC is not supported for ARM, use clang") — its
NEON intrinsics are absent from MSVC's ARM64 code generator. The build now uses
clang-cl through Ninja rather than the `-T ClangCL` VS toolset, so it reuses the
standalone LLVM the compositor addon already requires for bindgen instead of pulling
a second ~1 GB copy into Visual Studio.
Ninja gets no MSVC environment of its own, so configure and build run inside
vcvarsall via a throwaway .cmd — nested quoting through bash, MSYS and cmd does not
survive, and the same file needs Windows-native paths because Git Bash stops
rewriting them once cmd is the caller.
`-DGGML_OPENMP=OFF` is a licence constraint, not a tuning choice. clang-cl links ggml
against libomp140.aarch64.dll, and the only copy on a Visual Studio install sits under
`VC/Redist/.../debug_nonredist/` — a directory whose name is the licence position.
ggml's own thread pool needs no runtime we cannot ship, and at 6x realtime it is
plainly fast enough.
NOTE for CI: this makes LLVM a build prerequisite for the arm64 branch.
build-whisper-stt.yml still has no arm64 matrix entry, so packages keep falling back
to the staged x64 helper until it gains one.
0 commit comments