yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
f3a7f2c2
main
1#version 450 core 2#pragma use_vulkan_memory_model 3#extension GL_KHR_shader_subgroup_basic : enable 4#extension GL_EXT_scalar_block_layout : enable 5#extension GL_KHR_memory_scope_semantics : enable 6#extension GL_KHR_cooperative_matrix : enable 7#extension GL_EXT_buffer_reference : enable 8#extension GL_EXT_control_flow_attributes : enable 9#extension GL_KHR_shader_subgroup_basic : enable 10 11#extension GL_EXT_shader_explicit_arithmetic_types_float32 : enable 12#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable 13#extension GL_EXT_shader_explicit_arithmetic_types_int32 : enable 14#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable 15#extension GL_QCOM_cooperative_matrix_conversion : enable 16 17layout(set=0, binding=0) readonly buffer InputA { float x[]; } inputA; 18layout(set=0, binding=1) readonly buffer InputB { float x[]; } inputB; 19layout(set=0, binding=2) readonly buffer InputC { float x[]; } inputC; 20layout(set=0, binding=3) buffer Output { float x[]; } outputO; 21 22layout(local_size_x = 64, local_size_y = 2, local_size_z = 2) in; 23 24void main() 25{ 26 float16_t hvec8A[16]; 27 float32_t vec8A[8]; 28 int32_t ivec8A[8]; 29 uint32_t uvec8A[8]; 30 float16_t hvec32B[64]; 31 float32_t vec32B[32]; 32 int32_t ivec32B[32]; 33 uint32_t uvec32B[32]; 34 float vec64Acc[64]; 35 int ivec64Acc[64]; 36 uint uvec64Acc[64]; 37 float16_t hvec8A_4[4]; 38 39 // bitcastQCOM 40 { 41 bitcastQCOM(hvec8A, uvec8A); 42 bitcastQCOM(uvec8A, hvec8A); 43 bitcastQCOM(ivec8A, vec8A); 44 bitcastQCOM( vec8A, ivec8A); 45 46 bitcastQCOM(hvec32B, ivec32B); 47 bitcastQCOM(ivec32B, hvec32B); 48 bitcastQCOM(uvec32B, vec32B); 49 bitcastQCOM( vec32B, uvec32B); 50 51 bitcastQCOM(uvec64Acc, ivec64Acc); 52 bitcastQCOM(ivec64Acc, uvec64Acc); 53 bitcastQCOM(uvec64Acc, vec64Acc); 54 bitcastQCOM( vec64Acc, uvec64Acc); 55 } 56 57 // extractSubArrayQCOM 58 { 59 extractSubArrayQCOM(ivec64Acc, 0, ivec8A); 60 extractSubArrayQCOM(ivec64Acc, 8, ivec32B); 61 extractSubArrayQCOM(uvec64Acc, 0, uvec8A); 62 extractSubArrayQCOM(uvec64Acc, 8, uvec32B); 63 extractSubArrayQCOM( vec64Acc, 0, vec8A); 64 extractSubArrayQCOM( vec64Acc, 4, vec32B); 65 extractSubArrayQCOM(hvec32B, 0, hvec8A); 66 extractSubArrayQCOM(hvec32B, 4, hvec8A_4); 67 } 68 69 coopmat< uint8_t, gl_ScopeSubgroup, 64, 32, gl_MatrixUseA> matA_u8_64_32; 70 coopmat< int8_t, gl_ScopeSubgroup, 64, 32, gl_MatrixUseA> matA_i8_64_32; 71 coopmat<float16_t, gl_ScopeSubgroup, 64, 16, gl_MatrixUseA> matA_f16_64_16; 72 coopmat<float32_t, gl_ScopeSubgroup, 64, 8, gl_MatrixUseA> matA_f32_64_8; 73 74 // vectorToCoopmatQCOM gl_MatrixUseA 75 { 76 vectorToCoopmatQCOM( vec8A, matA_f32_64_8); 77 vectorToCoopmatQCOM(uvec8A, matA_f32_64_8); 78 79 vectorToCoopmatQCOM(hvec8A, matA_f16_64_16); 80 vectorToCoopmatQCOM(uvec8A, matA_f16_64_16); 81 82 int8_t i8vec8A[32]; 83 vectorToCoopmatQCOM(i8vec8A, matA_i8_64_32); 84 vectorToCoopmatQCOM( uvec8A, matA_i8_64_32); 85 86 uint8_t u8vec8A[32]; 87 vectorToCoopmatQCOM(u8vec8A, matA_u8_64_32); 88 vectorToCoopmatQCOM( uvec8A, matA_u8_64_32); 89 } 90 91 coopmat< uint8_t, gl_ScopeSubgroup, 32, 64, gl_MatrixUseB> matB_u8_32_64; 92 coopmat< int8_t, gl_ScopeSubgroup, 32, 64, gl_MatrixUseB> matB_i8_32_64; 93 coopmat<float16_t, gl_ScopeSubgroup, 16, 64, gl_MatrixUseB> matB_f16_16_64; 94 coopmat<float32_t, gl_ScopeSubgroup, 8, 64, gl_MatrixUseB> matB_f32_8_64; 95 96 coopmat<float16_t, gl_ScopeSubgroup, 16, 32, gl_MatrixUseB> matB_f16_16_32; 97 coopmat< int8_t, gl_ScopeSubgroup, 32, 16, gl_MatrixUseB> matB_i8_32_16; 98 99 // vectorToCoopmatQCOM gl_MatrixUseB 100 { 101 vectorToCoopmatQCOM( vec8A, matB_f32_8_64); 102 vectorToCoopmatQCOM(uvec8A, matB_f32_8_64); 103 104 vectorToCoopmatQCOM(hvec8A, matB_f16_16_64); 105 vectorToCoopmatQCOM(uvec8A, matB_f16_16_64); 106 107 int8_t i8vec8B[32]; 108 vectorToCoopmatQCOM(i8vec8B, matB_i8_32_64); 109 vectorToCoopmatQCOM( uvec8A, matB_i8_32_64); 110 111 uint8_t u8vec8B[32]; 112 vectorToCoopmatQCOM(u8vec8B, matB_u8_32_64); 113 vectorToCoopmatQCOM( uvec8A, matB_u8_32_64); 114 115 vectorToCoopmatQCOM(hvec8A, matB_f16_16_32); 116 vectorToCoopmatQCOM(uvec8A, matB_f16_16_32); 117 118 vectorToCoopmatQCOM(i8vec8B, matB_i8_32_16); 119 vectorToCoopmatQCOM(uvec8A, matB_i8_32_16); 120 } 121 122 coopmat< uint32_t, gl_ScopeSubgroup, 64, 64, gl_MatrixUseAccumulator> matAcc_u32_64_64; 123 coopmat< int32_t, gl_ScopeSubgroup, 64, 64, gl_MatrixUseAccumulator> matAcc_i32_64_64; 124 coopmat<float16_t, gl_ScopeSubgroup, 64, 64, gl_MatrixUseAccumulator> matAcc_f16_64_64; 125 coopmat<float32_t, gl_ScopeSubgroup, 64, 64, gl_MatrixUseAccumulator> matAcc_f32_64_64; 126 127 // vectorToCoopmatQCOM gl_MatrixUseAccumulator 128 { 129 vectorToCoopmatQCOM( vec64Acc, matAcc_f32_64_64); 130 vectorToCoopmatQCOM(uvec64Acc, matAcc_f32_64_64); 131 132 float16_t hvec64Acc[64]; 133 vectorToCoopmatQCOM(hvec64Acc, matAcc_f16_64_64); 134 vectorToCoopmatQCOM(uvec32B, matAcc_f16_64_64); 135 136 vectorToCoopmatQCOM(ivec64Acc, matAcc_i32_64_64); 137 vectorToCoopmatQCOM(uvec64Acc, matAcc_i32_64_64); 138 139 vectorToCoopmatQCOM(uvec64Acc, matAcc_u32_64_64); 140 } 141 142 // coopmatToVectorQCOM gl_MatrixUseA 143 { 144 coopmatToVectorQCOM(matA_f32_64_8, vec8A); 145 coopmatToVectorQCOM(matA_f32_64_8, uvec8A); 146 147 coopmatToVectorQCOM(matA_f16_64_16, hvec8A); 148 coopmatToVectorQCOM(matA_f16_64_16, uvec8A); 149 150 int8_t i8vec8A[32]; 151 coopmatToVectorQCOM(matA_i8_64_32, i8vec8A); 152 coopmatToVectorQCOM(matA_i8_64_32, uvec8A); 153 154 uint8_t u8vec8A[32]; 155 coopmatToVectorQCOM(matA_u8_64_32, u8vec8A); 156 coopmatToVectorQCOM(matA_u8_64_32, uvec8A); 157 } 158 159 // coopmatToVectorQCOM gl_MatrixUseB 160 { 161 coopmatToVectorQCOM(matB_f32_8_64, vec8A); 162 coopmatToVectorQCOM(matB_f32_8_64, uvec8A); 163 164 coopmatToVectorQCOM(matB_f16_16_64, hvec8A); 165 coopmatToVectorQCOM(matB_f16_16_64, uvec8A); 166 167 int8_t i8vec8B[32]; 168 coopmatToVectorQCOM(matB_i8_32_64, i8vec8B); 169 coopmatToVectorQCOM(matB_i8_32_64, uvec8A); 170 171 uint8_t u8vec8B[32]; 172 coopmatToVectorQCOM(matB_u8_32_64, u8vec8B); 173 coopmatToVectorQCOM(matB_u8_32_64, uvec8A); 174 175 coopmatToVectorQCOM(matB_f16_16_32, hvec8A); 176 coopmatToVectorQCOM(matB_f16_16_32, uvec8A); 177 178 coopmatToVectorQCOM(matB_i8_32_16, i8vec8B); 179 coopmatToVectorQCOM(matB_i8_32_16, uvec8A); 180 } 181 182 // coopmatToVectorQCOM gl_MatrixUseAccumulator 183 { 184 coopmatToVectorQCOM(matAcc_f32_64_64, vec64Acc); 185 coopmatToVectorQCOM(matAcc_f32_64_64, uvec64Acc); 186 187 float16_t hvec64Acc[64]; 188 coopmatToVectorQCOM(matAcc_f16_64_64, hvec64Acc); 189 coopmatToVectorQCOM(matAcc_f16_64_64, uvec32B); 190 191 coopmatToVectorQCOM(matAcc_i32_64_64, ivec64Acc); 192 coopmatToVectorQCOM(matAcc_i32_64_64, uvec64Acc); 193 194 coopmatToVectorQCOM(matAcc_u32_64_64, uvec64Acc); 195 } 196}