2021-07-02 22:17:25 +00:00
|
|
|
[[block]]
|
|
|
|
struct Uniforms {
|
|
|
|
NAN : f32;
|
|
|
|
[[size(12)]]
|
|
|
|
padding : u32;
|
|
|
|
aShape : vec3<i32>;
|
|
|
|
[[size(4)]]
|
|
|
|
padding_1 : u32;
|
|
|
|
bShape : vec3<i32>;
|
|
|
|
[[size(4)]]
|
|
|
|
padding_2 : u32;
|
|
|
|
outShape : vec3<i32>;
|
|
|
|
[[size(4)]]
|
|
|
|
padding_3 : u32;
|
|
|
|
outShapeStrides : vec2<i32>;
|
|
|
|
};
|
|
|
|
|
|
|
|
type RTArr = [[stride(4)]] array<f32>;
|
|
|
|
|
|
|
|
type RTArr_1 = [[stride(4)]] array<f32>;
|
|
|
|
|
|
|
|
[[block]]
|
|
|
|
struct ssbOut {
|
|
|
|
result : RTArr_1;
|
|
|
|
};
|
|
|
|
|
|
|
|
type RTArr_2 = [[stride(4)]] array<f32>;
|
|
|
|
|
|
|
|
[[block]]
|
|
|
|
struct ssbA {
|
|
|
|
A : RTArr_1;
|
|
|
|
};
|
|
|
|
|
|
|
|
[[block]]
|
|
|
|
struct ssbB {
|
|
|
|
B : RTArr_1;
|
|
|
|
};
|
|
|
|
|
|
|
|
var<private> dimAOuter_1 : i32;
|
|
|
|
|
|
|
|
[[group(0), binding(3)]] var<uniform> x_48 : Uniforms;
|
|
|
|
|
|
|
|
var<private> dimInner_1 : i32;
|
|
|
|
|
|
|
|
var<private> dimBOuter_1 : i32;
|
|
|
|
|
|
|
|
[[group(0), binding(0)]] var<storage, read_write> x_54 : ssbOut;
|
|
|
|
|
|
|
|
var<private> gl_LocalInvocationID : vec3<u32>;
|
|
|
|
|
|
|
|
var<private> gl_GlobalInvocationID : vec3<u32>;
|
|
|
|
|
2021-09-02 13:49:59 +00:00
|
|
|
var<workgroup> mm_Asub : array<array<f32, 64u>, 64u>;
|
2021-07-02 22:17:25 +00:00
|
|
|
|
2021-09-02 13:49:59 +00:00
|
|
|
var<workgroup> mm_Bsub : array<array<f32, 1u>, 64u>;
|
2021-07-02 22:17:25 +00:00
|
|
|
|
|
|
|
[[group(0), binding(1)]] var<storage, read> x_165 : ssbA;
|
|
|
|
|
|
|
|
var<private> batch : i32;
|
|
|
|
|
|
|
|
[[group(0), binding(2)]] var<storage, read> x_185 : ssbB;
|
|
|
|
|
|
|
|
fn coordsInBounds_vi2_vi2_(coord : ptr<function, vec2<i32>>, shape : ptr<function, vec2<i32>>) -> bool {
|
|
|
|
var x_87 : bool;
|
|
|
|
var x_88_phi : bool;
|
|
|
|
let x_76 : vec2<i32> = *(coord);
|
|
|
|
let x_81 : bool = all((x_76 >= vec2<i32>(0, 0)));
|
|
|
|
x_88_phi = x_81;
|
|
|
|
if (x_81) {
|
|
|
|
let x_84 : vec2<i32> = *(coord);
|
|
|
|
let x_85 : vec2<i32> = *(shape);
|
|
|
|
x_87 = all((x_84 < x_85));
|
|
|
|
x_88_phi = x_87;
|
|
|
|
}
|
|
|
|
let x_88 : bool = x_88_phi;
|
|
|
|
return x_88;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn mm_readA_i1_i1_(row : ptr<function, i32>, col : ptr<function, i32>) -> f32 {
|
|
|
|
var batchASize : i32;
|
|
|
|
var param_10 : vec2<i32>;
|
|
|
|
var param_11 : vec2<i32>;
|
|
|
|
var x_430 : f32;
|
|
|
|
let x_417 : i32 = x_48.aShape.y;
|
|
|
|
let x_419 : i32 = x_48.aShape.z;
|
|
|
|
batchASize = (x_417 * x_419);
|
|
|
|
let x_421 : i32 = *(row);
|
|
|
|
let x_422 : i32 = *(col);
|
|
|
|
let x_424 : i32 = dimAOuter_1;
|
|
|
|
let x_425 : i32 = dimInner_1;
|
|
|
|
param_10 = vec2<i32>(x_421, x_422);
|
|
|
|
param_11 = vec2<i32>(x_424, x_425);
|
|
|
|
let x_429 : bool = coordsInBounds_vi2_vi2_(&(param_10), &(param_11));
|
|
|
|
if (x_429) {
|
|
|
|
let x_438 : i32 = batch;
|
|
|
|
let x_439 : i32 = batchASize;
|
|
|
|
let x_441 : i32 = *(row);
|
|
|
|
let x_442 : i32 = dimInner_1;
|
|
|
|
let x_445 : i32 = *(col);
|
|
|
|
let x_448 : f32 = x_165.A[(((x_438 * x_439) + (x_441 * x_442)) + x_445)];
|
|
|
|
x_430 = x_448;
|
|
|
|
} else {
|
|
|
|
x_430 = 0.0;
|
|
|
|
}
|
|
|
|
let x_450 : f32 = x_430;
|
|
|
|
return x_450;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn mm_readB_i1_i1_(row_1 : ptr<function, i32>, col_1 : ptr<function, i32>) -> f32 {
|
|
|
|
var batchBSize : i32;
|
|
|
|
var param_12 : vec2<i32>;
|
|
|
|
var param_13 : vec2<i32>;
|
|
|
|
var x_468 : f32;
|
|
|
|
let x_455 : i32 = x_48.bShape.y;
|
|
|
|
let x_457 : i32 = x_48.bShape.z;
|
|
|
|
batchBSize = (x_455 * x_457);
|
|
|
|
let x_459 : i32 = *(row_1);
|
|
|
|
let x_460 : i32 = *(col_1);
|
|
|
|
let x_462 : i32 = dimInner_1;
|
|
|
|
let x_463 : i32 = dimBOuter_1;
|
|
|
|
param_12 = vec2<i32>(x_459, x_460);
|
|
|
|
param_13 = vec2<i32>(x_462, x_463);
|
|
|
|
let x_467 : bool = coordsInBounds_vi2_vi2_(&(param_12), &(param_13));
|
|
|
|
if (x_467) {
|
|
|
|
let x_475 : i32 = batch;
|
|
|
|
let x_476 : i32 = batchBSize;
|
|
|
|
let x_478 : i32 = *(row_1);
|
|
|
|
let x_479 : i32 = dimBOuter_1;
|
|
|
|
let x_482 : i32 = *(col_1);
|
|
|
|
let x_485 : f32 = x_185.B[(((x_475 * x_476) + (x_478 * x_479)) + x_482)];
|
|
|
|
x_468 = x_485;
|
|
|
|
} else {
|
|
|
|
x_468 = 0.0;
|
|
|
|
}
|
|
|
|
let x_487 : f32 = x_468;
|
|
|
|
return x_487;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn getOutputFlatIndex_vi3_(coords : ptr<function, vec3<i32>>) -> i32 {
|
|
|
|
let x_99 : vec3<i32> = *(coords);
|
|
|
|
let x_105 : i32 = x_48.outShapeStrides.x;
|
|
|
|
let x_107 : i32 = x_48.outShapeStrides.y;
|
|
|
|
return i32(dot(vec3<f32>(x_99), vec3<f32>(vec3<i32>(x_105, x_107, 1))));
|
|
|
|
}
|
|
|
|
|
|
|
|
fn setOutput_i1_f1_(flatIndex : ptr<function, i32>, value : ptr<function, f32>) {
|
|
|
|
let x_95 : i32 = *(flatIndex);
|
|
|
|
let x_96 : f32 = *(value);
|
|
|
|
x_54.result[x_95] = x_96;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn setOutput_i1_i1_i1_f1_(d0 : ptr<function, i32>, d1 : ptr<function, i32>, d2 : ptr<function, i32>, value_1 : ptr<function, f32>) {
|
|
|
|
var flatIndex_1 : i32;
|
|
|
|
var param : vec3<i32>;
|
|
|
|
var param_1 : i32;
|
|
|
|
var param_2 : f32;
|
|
|
|
let x_115 : i32 = *(d0);
|
|
|
|
let x_116 : i32 = *(d1);
|
|
|
|
let x_117 : i32 = *(d2);
|
|
|
|
param = vec3<i32>(x_115, x_116, x_117);
|
|
|
|
let x_120 : i32 = getOutputFlatIndex_vi3_(&(param));
|
|
|
|
flatIndex_1 = x_120;
|
|
|
|
let x_122 : i32 = flatIndex_1;
|
|
|
|
param_1 = x_122;
|
|
|
|
let x_124 : f32 = *(value_1);
|
|
|
|
param_2 = x_124;
|
|
|
|
setOutput_i1_f1_(&(param_1), &(param_2));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn mm_write_i1_i1_f1_(row_2 : ptr<function, i32>, col_2 : ptr<function, i32>, value_2 : ptr<function, f32>) {
|
|
|
|
var outCoord : vec3<i32>;
|
|
|
|
var param_14 : i32;
|
|
|
|
var param_15 : i32;
|
|
|
|
var param_16 : i32;
|
|
|
|
var param_17 : f32;
|
|
|
|
let x_491 : i32 = batch;
|
|
|
|
let x_492 : i32 = *(row_2);
|
|
|
|
let x_493 : i32 = *(col_2);
|
|
|
|
outCoord = vec3<i32>(x_491, x_492, x_493);
|
|
|
|
let x_496 : i32 = batch;
|
|
|
|
param_14 = x_496;
|
|
|
|
let x_498 : i32 = *(row_2);
|
|
|
|
param_15 = x_498;
|
|
|
|
let x_500 : i32 = *(col_2);
|
|
|
|
param_16 = x_500;
|
|
|
|
let x_502 : f32 = *(value_2);
|
|
|
|
param_17 = x_502;
|
|
|
|
setOutput_i1_i1_i1_f1_(&(param_14), &(param_15), &(param_16), &(param_17));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn mm_matMul_i1_i1_i1_(dimAOuter : ptr<function, i32>, dimInner : ptr<function, i32>, dimBOuter : ptr<function, i32>) {
|
|
|
|
var tileRow : i32;
|
|
|
|
var tileCol : i32;
|
|
|
|
var globalRow : i32;
|
|
|
|
var globalCol : i32;
|
|
|
|
var numTiles : i32;
|
|
|
|
var innerRow : i32;
|
|
|
|
var innerCol : i32;
|
2021-09-02 13:49:59 +00:00
|
|
|
var acc : array<array<f32, 1u>, 1u>;
|
2021-07-02 22:17:25 +00:00
|
|
|
var tileColA : i32;
|
|
|
|
var tileRowB : i32;
|
|
|
|
var t : i32;
|
|
|
|
var innerRow_1 : i32;
|
|
|
|
var innerCol_1 : i32;
|
|
|
|
var inputRow : i32;
|
|
|
|
var inputCol : i32;
|
|
|
|
var param_3 : i32;
|
|
|
|
var param_4 : i32;
|
|
|
|
var innerRow_2 : i32;
|
|
|
|
var innerCol_2 : i32;
|
|
|
|
var inputRow_1 : i32;
|
|
|
|
var inputCol_1 : i32;
|
|
|
|
var param_5 : i32;
|
|
|
|
var param_6 : i32;
|
|
|
|
var k : i32;
|
|
|
|
var inner : i32;
|
2021-09-02 13:49:59 +00:00
|
|
|
var BCached : array<f32, 1u>;
|
2021-07-02 22:17:25 +00:00
|
|
|
var innerRow_3 : i32;
|
|
|
|
var ACached : f32;
|
|
|
|
var innerCol_3 : i32;
|
|
|
|
var innerRow_4 : i32;
|
|
|
|
var innerCol_4 : i32;
|
|
|
|
var param_7 : i32;
|
|
|
|
var param_8 : i32;
|
|
|
|
var param_9 : f32;
|
|
|
|
let x_132 : u32 = gl_LocalInvocationID.y;
|
|
|
|
tileRow = (bitcast<i32>(x_132) * 1);
|
|
|
|
let x_137 : u32 = gl_LocalInvocationID.x;
|
|
|
|
tileCol = (bitcast<i32>(x_137) * 1);
|
|
|
|
let x_143 : u32 = gl_GlobalInvocationID.y;
|
|
|
|
globalRow = (bitcast<i32>(x_143) * 1);
|
|
|
|
let x_148 : u32 = gl_GlobalInvocationID.x;
|
|
|
|
globalCol = (bitcast<i32>(x_148) * 1);
|
|
|
|
let x_152 : i32 = *(dimInner);
|
|
|
|
numTiles = (((x_152 - 1) / 64) + 1);
|
|
|
|
innerRow = 0;
|
|
|
|
loop {
|
|
|
|
let x_163 : i32 = innerRow;
|
|
|
|
if ((x_163 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
innerCol = 0;
|
|
|
|
loop {
|
|
|
|
let x_171 : i32 = innerCol;
|
|
|
|
if ((x_171 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_177 : i32 = innerRow;
|
|
|
|
let x_178 : i32 = innerCol;
|
|
|
|
acc[x_177][x_178] = 0.0;
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_181 : i32 = innerCol;
|
|
|
|
innerCol = (x_181 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_183 : i32 = innerRow;
|
|
|
|
innerRow = (x_183 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let x_187 : u32 = gl_LocalInvocationID.x;
|
|
|
|
tileColA = (bitcast<i32>(x_187) * 64);
|
|
|
|
let x_192 : u32 = gl_LocalInvocationID.y;
|
|
|
|
tileRowB = (bitcast<i32>(x_192) * 1);
|
|
|
|
t = 0;
|
|
|
|
loop {
|
|
|
|
let x_201 : i32 = t;
|
|
|
|
let x_202 : i32 = numTiles;
|
|
|
|
if ((x_201 < x_202)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
innerRow_1 = 0;
|
|
|
|
loop {
|
|
|
|
let x_210 : i32 = innerRow_1;
|
|
|
|
if ((x_210 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
innerCol_1 = 0;
|
|
|
|
loop {
|
|
|
|
let x_218 : i32 = innerCol_1;
|
|
|
|
if ((x_218 < 64)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_221 : i32 = tileRow;
|
|
|
|
let x_222 : i32 = innerRow_1;
|
|
|
|
inputRow = (x_221 + x_222);
|
|
|
|
let x_225 : i32 = tileColA;
|
|
|
|
let x_226 : i32 = innerCol_1;
|
|
|
|
inputCol = (x_225 + x_226);
|
|
|
|
let x_233 : i32 = inputRow;
|
|
|
|
let x_234 : i32 = inputCol;
|
|
|
|
let x_235 : i32 = globalRow;
|
|
|
|
let x_236 : i32 = innerRow_1;
|
|
|
|
let x_238 : i32 = t;
|
|
|
|
let x_240 : i32 = inputCol;
|
|
|
|
param_3 = (x_235 + x_236);
|
|
|
|
param_4 = ((x_238 * 64) + x_240);
|
|
|
|
let x_244 : f32 = mm_readA_i1_i1_(&(param_3), &(param_4));
|
|
|
|
mm_Asub[x_233][x_234] = x_244;
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_247 : i32 = innerCol_1;
|
|
|
|
innerCol_1 = (x_247 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_249 : i32 = innerRow_1;
|
|
|
|
innerRow_1 = (x_249 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
innerRow_2 = 0;
|
|
|
|
loop {
|
|
|
|
let x_257 : i32 = innerRow_2;
|
|
|
|
if ((x_257 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
innerCol_2 = 0;
|
|
|
|
loop {
|
|
|
|
let x_265 : i32 = innerCol_2;
|
|
|
|
if ((x_265 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_268 : i32 = tileRowB;
|
|
|
|
let x_269 : i32 = innerRow_2;
|
|
|
|
inputRow_1 = (x_268 + x_269);
|
|
|
|
let x_272 : i32 = tileCol;
|
|
|
|
let x_273 : i32 = innerCol_2;
|
|
|
|
inputCol_1 = (x_272 + x_273);
|
|
|
|
let x_278 : i32 = inputRow_1;
|
|
|
|
let x_279 : i32 = inputCol_1;
|
|
|
|
let x_280 : i32 = t;
|
|
|
|
let x_282 : i32 = inputRow_1;
|
|
|
|
let x_284 : i32 = globalCol;
|
|
|
|
let x_285 : i32 = innerCol_2;
|
|
|
|
param_5 = ((x_280 * 64) + x_282);
|
|
|
|
param_6 = (x_284 + x_285);
|
|
|
|
let x_289 : f32 = mm_readB_i1_i1_(&(param_5), &(param_6));
|
|
|
|
mm_Bsub[x_278][x_279] = x_289;
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_291 : i32 = innerCol_2;
|
|
|
|
innerCol_2 = (x_291 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_293 : i32 = innerRow_2;
|
|
|
|
innerRow_2 = (x_293 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
workgroupBarrier();
|
|
|
|
k = 0;
|
|
|
|
loop {
|
|
|
|
let x_302 : i32 = k;
|
|
|
|
if ((x_302 < 64)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
inner = 0;
|
|
|
|
loop {
|
|
|
|
let x_310 : i32 = inner;
|
|
|
|
if ((x_310 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_314 : i32 = inner;
|
|
|
|
let x_315 : i32 = k;
|
|
|
|
let x_316 : i32 = tileCol;
|
|
|
|
let x_317 : i32 = inner;
|
|
|
|
let x_320 : f32 = mm_Bsub[x_315][(x_316 + x_317)];
|
|
|
|
BCached[x_314] = x_320;
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_322 : i32 = inner;
|
|
|
|
inner = (x_322 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
innerRow_3 = 0;
|
|
|
|
loop {
|
|
|
|
let x_330 : i32 = innerRow_3;
|
|
|
|
if ((x_330 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_333 : i32 = tileRow;
|
|
|
|
let x_334 : i32 = innerRow_3;
|
|
|
|
let x_336 : i32 = k;
|
|
|
|
let x_338 : f32 = mm_Asub[(x_333 + x_334)][x_336];
|
|
|
|
ACached = x_338;
|
|
|
|
innerCol_3 = 0;
|
|
|
|
loop {
|
|
|
|
let x_345 : i32 = innerCol_3;
|
|
|
|
if ((x_345 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_347 : i32 = innerRow_3;
|
|
|
|
let x_348 : i32 = innerCol_3;
|
|
|
|
let x_349 : f32 = ACached;
|
|
|
|
let x_350 : i32 = innerCol_3;
|
|
|
|
let x_352 : f32 = BCached[x_350];
|
|
|
|
let x_355 : f32 = acc[x_347][x_348];
|
|
|
|
acc[x_347][x_348] = (x_355 + (x_349 * x_352));
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_358 : i32 = innerCol_3;
|
|
|
|
innerCol_3 = (x_358 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_360 : i32 = innerRow_3;
|
|
|
|
innerRow_3 = (x_360 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_362 : i32 = k;
|
|
|
|
k = (x_362 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
workgroupBarrier();
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_364 : i32 = t;
|
|
|
|
t = (x_364 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
innerRow_4 = 0;
|
|
|
|
loop {
|
|
|
|
let x_372 : i32 = innerRow_4;
|
|
|
|
if ((x_372 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
innerCol_4 = 0;
|
|
|
|
loop {
|
|
|
|
var x_393 : bool;
|
|
|
|
var x_394_phi : bool;
|
|
|
|
let x_380 : i32 = innerCol_4;
|
|
|
|
if ((x_380 < 1)) {
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let x_382 : i32 = globalCol;
|
|
|
|
let x_383 : i32 = innerCol_4;
|
|
|
|
let x_385 : i32 = *(dimBOuter);
|
|
|
|
let x_386 : bool = ((x_382 + x_383) < x_385);
|
|
|
|
x_394_phi = x_386;
|
|
|
|
if (x_386) {
|
|
|
|
let x_389 : i32 = globalRow;
|
|
|
|
let x_390 : i32 = innerRow_4;
|
|
|
|
let x_392 : i32 = *(dimAOuter);
|
|
|
|
x_393 = ((x_389 + x_390) < x_392);
|
|
|
|
x_394_phi = x_393;
|
|
|
|
}
|
|
|
|
let x_394 : bool = x_394_phi;
|
|
|
|
if (x_394) {
|
|
|
|
let x_397 : i32 = globalRow;
|
|
|
|
let x_398 : i32 = innerRow_4;
|
|
|
|
let x_400 : i32 = globalCol;
|
|
|
|
let x_401 : i32 = innerCol_4;
|
|
|
|
let x_403 : i32 = innerRow_4;
|
|
|
|
let x_404 : i32 = innerCol_4;
|
|
|
|
param_7 = (x_397 + x_398);
|
|
|
|
param_8 = (x_400 + x_401);
|
|
|
|
let x_409 : f32 = acc[x_403][x_404];
|
|
|
|
param_9 = x_409;
|
|
|
|
mm_write_i1_i1_f1_(&(param_7), &(param_8), &(param_9));
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_411 : i32 = innerCol_4;
|
|
|
|
innerCol_4 = (x_411 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
continuing {
|
|
|
|
let x_413 : i32 = innerRow_4;
|
|
|
|
innerRow_4 = (x_413 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main_1() {
|
|
|
|
var param_18 : i32;
|
|
|
|
var param_19 : i32;
|
|
|
|
var param_20 : i32;
|
|
|
|
let x_67 : i32 = x_48.aShape.y;
|
|
|
|
dimAOuter_1 = x_67;
|
|
|
|
let x_71 : i32 = x_48.aShape.z;
|
|
|
|
dimInner_1 = x_71;
|
|
|
|
let x_75 : i32 = x_48.bShape.z;
|
|
|
|
dimBOuter_1 = x_75;
|
|
|
|
let x_505 : u32 = gl_GlobalInvocationID.z;
|
|
|
|
batch = bitcast<i32>(x_505);
|
|
|
|
let x_508 : i32 = dimAOuter_1;
|
|
|
|
param_18 = x_508;
|
|
|
|
let x_510 : i32 = dimInner_1;
|
|
|
|
param_19 = x_510;
|
|
|
|
let x_512 : i32 = dimBOuter_1;
|
|
|
|
param_20 = x_512;
|
|
|
|
mm_matMul_i1_i1_i1_(&(param_18), &(param_19), &(param_20));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
[[stage(compute), workgroup_size(1, 64, 1)]]
|
|
|
|
fn main([[builtin(local_invocation_id)]] gl_LocalInvocationID_param : vec3<u32>, [[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
|
|
|
|
gl_LocalInvocationID = gl_LocalInvocationID_param;
|
|
|
|
gl_GlobalInvocationID = gl_GlobalInvocationID_param;
|
|
|
|
main_1();
|
|
|
|
}
|