From 0b9564f643fb47f9656ec48e9501b248650dbc4b Mon Sep 17 00:00:00 2001 From: "Chereshnev, Eugene" Date: Tue, 17 Mar 2026 11:49:47 -0700 Subject: [PATCH 1/2] xe: conv: relax is_mad_compatible() check --- src/gpu/intel/conv/jit/plan.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/gpu/intel/conv/jit/plan.cpp b/src/gpu/intel/conv/jit/plan.cpp index df3fcdb4018..b88459dec51 100644 --- a/src/gpu/intel/conv/jit/plan.cpp +++ b/src/gpu/intel/conv/jit/plan.cpp @@ -1460,13 +1460,25 @@ struct fma_context_t { = [](const layout_t &layout, const pvar_t &dim, int block) { if (block == 1) return true; if (layout.nblocks() == 0) return false; + + auto check = [&](const layout_block_t &b) { + bool ok = true; + ok &= (b.idx == dim); + ok &= (b.size % block == 0); + + bool stride_ok = (b.stride == 1) + || (layout.type().is_x16() && b.stride == 2); + ok &= stride_ok; + return ok; + }; auto &b0 = layout[0]; - if (b0.idx != dim) return false; - if (b0.size % block != 0) return false; - bool stride_ok = (b0.stride == 1) - || (layout.type().is_x16() && b0.stride == 2); - if (!stride_ok) return false; - return true; + if (check(b0)) return true; + + if (layout.nblocks() > 1) { + auto &b1 = layout[1]; + if (b1.stride == b0.stride && check(b1)) return true; + } + return false; }; if (a_vec_idx != -1 && !is_blocked_by(a, a_vec_idx, vec_size)) return false; From 8588e45f6c5a2fd8ab498c9290aecf61e5029277 Mon Sep 17 00:00:00 2001 From: "Chereshnev, Eugene" Date: Tue, 17 Mar 2026 12:06:58 -0700 Subject: [PATCH 2/2] xe: conv: flip direct view/SLM retry order --- src/gpu/intel/conv/jit/plan.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gpu/intel/conv/jit/plan.cpp b/src/gpu/intel/conv/jit/plan.cpp index b88459dec51..66df08aef84 100644 --- a/src/gpu/intel/conv/jit/plan.cpp +++ b/src/gpu/intel/conv/jit/plan.cpp @@ -1978,13 +1978,6 @@ class plan_builder_t { } if (status == plan_status_t::success) return status::success; - if (a_direct_view_ || b_direct_view_) { - gpu_trace() << "Retry plan initialization without direct view"; - enable_direct_view(false); - status = try_init_plan(); - if (status == plan_status_t::success) return status::success; - } - if ((use_slm(abc_kind_t::a) || use_slm(abc_kind_t::b)) && !cfg_.slm().is_overridden()) { gpu_trace() << "Retry plan initialization without SLM"; @@ -1993,6 +1986,13 @@ class plan_builder_t { if (status == plan_status_t::success) return status::success; } + if (a_direct_view_ || b_direct_view_) { + gpu_trace() << "Retry plan initialization without direct view"; + enable_direct_view(false); + status = try_init_plan(); + if (status == plan_status_t::success) return status::success; + } + // Can't create convolution plan. return status::runtime_error; }