From c1ec1151b641e5a2cf86258a9a5e5b814b119468 Mon Sep 17 00:00:00 2001 From: Todd Malsbary Date: Wed, 13 May 2026 23:32:10 +0000 Subject: [PATCH 1/4] Add -cl-fp32-correctly-rounded-divide-sqrt to F16=ON builds Signed-off-by: Todd Malsbary --- .devops/intel.Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devops/intel.Dockerfile b/.devops/intel.Dockerfile index 3d1abe612f5..415d55d63de 100644 --- a/.devops/intel.Dockerfile +++ b/.devops/intel.Dockerfile @@ -14,7 +14,8 @@ COPY . . RUN if [ "${GGML_SYCL_F16}" = "ON" ]; then \ echo "GGML_SYCL_F16 is set" \ - && export OPT_SYCL_F16="-DGGML_SYCL_F16=ON"; \ + && export OPT_SYCL_F16="-DGGML_SYCL_F16=ON" \ + && export SYCL_PROGRAM_COMPILE_OPTIONS="-cl-fp32-correctly-rounded-divide-sqrt"; \ fi && \ echo "Building with dynamic libs" && \ cmake -B build -DGGML_NATIVE=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DLLAMA_BUILD_TESTS=OFF ${OPT_SYCL_F16} && \ From 5b77745ed669525f97617cb8c1dd88161eeb6844 Mon Sep 17 00:00:00 2001 From: Todd Malsbary Date: Mon, 1 Jun 2026 18:23:07 +0000 Subject: [PATCH 2/4] Make GGML_SYCL_F16=ON the default Signed-off-by: Todd Malsbary --- .devops/intel.Dockerfile | 2 +- docs/backend/SYCL.md | 16 ++++++++-------- examples/sycl/build.sh | 6 +++--- examples/sycl/win-build-sycl.bat | 7 +++---- ggml/CMakeLists.txt | 2 +- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.devops/intel.Dockerfile b/.devops/intel.Dockerfile index 415d55d63de..793b804d3e4 100644 --- a/.devops/intel.Dockerfile +++ b/.devops/intel.Dockerfile @@ -4,7 +4,7 @@ ARG ONEAPI_VERSION=2025.3.3-0-devel-ubuntu24.04 FROM intel/deep-learning-essentials:$ONEAPI_VERSION AS build -ARG GGML_SYCL_F16=OFF +ARG GGML_SYCL_F16=ON RUN apt-get update && \ apt-get install -y git libssl-dev diff --git a/docs/backend/SYCL.md b/docs/backend/SYCL.md index f66facc856a..28719237f7e 100644 --- a/docs/backend/SYCL.md +++ b/docs/backend/SYCL.md @@ -283,11 +283,11 @@ or # Export relevant ENV variables source /opt/intel/oneapi/setvars.sh -# Option 1: Use FP32 (recommended for better performance in most cases) +# Option 1: Use FP16 (recommended for better performance in most cases) cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -# Option 2: Use FP16 -cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=ON +# Option 2: Use FP32 +cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=OFF # build all binary cmake --build build --config Release -j -v @@ -500,11 +500,11 @@ On the oneAPI command line window, step into the llama.cpp main directory and ru ``` @call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force -# Option 1: Use FP32 (recommended for better performance in most cases) +# Option 1: Use FP16 (recommended for better performance in most cases) cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release -# Option 2: Or FP16 -cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=ON +# Option 2: Or FP32 +cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=OFF cmake --build build --config Release -j ``` @@ -515,7 +515,7 @@ Or, use CMake presets to build: cmake --preset x64-windows-sycl-release cmake --build build-x64-windows-sycl-release -j --target llama-completion -cmake -DGGML_SYCL_F16=ON --preset x64-windows-sycl-release +cmake -DGGML_SYCL_F16=OFF --preset x64-windows-sycl-release cmake --build build-x64-windows-sycl-release -j --target llama-completion cmake --preset x64-windows-sycl-debug @@ -716,7 +716,7 @@ use 1 SYCL GPUs: [0] with Max compute units:512 | GGML_SYCL | ON (mandatory) | Enable build with SYCL code path. | | GGML_SYCL_TARGET | INTEL *(default)* | Set the SYCL target device type. | | GGML_SYCL_DEVICE_ARCH | Optional | Set the SYCL device architecture. Setting the device architecture can improve the performance. See the table [--offload-arch](https://github.com/intel/llvm/blob/sycl/sycl/doc/design/OffloadDesign.md#--offload-arch) for a list of valid architectures. | -| GGML_SYCL_F16 | OFF *(default)* \|ON *(optional)* | Enable FP16 build with SYCL code path. (1.) | +| GGML_SYCL_F16 | ON *(default)* \|OFF *(optional)* | Enable FP16 build with SYCL code path. (1.) | | GGML_SYCL_GRAPH | OFF *(default)* \|ON *(Optional)* | Enable build with [SYCL Graph extension](https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/experimental/sycl_ext_oneapi_graph.asciidoc). | | GGML_SYCL_DNN | ON *(default)* \|OFF *(Optional)* | Enable build with oneDNN. | | GGML_SYCL_HOST_MEM_FALLBACK | ON *(default)* \|OFF *(Optional)* | Allow host memory fallback when device memory is full during quantized weight reorder. Enables inference to continue at reduced speed (reading over PCIe) instead of failing. Requires Linux kernel 6.8+. | diff --git a/examples/sycl/build.sh b/examples/sycl/build.sh index bf7d6b53bf2..2c3dec8f262 100755 --- a/examples/sycl/build.sh +++ b/examples/sycl/build.sh @@ -7,10 +7,10 @@ mkdir -p build cd build source /opt/intel/oneapi/setvars.sh -#for FP16 -#cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=ON -DLLAMA_OPENSSL=OFF # faster for long-prompt inference - #for FP32 +#cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=OFF -DLLAMA_OPENSSL=OFF + +#for FP16 cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_OPENSSL=OFF #build example/main diff --git a/examples/sycl/win-build-sycl.bat b/examples/sycl/win-build-sycl.bat index fc8b33bbc26..616c47d8462 100644 --- a/examples/sycl/win-build-sycl.bat +++ b/examples/sycl/win-build-sycl.bat @@ -11,11 +11,10 @@ if %errorlevel% neq 0 goto ERROR @call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force if %errorlevel% neq 0 goto ERROR -:: for FP16 -:: faster for long-prompt inference -:: cmake -G "MinGW Makefiles" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=ON - :: for FP32 +:: cmake -G "MinGW Makefiles" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=OFF + +:: for FP16 cmake -G "Ninja" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release if %errorlevel% neq 0 goto ERROR diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 672b37dffc3..41831134b55 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -246,7 +246,7 @@ set (GGML_METAL_STD "" CACHE STRING "ggml: metal standard version (-std option(GGML_OPENMP "ggml: use OpenMP" ON) option(GGML_RPC "ggml: use RPC" OFF) option(GGML_SYCL "ggml: use SYCL" OFF) -option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" OFF) +option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" ON) option(GGML_SYCL_GRAPH "ggml: enable graphs in the SYCL backend" ON) option(GGML_SYCL_HOST_MEM_FALLBACK "ggml: allow host memory fallback in SYCL reorder (requires kernel 6.8+)" ON) option(GGML_SYCL_DNN "ggml: enable oneDNN in the SYCL backend" ON) From 60c237246ba8c214360b5cf3ca20b64b25b98cdc Mon Sep 17 00:00:00 2001 From: Todd Malsbary Date: Wed, 3 Jun 2026 16:23:38 +0000 Subject: [PATCH 3/4] Leave F32 the default F16 remains explictly set for example and Dockerfile builds. Signed-off-by: Todd Malsbary --- docs/backend/SYCL.md | 14 +++++++------- examples/sycl/build.sh | 8 ++++---- examples/sycl/win-build-sycl.bat | 9 +++++---- ggml/CMakeLists.txt | 2 +- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/backend/SYCL.md b/docs/backend/SYCL.md index 456d59069b1..266391a92da 100644 --- a/docs/backend/SYCL.md +++ b/docs/backend/SYCL.md @@ -291,10 +291,10 @@ or source /opt/intel/oneapi/setvars.sh # Option 1: Use FP16 (recommended for better performance in most cases) -cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx +cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=ON # Option 2: Use FP32 -cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=OFF +cmake -B build -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx # build all binary cmake --build build --config Release -j -v @@ -508,10 +508,10 @@ On the oneAPI command line window, step into the llama.cpp main directory and ru @call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force # Option 1: Use FP16 (recommended for better performance in most cases) -cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release +cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=ON # Option 2: Or FP32 -cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=OFF +cmake -B build -G "Ninja" -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release -j ``` @@ -519,10 +519,10 @@ cmake --build build --config Release -j Or, use CMake presets to build: ```sh -cmake --preset x64-windows-sycl-release +cmake -DGGML_SYCL_F16=ON --preset x64-windows-sycl-release cmake --build build-x64-windows-sycl-release -j --target llama-completion -cmake -DGGML_SYCL_F16=OFF --preset x64-windows-sycl-release +cmake --preset x64-windows-sycl-release cmake --build build-x64-windows-sycl-release -j --target llama-completion cmake --preset x64-windows-sycl-debug @@ -723,7 +723,7 @@ use 1 SYCL GPUs: [0] with Max compute units:512 | GGML_SYCL | ON (mandatory) | Enable build with SYCL code path. | | GGML_SYCL_TARGET | INTEL *(default)* | Set the SYCL target device type. | | GGML_SYCL_DEVICE_ARCH | Optional | Set the SYCL device architecture. Setting the device architecture can improve the performance. See the table [--offload-arch](https://github.com/intel/llvm/blob/sycl/sycl/doc/design/OffloadDesign.md#--offload-arch) for a list of valid architectures. | -| GGML_SYCL_F16 | ON *(default)* \|OFF *(optional)* | Enable FP16 build with SYCL code path. (1.) | +| GGML_SYCL_F16 | OFF *(default)* \|ON *(optional)* | Enable FP16 build with SYCL code path. (1.) | | GGML_SYCL_GRAPH | OFF *(default)* \|ON *(Optional)* | Enable build with [SYCL Graph extension](https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/experimental/sycl_ext_oneapi_graph.asciidoc). | | GGML_SYCL_DNN | ON *(default)* \|OFF *(Optional)* | Enable build with oneDNN. | | GGML_SYCL_HOST_MEM_FALLBACK | ON *(default)* \|OFF *(Optional)* | Allow host memory fallback when device memory is full during quantized weight reorder. Enables inference to continue at reduced speed (reading over PCIe) instead of failing. Requires Linux kernel 6.8+. | diff --git a/examples/sycl/build.sh b/examples/sycl/build.sh index 2c3dec8f262..99c61b43424 100755 --- a/examples/sycl/build.sh +++ b/examples/sycl/build.sh @@ -7,11 +7,11 @@ mkdir -p build cd build source /opt/intel/oneapi/setvars.sh -#for FP32 -#cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=OFF -DLLAMA_OPENSSL=OFF - #for FP16 -cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_OPENSSL=OFF +cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=ON -DLLAMA_OPENSSL=OFF # faster for long-prompt inference + +#for FP32 +#cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_OPENSSL=OFF #build example/main #cmake --build . --config Release --target main diff --git a/examples/sycl/win-build-sycl.bat b/examples/sycl/win-build-sycl.bat index 616c47d8462..ed34ed653dc 100644 --- a/examples/sycl/win-build-sycl.bat +++ b/examples/sycl/win-build-sycl.bat @@ -11,11 +11,12 @@ if %errorlevel% neq 0 goto ERROR @call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force if %errorlevel% neq 0 goto ERROR -:: for FP32 -:: cmake -G "MinGW Makefiles" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=OFF - :: for FP16 -cmake -G "Ninja" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release +:: faster for long-prompt inference +cmake -G "MinGW Makefiles" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=ON + +:: for FP32 +:: cmake -G "Ninja" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release if %errorlevel% neq 0 goto ERROR :: build all binary diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index ca57426360e..dc8899b46ef 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -246,7 +246,7 @@ set (GGML_METAL_STD "" CACHE STRING "ggml: metal standard version (-std option(GGML_OPENMP "ggml: use OpenMP" ON) option(GGML_RPC "ggml: use RPC" OFF) option(GGML_SYCL "ggml: use SYCL" OFF) -option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" ON) +option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" OFF) option(GGML_SYCL_GRAPH "ggml: enable graphs in the SYCL backend" ON) option(GGML_SYCL_HOST_MEM_FALLBACK "ggml: allow host memory fallback in SYCL reorder (requires kernel 6.8+)" ON) option(GGML_SYCL_SUPPORT_LEVEL_ZERO "ggml: use Level Zero API in SYCL backend" ON) From a495ce0dd89fe9e1ecc44579ae5313debc00eb1c Mon Sep 17 00:00:00 2001 From: Todd Malsbary Date: Tue, 9 Jun 2026 22:56:15 +0000 Subject: [PATCH 4/4] Revert changes to examples/sycl/build scripts Signed-off-by: Todd Malsbary --- docs/backend/SYCL.md | 2 ++ examples/sycl/build.sh | 4 ++-- examples/sycl/win-build-sycl.bat | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/backend/SYCL.md b/docs/backend/SYCL.md index 266391a92da..955625435e8 100644 --- a/docs/backend/SYCL.md +++ b/docs/backend/SYCL.md @@ -281,6 +281,7 @@ When targeting an intel GPU, the user should expect one or more devices among th #### Intel GPU ```sh +# Uses FP32, consider using FP16 for better performance in most cases ./examples/sycl/build.sh ``` @@ -497,6 +498,7 @@ Choose one of following methods to build from source code. ##### Option 1: Script ```sh +# Uses FP32, consider using FP16 for better performance in most cases .\examples\sycl\win-build-sycl.bat ``` diff --git a/examples/sycl/build.sh b/examples/sycl/build.sh index 99c61b43424..bf7d6b53bf2 100755 --- a/examples/sycl/build.sh +++ b/examples/sycl/build.sh @@ -8,10 +8,10 @@ cd build source /opt/intel/oneapi/setvars.sh #for FP16 -cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=ON -DLLAMA_OPENSSL=OFF # faster for long-prompt inference +#cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DGGML_SYCL_F16=ON -DLLAMA_OPENSSL=OFF # faster for long-prompt inference #for FP32 -#cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_OPENSSL=OFF +cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_OPENSSL=OFF #build example/main #cmake --build . --config Release --target main diff --git a/examples/sycl/win-build-sycl.bat b/examples/sycl/win-build-sycl.bat index ed34ed653dc..fc8b33bbc26 100644 --- a/examples/sycl/win-build-sycl.bat +++ b/examples/sycl/win-build-sycl.bat @@ -13,10 +13,10 @@ if %errorlevel% neq 0 goto ERROR :: for FP16 :: faster for long-prompt inference -cmake -G "MinGW Makefiles" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=ON +:: cmake -G "MinGW Makefiles" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_SYCL_F16=ON :: for FP32 -:: cmake -G "Ninja" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release +cmake -G "Ninja" .. -DLLAMA_OPENSSL=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release if %errorlevel% neq 0 goto ERROR :: build all binary