common.comp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #extension GL_EXT_shader_16bit_storage: require
  2. #extension GL_EXT_shader_8bit_storage: require
  3. #extension GL_EXT_shader_explicit_arithmetic_types_float16: require
  4. #extension GL_EXT_shader_explicit_arithmetic_types_int8: require
  5. #extension GL_EXT_shader_explicit_arithmetic_types_int16: require
  6. #extension GL_EXT_control_flow_attributes: enable
  7. #extension GL_KHR_shader_subgroup_arithmetic : require
  8. #extension GL_EXT_debug_printf : enable
  9. #define QK4_0 32
  10. #define QK4_1 32
  11. #define GELU_COEF_A 0.044715
  12. #define SQRT_2_OVER_PI 0.79788456080286535587989211986876
  13. #define TWOPI_F 6.283185307179586f
  14. #define QK_K 256
  15. #define u8BufToU16(buf, idx) (((uint16_t(buf[idx + 1]) << 8)) | buf[idx])
  16. #define u8BufToFloat16(buf, idx) uint16BitsToHalf u8BufToU16(buf, idx)
  17. #define u8BufToU32(buf, idx) (((uint32_t u8BufToU16(buf, idx + 2) << 8 | buf[idx + 1]) << 8) | buf[idx])
  18. #define u8BufToFloat(buf, idx) uintBitsToFloat u8BufToU32(buf, idx)
  19. #define sizeof_block_q4_0 0x12
  20. struct block_q4_0 {
  21. float16_t d;
  22. uint8_t qs[QK4_0 / 2];
  23. };
  24. mat4 dequantize_q4_0(const block_q4_0 xb, uint il) {
  25. const float d1 = il != 0 ? (xb.d / 16.f) : xb.d;
  26. const float d2 = d1 / 256.f;
  27. const float md = -8.f * xb.d;
  28. const uint16_t mask0 = il != 0 ? uint16_t(0x00F0) : uint16_t(0x000F);
  29. const uint16_t mask1 = mask0 << 8;
  30. mat4 reg;
  31. for (int i=0;i<8;i++) {
  32. uint16_t b = (uint16_t(xb.qs[2 * i + 1]) << 8) | uint16_t(xb.qs[2 * i]);
  33. reg[i/2][2*(i%2)+0] = d1 * (b & mask0) + md;
  34. reg[i/2][2*(i%2)+1] = d2 * (b & mask1) + md;
  35. }
  36. return reg;
  37. }
  38. #define sizeof_block_q4_1 0x14
  39. struct block_q4_1 {
  40. float16_t d;
  41. float16_t m;
  42. uint8_t qs[QK4_1 / 2];
  43. };
  44. mat4 dequantize_q4_1(const block_q4_1 xb, uint il) {
  45. const float d1 = il != 0 ? (xb.d / 16.f) : xb.d;
  46. const float d2 = d1 / 256.f;
  47. const float m = xb.m;
  48. const uint16_t mask0 = il != 0 ? uint16_t(0x00F0) : uint16_t(0x000F);
  49. const uint16_t mask1 = mask0 << 8;
  50. mat4 reg;
  51. for (int i=0;i<8;i++) {
  52. uint16_t b = (uint16_t(xb.qs[2 * i + 1]) << 8) | uint16_t(xb.qs[2 * i]);
  53. reg[i/2][2*(i%2)+0] = ((b & mask0) * d1) + m;
  54. reg[i/2][2*(i%2)+1] = ((b & mask1) * d2) + m;
  55. }
  56. return reg;
  57. }
  58. #define sizeof_block_q6_k 210
  59. struct block_q6_k {
  60. uint8_t ql[QK_K/2]; // quants, lower 4 bits
  61. uint8_t qh[QK_K/4]; // quants, upper 2 bits
  62. int8_t scales[QK_K/16]; // scales, quantized with 8 bits
  63. float16_t d; // super-block scale
  64. };
  65. mat4 dequantize_q6_k(const block_q6_k xb, uint il) {
  66. const float16_t d_all = xb.d;
  67. const uint qlIndex = 64*(il/8) + 32*((il/2)&1) + 16*(il&1);
  68. const uint qhIndex = 32*(il/8) + 16*(il&1);
  69. float16_t sc = xb.scales[(il%2) + 2 * ((il/2))];
  70. il = (il/2) & 3;
  71. const uint16_t kmask1 = il>1 ? uint16_t(il>2 ? 192 : 48) : uint16_t(il>0 ? 12 : 3);
  72. const uint16_t kmask2 = il>1 ? uint8_t(0xF0) : uint8_t(0x0F);
  73. const float16_t coef = il>1 ? float16_t(1.f/16.f) : float16_t(1.f);
  74. const float16_t ml = float16_t(d_all * sc * 32.f);
  75. const float16_t dl = float16_t(d_all * sc * coef);
  76. mat4 reg;
  77. for (int i = 0; i < 16; ++i) {
  78. const float16_t q = (il&1) != 0 ? ((xb.ql[qlIndex + i] & kmask2) | ((xb.qh[qhIndex + i] & kmask1) << 2))
  79. : ((xb.ql[qlIndex + i] & kmask2) | ((xb.qh[qhIndex + i] & kmask1) << 4));
  80. reg[i/4][i%4] = dl * q - ml;
  81. }
  82. return reg;
  83. }
  84. #define QK8_0 32
  85. // struct block_q8_0 {
  86. // float16_t d; // delta
  87. // int8_t qs[QK8_0]; // quants
  88. // };
  89. #define sizeof_block_q8_0 34