Files
llama.cpp/docs/ops.md
T
Michael Taylor 7170cad4d0 sycl: fix CONV_2D wrong results for non-contiguous input (#30363)
* sycl: fix CONV_2D wrong results for non-contiguous input

The kernel indexes the `input` as a contiguous [W, H, C, N] tensor, but
supports_op claimed the op for any layout. A non-contiguous (e.g. `CWHN`
permuted) input was read with the wrong element offsets, silently
producing wrong results.

Gate the CONV_2D op on `input` and `kernel` contiguity, matching the
CUDA backend contract, and assert input contiguity in the op.

`test-backend-ops -b SYCL0 -o CONV_2D`: goes from 16 failures to 0,
none.

```text
  2006/2006 tests passed
  Backend SYCL0: OK
Backend 2/2: CPU
  Skipping
2/2 backends passed
OK
```

Assisted-by: pi (unsloth/Qwen3.8-27B-GGUF:Q4_K_M via llama.cpp)

* sycl : CONV_2D cwhn=1 support

Make the SYCL backend compute `GGML_OP_CONV_2D` correctly for `cwhn=1` (CWHN
channel-order) inputs and kernels, so the previously failing test-
backend-ops CONV_2D cases pass on SYCL instead of being skipped or
miscomputed.

- Implement CWHN layout support in `ggml/src/ggml-sycl/conv2d.cpp`
  (`ggml_sycl_op_conv2d`).
- Update SYCL `supports_op` for `GGML_OP_CONV_2D` in
  `ggml/src/ggml-sycl/ggml-sycl.cpp` to accept both layouts.

Assisted-by: pi (Greatjedi/Qwen3.8-27B-Intel-Arc-Tuned-GGUF via llama.cpp)

* sycl docs : update ops for SYCL
2026-10-22 16:19:58 +08:00

14 KiB

GGML Operations

List of GGML operations and backend support status.

How to add a backend to this table:

  1. Run test-backend-ops support --output csv with your backend name and redirect output to a csv file in docs/ops/ (e.g., docs/ops/CUDA.csv)
  2. Regenerate /docs/ops.md via ./scripts/create_ops_docs.py

Legend:

  • ✅ Fully supported by this backend
  • 🟡 Partially supported by this backend
  • ❌ Not supported by this backend
Operation BLAS CANN CPU CUDA ET HTP MTL OpenCL SYCL Vulkan WebGPU ZenDNN zDNN
ABS ❌ ✅ ✅ 🟡 🟡 ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
ACC ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
ADD ❌ ✅ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
ADD1 ❌ ✅ ❌ ✅ ❌ ❌ ❌ ❌ ❌ ❌ ❌ ❌ ❌
ADD_ID ❌ ❌ ✅ ✅ ❌ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
ARANGE ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
ARGMAX ❌ ✅ ✅ ✅ ❌ ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
ARGSORT ❌ ✅ ✅ ✅ ❌ ✅ ✅ 🟡 ✅ ✅ ✅ ❌ ❌
CEIL ❌ ❌ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
CLAMP ❌ ✅ ✅ ✅ 🟡 ✅ ✅ 🟡 ✅ ✅ ✅ ❌ ❌
COL2IM_1D ❌ ❌ ✅ ❌ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
CONCAT ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ 🟡 ❌ ❌
CONT ❌ 🟡 ✅ ✅ 🟡 🟡 ✅ 🟡 ✅ ✅ 🟡 ❌ ❌
CONV_1D_DW ❌ ❌ ❌ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌ ❌ ✅
CONV_2D ❌ ❌ 🟡 ✅ ❌ ❌ ✅ ✅ ✅ 🟡 ✅ ❌ ❌
CONV_2D_DW ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ✅ ❌ ❌
CONV_3D ❌ ❌ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
CONV_TRANSPOSE_1D ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
CONV_TRANSPOSE_2D ❌ ❌ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
COS ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
COUNT_EQUAL ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
CPY ❌ 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 ❌ ❌
CROSS_ENTROPY_LOSS ❌ ✅ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
CROSS_ENTROPY_LOSS_BACK ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
CUMSUM ❌ ❌ ✅ ✅ ✅ ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
DIAG ❌ ❌ ✅ ✅ 🟡 ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
DIAG_MASK_INF ❌ ✅ ✅ ✅ ❌ ❌ ❌ 🟡 ✅ ✅ ❌ ❌ ❌
DIV ❌ ✅ ✅ ✅ ❌ 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
DSV4_HC_COMB ❌ ❌ ✅ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌ ❌ ❌
DSV4_HC_POST ❌ ❌ ✅ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌ ❌ ❌
DSV4_HC_PRE ❌ ❌ ✅ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌ ❌ ❌
DUP ❌ ✅ ✅ ✅ ❌ ❌ 🟡 🟡 ✅ ✅ ❌ ❌ ❌
ELU ❌ ✅ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
EXP ❌ ✅ ✅ 🟡 🟡 🟡 ✅ ❌ ✅ ✅ ✅ ❌ ❌
EXPM1 ❌ ❌ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
FILL ❌ ❌ ✅ ✅ 🟡 ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
FLASH_ATTN_EXT ❌ 🟡 ✅ 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 ❌ ❌
FLOOR ❌ ❌ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
GATED_DELTA_NET ❌ ❌ ✅ ❌ ✅ ✅ 🟡 ❌ ✅ ✅ ✅ ❌ ❌
GATED_LINEAR_ATTN ❌ ✅ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
GEGLU ❌ ✅ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
GEGLU_ERF ❌ ✅ ✅ ✅ 🟡 ❌ 🟡 ✅ ✅ ✅ ✅ ❌ ❌
GEGLU_QUICK ❌ ✅ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
GELU ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ ✅ ❌ ❌
GELU_ERF ❌ ✅ ✅ 🟡 🟡 ❌ ✅ 🟡 ✅ ✅ ✅ ❌ ❌
GELU_QUICK ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ ✅ ❌ ❌
GET_ROWS ❌ 🟡 ✅ 🟡 🟡 🟡 🟡 🟡 🟡 ✅ 🟡 ❌ ❌
GET_ROWS_BACK ❌ ❌ 🟡 🟡 ❌ ❌ ❌ ❌ 🟡 🟡 ❌ ❌ ❌
GROUP_NORM ❌ ✅ ✅ ✅ ✅ ❌ ✅ ✅ ✅ ✅ ❌ ❌ ❌
HARDSIGMOID ❌ ✅ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
HARDSWISH ❌ ✅ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
IM2COL ❌ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
IM2COL_3D ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
L2_NORM ❌ ✅ ✅ ✅ 🟡 🟡 ✅ ❌ ✅ ✅ 🟡 ❌ ❌
LEAKY_RELU ❌ ✅ ✅ ✅ ❌ 🟡 🟡 ❌ ✅ ✅ ❌ ❌ ❌
LIGHTNING_INDEXER ❌ ❌ ✅ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌ ❌ ❌
LOG ❌ ✅ ✅ ✅ ❌ ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
MEAN ❌ ✅ ✅ ✅ ✅ ❌ ✅ ✅ 🟡 ✅ ❌ ❌ ❌
MUL ❌ ✅ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
MUL_MAT 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡
MUL_MAT_HADAMARD ❌ ❌ ✅ ❌ ✅ 🟡 ❌ ❌ ✅ ✅ ✅ ❌ 🟡
MUL_MAT_ID ❌ 🟡 ✅ ✅ 🟡 🟡 🟡 🟡 🟡 ✅ 🟡 🟡 ❌
MUL_MAT_ID_W4A4 ❌ ❌ ✅ ❌ ❌ 🟡 ❌ ❌ ✅ ❌ ❌ ❌ ❌
MUL_MAT_ID_W4A8 ❌ ❌ ✅ ❌ ❌ 🟡 ❌ ❌ ✅ ❌ ❌ ❌ ❌
MUL_MAT_W4A4 ❌ ❌ ✅ ❌ ❌ 🟡 ❌ ❌ ✅ ❌ ❌ ❌ ❌
MUL_MAT_W4A8 ❌ ❌ ✅ ❌ ❌ 🟡 ❌ ❌ ✅ ❌ ❌ ❌ ❌
NEG ❌ ✅ ✅ 🟡 🟡 🟡 ✅ ❌ ✅ ✅ ✅ ❌ ❌
NORM ❌ ✅ ✅ ✅ 🟡 🟡 ✅ ✅ ✅ ✅ 🟡 ❌ ❌
OPT_STEP_ADAMW ❌ ❌ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
OPT_STEP_SGD ❌ ❌ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
OUT_PROD 🟡 🟡 🟡 🟡 ❌ ❌ ❌ ❌ 🟡 🟡 ❌ ❌ ❌
PAD ❌ 🟡 ✅ 🟡 ❌ ✅ 🟡 🟡 🟡 ✅ ✅ ❌ ❌
PAD_REFLECT_1D ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ❌ ❌ ❌ ❌
POOL_1D ❌ ❌ ✅ ❌ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
POOL_2D ❌ 🟡 ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
REGLU ❌ ✅ ✅ ✅ 🟡 ❌ 🟡 ✅ ✅ ✅ ✅ ❌ ❌
RELU ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ ✅ ❌ ❌
REPEAT ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ 🟡 ❌ ❌
REPEAT_BACK ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
RMS_NORM ❌ ✅ ✅ ✅ 🟡 ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
RMS_NORM_BACK ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
ROLL ❌ ❌ ✅ ✅ ❌ ✅ ✅ ❌ ✅ ✅ ❌ ❌ ❌
ROPE ❌ ✅ ✅ ✅ 🟡 🟡 ✅ ✅ ✅ ✅ ✅ ❌ ❌
ROPE_BACK ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ✅ ✅ ❌ ❌ ❌
ROUND ❌ ❌ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
RWKV_WKV6 ❌ ❌ ✅ ✅ ✅ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
RWKV_WKV7 ❌ ❌ ✅ ✅ ✅ ❌ ✅ ❌ ✅ ✅ ❌ ❌ ❌
SCALE ❌ 🟡 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
SET ❌ ❌ ✅ ✅ ❌ ❌ ✅ ❌ 🟡 ✅ ✅ ❌ ❌
SET_ROWS ❌ 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 🟡 ❌ ❌
SGN ❌ ✅ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
SIGMOID ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ ✅ ❌ ❌
SILU ❌ ✅ ✅ 🟡 🟡 🟡 ✅ 🟡 ✅ ✅ ✅ ❌ ❌
SILU_BACK ❌ ❌ ✅ ✅ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌ ❌
SIN ❌ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
SOFTPLUS ❌ ❌ ✅ 🟡 🟡 🟡 ✅ ❌ ✅ ✅ ✅ ❌ ❌
SOFT_MAX ❌ 🟡 ✅ ✅ 🟡 🟡 ✅ ✅ ✅ ✅ ✅ ❌ ❌
SOFT_MAX_BACK ❌ ❌ 🟡 🟡 ❌ ❌ ❌ ❌ 🟡 ✅ ❌ ❌ ❌
SOLVE_TRI ❌ ❌ ✅ 🟡 🟡 ✅ ✅ ❌ 🟡 ✅ ✅ ❌ ❌
SQR ❌ ✅ ✅ ✅ 🟡 ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
SQRT ❌ ✅ ✅ ✅ ❌ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
SSM_CONV ❌ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
SSM_SCAN ❌ ❌ ✅ ✅ ✅ ❌ ✅ ❌ 🟡 🟡 ✅ ❌ ❌
STEP ❌ ✅ ✅ 🟡 🟡 ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
SUB ❌ ✅ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
SUM ❌ 🟡 ✅ 🟡 ❌ 🟡 🟡 ❌ 🟡 🟡 🟡 ❌ ❌
SUM_ROWS ❌ ✅ ✅ 🟡 ❌ 🟡 ✅ 🟡 🟡 ✅ ✅ ❌ ❌
SWIGLU ❌ ✅ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ❌ ❌
SWIGLU_CLAMP ❌ ❌ ✅ ❌ ❌ 🟡 ❌ ❌ ✅ ❌ ❌ ❌ ❌
SWIGLU_OAI ❌ ❌ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌
TANH ❌ ✅ ✅ 🟡 🟡 🟡 ✅ ✅ ✅ ✅ ✅ ❌ ❌
TIMESTEP_EMBEDDING ❌ ✅ ✅ ✅ ❌ ❌ ✅ ✅ ✅ ✅ ❌ ❌ ❌
TOP_K ❌ ❌ ✅ ❌ ❌ ✅ ✅ ❌ ✅ 🟡 ✅ ❌ ❌
TRI ❌ ❌ ✅ ✅ ✅ ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
TRUNC ❌ ❌ ✅ 🟡 🟡 ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌
UPSCALE ❌ 🟡 ✅ ✅ ❌ ❌ ✅ 🟡 ✅ ✅ ✅ ❌ ❌
XIELU ❌ ❌ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ✅ ✅ ❌ ❌