Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 25 additions & 13 deletions src/gpu/intel/conv/jit/plan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1966,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";
Expand All @@ -1981,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;
}
Expand Down
Loading