#version 450 core #extension GL_KHR_memory_scope_semantics : enable #extension GL_KHR_cooperative_matrix : enable #extension GL_EXT_shader_explicit_arithmetic_types : enable #extension GL_EXT_cooperative_matrix_maintenance1 : enable #extension GL_EXT_float_e5m2 : enable layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; float16_t relu(const in uint32_t row, const in uint32_t col, const in float16_t x) { return max(x, float16_t(0)); } float16_t add(const in uint32_t row, const in uint32_t col, const in float16_t x, const in float16_t y) { return x+y; } float16_t combineSum(const in float16_t a, const in float16_t b) { return a + b; } float16_t combineMax(const in float16_t a, const in float16_t b) { return max(a, b); } layout(constant_id = 0) const uint32_t Dim = 32; void main() { coopmat A; coopmat B; coopmat Acc; A = coopmat(Acc); B = coopmat(Acc); coopmat tr; coopMatTransposeEXT(tr, Acc); coopMatReduceEXT(Acc, Acc, gl_CooperativeMatrixReduceRowEXT, combineSum); coopMatReduceEXT(Acc, Acc, gl_CooperativeMatrixReduceColumnEXT, combineSum); coopMatReduceEXT(Acc, Acc, gl_CooperativeMatrixReduceRowAndColumnEXT, combineSum); coopmat Acc2x2; coopMatReduceEXT(Acc2x2, Acc, gl_CooperativeMatrixReduce2x2EXT, combineMax); coopMatPerElementEXT(Acc, Acc, relu); coopMatPerElementEXT(Acc, Acc, add, float16_t(1.0)); coopmat Accf16; coopmat Accf32; coopmat Accu32; coopmat Accs32; coopmat(Accu32); coopmat(Accu32); coopmat(Accu32); coopmat(Accs32); coopmat(Accs32); coopmat(Accs32); coopmat(Accf16); coopmat(Accf16); coopmat(Accf16); coopmat(Accf32); coopmat(Accf32); coopmat(Accf32); coopmat(Accs32); coopmat(Accu32); coopmat li, mijm1; mijm1 = coopmat(-1.0/0.0); // New conversions in GL_EXT_cooperative_matrix_maintenance1: Acc = coopmat(A); Acc = coopmat(B); uint index = 1; uvec2 coord; coord = coopMatGetCoordinateEXT(A, index); coord = coopMatGetCoordinateEXT(B, index); coord = coopMatGetCoordinateEXT(Acc, index); coopmat Au8t; coopmat As8t; coopmat Af16t; coopmat As32t; coopmat Bu8t; coopmat Bs8t; coopmat Bf16t; coopmat Bs32t; coopMatTransposeEXT(Bu8t, Accf16); coopMatTransposeEXT(Bs8t, Accf16); coopMatTransposeEXT(Bf16t, Accf16); coopMatTransposeEXT(Bu8t, Accf32); coopMatTransposeEXT(Bs8t, Accf32); coopMatTransposeEXT(Bf16t, Accf32); coopMatTransposeEXT(Bu8t, Accs32); coopMatTransposeEXT(Bs8t, Accs32); coopMatTransposeEXT(Bf16t, Accs32); coopMatTransposeEXT(Bu8t, Accu32); coopMatTransposeEXT(Bs8t, Accu32); coopMatTransposeEXT(Bf16t, Accu32); coopMatTransposeEXT(Bs32t, Accu32); coopmat matAe5m2; saturatedConvertEXT(matAe5m2, Accf16); coopMatTransposeEXT(Au8t, Accf16); coopMatTransposeEXT(As8t, Accf16); coopMatTransposeEXT(Af16t, Accf16); coopMatTransposeEXT(Au8t, Accf32); coopMatTransposeEXT(As8t, Accf32); coopMatTransposeEXT(Af16t, Accf32); coopMatTransposeEXT(Au8t, Accs32); coopMatTransposeEXT(As8t, Accs32); coopMatTransposeEXT(Af16t, Accs32); coopMatTransposeEXT(Au8t, Accu32); coopMatTransposeEXT(As8t, Accu32); coopMatTransposeEXT(Af16t, Accu32); coopMatTransposeEXT(As32t, Accu32); }