[codegen] [layout] fixed padding issue for row-major HMMA
This commit is contained in:
@@ -279,6 +279,8 @@ layout_shared_t::layout_shared_t(const layout_t *arg,
|
||||
// order
|
||||
if(arg->type == SCANLINE)
|
||||
order = arg->order;
|
||||
else
|
||||
order = arg->order;
|
||||
ir::value* dot_a = nullptr;
|
||||
ir::value* dot_b = nullptr;
|
||||
ir::value* hmma_dot_a = nullptr;
|
||||
@@ -291,7 +293,6 @@ layout_shared_t::layout_shared_t(const layout_t *arg,
|
||||
}
|
||||
std::vector<int> col = {0, 1};
|
||||
std::vector<int> row = {1, 0};
|
||||
order = col;
|
||||
bool is_nonhmma_dot_a = dot_a && !hmma_dot_a;
|
||||
bool is_nonhmma_dot_b = dot_b && !hmma_dot_b;
|
||||
if(is_nonhmma_dot_a)
|
||||
@@ -303,21 +304,20 @@ layout_shared_t::layout_shared_t(const layout_t *arg,
|
||||
pad = 0;
|
||||
if(hmma_dot_a){
|
||||
bool row = is_trans(hmma_dot_a) ^ order[0] == 1;
|
||||
pad = 24 - shapes[row ? 0: 1] % 32;
|
||||
pad = 24 - shapes[row ? order[0] : order[1]] % 32;
|
||||
}
|
||||
else if(hmma_dot_b){
|
||||
bool row = is_trans(hmma_dot_b) ^ order[0] == 1;
|
||||
pad = 24 - shapes[row ? 1 : 0] % 32;
|
||||
pad = 24 - shapes[row ? order[1] : order[0]] % 32;
|
||||
}
|
||||
else if(order != arg->order) {
|
||||
pad = 4;
|
||||
}
|
||||
shapes[order[0]] += pad;
|
||||
|
||||
// size
|
||||
auto shape = this->shapes;
|
||||
shape[order[0]] += pad;
|
||||
size = ty->get_primitive_size_in_bits() / 8;
|
||||
for(auto s: shape)
|
||||
for(auto s: shapes)
|
||||
size *= s;
|
||||
if(double_buffer)
|
||||
size *= 2;
|
||||
|
Reference in New Issue
Block a user