webgpu-bench 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +4 -4
  2. package/dist/benchmarks/common.d.ts +6 -8
  3. package/dist/benchmarks/common.d.ts.map +1 -1
  4. package/dist/benchmarks/common.js +0 -8
  5. package/dist/benchmarks/common.js.map +1 -1
  6. package/dist/benchmarks/flopsCommon.d.ts +0 -9
  7. package/dist/benchmarks/flopsCommon.d.ts.map +1 -1
  8. package/dist/benchmarks/flopsCommon.js +1 -5
  9. package/dist/benchmarks/flopsCommon.js.map +1 -1
  10. package/dist/benchmarks/flopsConvert.d.ts +7 -6
  11. package/dist/benchmarks/flopsConvert.d.ts.map +1 -1
  12. package/dist/benchmarks/flopsConvert.js +10 -30
  13. package/dist/benchmarks/flopsConvert.js.map +1 -1
  14. package/dist/benchmarks/flopsF16.d.ts +1 -1
  15. package/dist/benchmarks/flopsF16.d.ts.map +1 -1
  16. package/dist/benchmarks/flopsF16.js +3 -11
  17. package/dist/benchmarks/flopsF16.js.map +1 -1
  18. package/dist/benchmarks/flopsF32.d.ts +1 -1
  19. package/dist/benchmarks/flopsF32.d.ts.map +1 -1
  20. package/dist/benchmarks/flopsF32.js +3 -11
  21. package/dist/benchmarks/flopsF32.js.map +1 -1
  22. package/dist/benchmarks/flopsI8.d.ts +2 -2
  23. package/dist/benchmarks/flopsI8.d.ts.map +1 -1
  24. package/dist/benchmarks/flopsI8.js +6 -25
  25. package/dist/benchmarks/flopsI8.js.map +1 -1
  26. package/dist/benchmarks/flopsMath.d.ts.map +1 -1
  27. package/dist/benchmarks/flopsMath.js +0 -16
  28. package/dist/benchmarks/flopsMath.js.map +1 -1
  29. package/dist/benchmarks/streamBandwidth.d.ts +6 -5
  30. package/dist/benchmarks/streamBandwidth.d.ts.map +1 -1
  31. package/dist/benchmarks/streamBandwidth.js +30 -21
  32. package/dist/benchmarks/streamBandwidth.js.map +1 -1
  33. package/dist/catalog.d.ts +18 -7
  34. package/dist/catalog.d.ts.map +1 -1
  35. package/dist/catalog.js +235 -32
  36. package/dist/catalog.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/shaders/flopsF16Vec4.d.ts +5 -4
  41. package/dist/shaders/flopsF16Vec4.d.ts.map +1 -1
  42. package/dist/shaders/flopsF16Vec4.js +46 -6
  43. package/dist/shaders/flopsF16Vec4.js.map +1 -1
  44. package/dist/shaders/flopsF32Div.d.ts +6 -3
  45. package/dist/shaders/flopsF32Div.d.ts.map +1 -1
  46. package/dist/shaders/flopsF32Div.js +37 -34
  47. package/dist/shaders/flopsF32Div.js.map +1 -1
  48. package/dist/shaders/flopsF32F16Convert.d.ts +3 -3
  49. package/dist/shaders/flopsF32F16Convert.js +3 -3
  50. package/dist/shaders/flopsF32Vec4.d.ts +8 -6
  51. package/dist/shaders/flopsF32Vec4.d.ts.map +1 -1
  52. package/dist/shaders/flopsF32Vec4.js +49 -8
  53. package/dist/shaders/flopsF32Vec4.js.map +1 -1
  54. package/dist/shaders/flopsI32Div.d.ts +5 -3
  55. package/dist/shaders/flopsI32Div.d.ts.map +1 -1
  56. package/dist/shaders/flopsI32Div.js +37 -35
  57. package/dist/shaders/flopsI32Div.js.map +1 -1
  58. package/dist/shaders/flopsI32F32Convert.d.ts +2 -2
  59. package/dist/shaders/flopsI32F32Convert.js +2 -2
  60. package/dist/shaders/flopsI8Dp4a.d.ts +8 -5
  61. package/dist/shaders/flopsI8Dp4a.d.ts.map +1 -1
  62. package/dist/shaders/flopsI8Dp4a.js +40 -9
  63. package/dist/shaders/flopsI8Dp4a.js.map +1 -1
  64. package/dist/shaders/flopsI8Vec4.d.ts +4 -4
  65. package/dist/shaders/flopsI8Vec4.d.ts.map +1 -1
  66. package/dist/shaders/flopsI8Vec4.js +45 -6
  67. package/dist/shaders/flopsI8Vec4.js.map +1 -1
  68. package/dist/shaders/flopsU32PackUnpack.d.ts +10 -8
  69. package/dist/shaders/flopsU32PackUnpack.d.ts.map +1 -1
  70. package/dist/shaders/flopsU32PackUnpack.js +49 -23
  71. package/dist/shaders/flopsU32PackUnpack.js.map +1 -1
  72. package/dist/shaders/streamRead.d.ts +9 -7
  73. package/dist/shaders/streamRead.d.ts.map +1 -1
  74. package/dist/shaders/streamRead.js +15 -17
  75. package/dist/shaders/streamRead.js.map +1 -1
  76. package/dist/shaders/streamWrite.d.ts +4 -5
  77. package/dist/shaders/streamWrite.d.ts.map +1 -1
  78. package/dist/shaders/streamWrite.js +10 -15
  79. package/dist/shaders/streamWrite.js.map +1 -1
  80. package/dist/suite.d.ts.map +1 -1
  81. package/dist/suite.js +2 -7
  82. package/dist/suite.js.map +1 -1
  83. package/dist/types.d.ts +5 -6
  84. package/dist/types.d.ts.map +1 -1
  85. package/package.json +1 -1
@@ -2,14 +2,17 @@
2
2
  * int8 packed-dot-product FLOPS probe: uses the `packed_4x8_integer_dot_product`
3
3
  * extension's `dot4I8Packed` builtin directly (two u32s, each four packed
4
4
  * signed int8 lanes, one instruction) in a tight accumulation loop, to
5
- * isolate the instruction's peak throughput. `a` is fed back from the
6
- * running accumulator every iteration (not just `idx`-derived and fixed),
7
- * so `dot4I8Packed(a, b)` is genuinely loop-carried a compiler that
5
+ * isolate the instruction's peak throughput. Eight independent accumulators
6
+ * per thread so the number is throughput, not the latency of one dependent
7
+ * chain. Each `a` is fed back from its own running accumulator every
8
+ * iteration (not just `idx`-derived and fixed), so `dot4I8Packed(a, b)` is
9
+ * genuinely loop-carried — a compiler that
8
10
  * noticed `a`/`b` were loop-invariant could otherwise hoist the call out of
9
11
  * the loop and replace all `iterations` of it with one call + a multiply,
10
12
  * which is exactly what happened before this fix (the loop collapsed to
11
13
  * ~free, and the dispatch finished faster than the timestamp-query clock's
12
- * resolution, reading back as a literal 0ns elapsed).
14
+ * resolution, reading back as a literal 0ns elapsed). 8 dots x 4 MACs =
15
+ * 64 ops per loop iteration.
13
16
  *
14
17
  * `packed_4x8_integer_dot_product` is a WGSL *language extension* (gated by
15
18
  * `navigator.gpu.wgslLanguageFeatures`, checked as `ctx.info.supportsI8Dot`
@@ -37,13 +40,41 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
37
40
  return;
38
41
  }
39
42
  let b: u32 = 0x05060708u ^ (idx * 0x85ebca6bu);
40
- var a: u32 = 0x01020304u ^ (idx * 0x9e3779b1u);
41
- var acc: i32 = i32(idx & 255u);
43
+ var a0: u32 = 0x01020300u ^ (idx * 0x9e3779b1u);
44
+ var acc0: i32 = i32(idx & 255u) + 0;
45
+ var a1: u32 = 0x01020301u ^ (idx * 0x9e3779b1u);
46
+ var acc1: i32 = i32(idx & 255u) + 1;
47
+ var a2: u32 = 0x01020302u ^ (idx * 0x9e3779b1u);
48
+ var acc2: i32 = i32(idx & 255u) + 2;
49
+ var a3: u32 = 0x01020303u ^ (idx * 0x9e3779b1u);
50
+ var acc3: i32 = i32(idx & 255u) + 3;
51
+ var a4: u32 = 0x01020304u ^ (idx * 0x9e3779b1u);
52
+ var acc4: i32 = i32(idx & 255u) + 4;
53
+ var a5: u32 = 0x01020305u ^ (idx * 0x9e3779b1u);
54
+ var acc5: i32 = i32(idx & 255u) + 5;
55
+ var a6: u32 = 0x01020306u ^ (idx * 0x9e3779b1u);
56
+ var acc6: i32 = i32(idx & 255u) + 6;
57
+ var a7: u32 = 0x01020307u ^ (idx * 0x9e3779b1u);
58
+ var acc7: i32 = i32(idx & 255u) + 7;
42
59
  for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {
43
- acc = acc + dot4I8Packed(a, b);
44
- a = a ^ u32(acc);
60
+ acc0 = acc0 + dot4I8Packed(a0, b);
61
+ a0 = a0 ^ u32(acc0);
62
+ acc1 = acc1 + dot4I8Packed(a1, b);
63
+ a1 = a1 ^ u32(acc1);
64
+ acc2 = acc2 + dot4I8Packed(a2, b);
65
+ a2 = a2 ^ u32(acc2);
66
+ acc3 = acc3 + dot4I8Packed(a3, b);
67
+ a3 = a3 ^ u32(acc3);
68
+ acc4 = acc4 + dot4I8Packed(a4, b);
69
+ a4 = a4 ^ u32(acc4);
70
+ acc5 = acc5 + dot4I8Packed(a5, b);
71
+ a5 = a5 ^ u32(acc5);
72
+ acc6 = acc6 + dot4I8Packed(a6, b);
73
+ a6 = a6 ^ u32(acc6);
74
+ acc7 = acc7 + dot4I8Packed(a7, b);
75
+ a7 = a7 ^ u32(acc7);
45
76
  }
46
- out[idx] = f32(acc);
77
+ out[idx] = f32(acc0 + acc1 + acc2 + acc3 + acc4 + acc5 + acc6 + acc7);
47
78
  }
48
79
  `;
49
80
  //# sourceMappingURL=flopsI8Dp4a.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flopsI8Dp4a.js","sourceRoot":"","sources":["../../src/shaders/flopsI8Dp4a.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BzC,CAAC"}
1
+ {"version":3,"file":"flopsI8Dp4a.js","sourceRoot":"","sources":["../../src/shaders/flopsI8Dp4a.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDzC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * int8-range vec4 FLOPS probe: a single integer FMA chain held in a
3
- * `vec4<i32>` register (4 independent lanes per step; see the fp32 vec4
4
- * probe for why this is ILP, not SIMD, on most GPUs).
2
+ * int8-range vec4 ops probe {@link flopsF32Vec4Wgsl}'s eight independent,
3
+ * 4x-unrolled `vec4` multiply-add chains, on `vec4<i32>`. Overflow wraps, so
4
+ * the chains stay bounded. 256 integer ops per loop iteration.
5
5
  */
6
- export declare const flopsI8Vec4Wgsl = "\nstruct Params {\n threads: u32,\n iterations: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read_write> out: array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let idx = gid.x;\n if (idx >= params.threads) {\n return;\n }\n let s: i32 = i32(idx & 15u);\n let a: vec4<i32> = vec4<i32>(3 + s, 5 + s, 7 + s, 9 + s);\n let b: vec4<i32> = vec4<i32>(11 - s, 13 - s, 17 - s, 19 - s);\n var x: vec4<i32> = vec4<i32>(i32(idx & 255u));\n for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {\n x = x * a + b;\n }\n out[idx] = f32(x.x + x.y + x.z + x.w);\n}\n";
6
+ export declare const flopsI8Vec4Wgsl = "\nstruct Params {\n threads: u32,\n iterations: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read_write> out: array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let idx = gid.x;\n if (idx >= params.threads) {\n return;\n }\n let s: i32 = i32(idx & 15u);\n let a: vec4<i32> = vec4<i32>(3 + s, 5 + s, 7 + s, 9 + s);\n let b: vec4<i32> = vec4<i32>(11 - s, 13 - s, 17 - s, 19 - s);\n var x0: vec4<i32> = vec4<i32>(i32(idx & 255u) + 1);\n var x1: vec4<i32> = vec4<i32>(i32(idx & 255u) + 2);\n var x2: vec4<i32> = vec4<i32>(i32(idx & 255u) + 3);\n var x3: vec4<i32> = vec4<i32>(i32(idx & 255u) + 4);\n var x4: vec4<i32> = vec4<i32>(i32(idx & 255u) + 5);\n var x5: vec4<i32> = vec4<i32>(i32(idx & 255u) + 6);\n var x6: vec4<i32> = vec4<i32>(i32(idx & 255u) + 7);\n var x7: vec4<i32> = vec4<i32>(i32(idx & 255u) + 8);\n for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {\n x0 = x0 * a + b;\n x1 = x1 * a + b;\n x2 = x2 * a + b;\n x3 = x3 * a + b;\n x4 = x4 * a + b;\n x5 = x5 * a + b;\n x6 = x6 * a + b;\n x7 = x7 * a + b;\n x0 = x0 * a + b;\n x1 = x1 * a + b;\n x2 = x2 * a + b;\n x3 = x3 * a + b;\n x4 = x4 * a + b;\n x5 = x5 * a + b;\n x6 = x6 * a + b;\n x7 = x7 * a + b;\n x0 = x0 * a + b;\n x1 = x1 * a + b;\n x2 = x2 * a + b;\n x3 = x3 * a + b;\n x4 = x4 * a + b;\n x5 = x5 * a + b;\n x6 = x6 * a + b;\n x7 = x7 * a + b;\n x0 = x0 * a + b;\n x1 = x1 * a + b;\n x2 = x2 * a + b;\n x3 = x3 * a + b;\n x4 = x4 * a + b;\n x5 = x5 * a + b;\n x6 = x6 * a + b;\n x7 = x7 * a + b;\n }\n let t = x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7;\n out[idx] = f32(t.x + t.y + t.z + t.w);\n}\n";
7
7
  //# sourceMappingURL=flopsI8Vec4.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flopsI8Vec4.d.ts","sourceRoot":"","sources":["../../src/shaders/flopsI8Vec4.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,eAAe,4qBAwB3B,CAAC"}
1
+ {"version":3,"file":"flopsI8Vec4.d.ts","sourceRoot":"","sources":["../../src/shaders/flopsI8Vec4.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,eAAe,gxDA+D3B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * int8-range vec4 FLOPS probe: a single integer FMA chain held in a
3
- * `vec4<i32>` register (4 independent lanes per step; see the fp32 vec4
4
- * probe for why this is ILP, not SIMD, on most GPUs).
2
+ * int8-range vec4 ops probe {@link flopsF32Vec4Wgsl}'s eight independent,
3
+ * 4x-unrolled `vec4` multiply-add chains, on `vec4<i32>`. Overflow wraps, so
4
+ * the chains stay bounded. 256 integer ops per loop iteration.
5
5
  */
6
6
  export const flopsI8Vec4Wgsl = /* wgsl */ `
7
7
  struct Params {
@@ -21,11 +21,50 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
21
21
  let s: i32 = i32(idx & 15u);
22
22
  let a: vec4<i32> = vec4<i32>(3 + s, 5 + s, 7 + s, 9 + s);
23
23
  let b: vec4<i32> = vec4<i32>(11 - s, 13 - s, 17 - s, 19 - s);
24
- var x: vec4<i32> = vec4<i32>(i32(idx & 255u));
24
+ var x0: vec4<i32> = vec4<i32>(i32(idx & 255u) + 1);
25
+ var x1: vec4<i32> = vec4<i32>(i32(idx & 255u) + 2);
26
+ var x2: vec4<i32> = vec4<i32>(i32(idx & 255u) + 3);
27
+ var x3: vec4<i32> = vec4<i32>(i32(idx & 255u) + 4);
28
+ var x4: vec4<i32> = vec4<i32>(i32(idx & 255u) + 5);
29
+ var x5: vec4<i32> = vec4<i32>(i32(idx & 255u) + 6);
30
+ var x6: vec4<i32> = vec4<i32>(i32(idx & 255u) + 7);
31
+ var x7: vec4<i32> = vec4<i32>(i32(idx & 255u) + 8);
25
32
  for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {
26
- x = x * a + b;
33
+ x0 = x0 * a + b;
34
+ x1 = x1 * a + b;
35
+ x2 = x2 * a + b;
36
+ x3 = x3 * a + b;
37
+ x4 = x4 * a + b;
38
+ x5 = x5 * a + b;
39
+ x6 = x6 * a + b;
40
+ x7 = x7 * a + b;
41
+ x0 = x0 * a + b;
42
+ x1 = x1 * a + b;
43
+ x2 = x2 * a + b;
44
+ x3 = x3 * a + b;
45
+ x4 = x4 * a + b;
46
+ x5 = x5 * a + b;
47
+ x6 = x6 * a + b;
48
+ x7 = x7 * a + b;
49
+ x0 = x0 * a + b;
50
+ x1 = x1 * a + b;
51
+ x2 = x2 * a + b;
52
+ x3 = x3 * a + b;
53
+ x4 = x4 * a + b;
54
+ x5 = x5 * a + b;
55
+ x6 = x6 * a + b;
56
+ x7 = x7 * a + b;
57
+ x0 = x0 * a + b;
58
+ x1 = x1 * a + b;
59
+ x2 = x2 * a + b;
60
+ x3 = x3 * a + b;
61
+ x4 = x4 * a + b;
62
+ x5 = x5 * a + b;
63
+ x6 = x6 * a + b;
64
+ x7 = x7 * a + b;
27
65
  }
28
- out[idx] = f32(x.x + x.y + x.z + x.w);
66
+ let t = x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7;
67
+ out[idx] = f32(t.x + t.y + t.z + t.w);
29
68
  }
30
69
  `;
31
70
  //# sourceMappingURL=flopsI8Vec4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flopsI8Vec4.js","sourceRoot":"","sources":["../../src/shaders/flopsI8Vec4.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBzC,CAAC"}
1
+ {"version":3,"file":"flopsI8Vec4.js","sourceRoot":"","sources":["../../src/shaders/flopsI8Vec4.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DzC,CAAC"}
@@ -1,11 +1,13 @@
1
1
  /**
2
- * Manual byte pack/unpack ops probe: no `pack4x*` (or `unpack4x*`) builtin, just
3
- * the shift+mask bit-twiddling those builtins compile to, so this measures
4
- * the raw integer ALU/shifter cost of doing it by hand. Eight independent
5
- * u32 lanes, each per step: unpack 4 bytes (4 mask + 3 shift = 7 ops),
6
- * increment+wrap each byte (4 add + 4 mask = 8 ops), repack (4 mask + 3
7
- * shift + 3 or = 10 ops) = 25 ops/lane/step, no unrolling (each step is
8
- * already many instructions deep). 200 ops per loop iteration.
2
+ * Manual byte pack/unpack probe: no `pack4x*` (or `unpack4x*`) builtin, just
3
+ * the shift+mask bit-twiddling those builtins compile to. Eight independent
4
+ * u32 lanes, unrolled 4x; each step unpacks 4 bytes, increments each, and
5
+ * repacks. Written with no redundant ops (the top byte needs no mask after
6
+ * `>> 24u`, and `<< 24u` discards the bits a mask would) so the source is as
7
+ * close as possible to what executes but the compiler is still free to
8
+ * reassociate shifts and masks, so each lane step counts as 2 ops (one
9
+ * unpack + one pack of a whole u32), not an instruction count. 64 ops per
10
+ * loop iteration.
9
11
  */
10
- export declare const flopsU32PackUnpackWgsl = "\nstruct Params {\n threads: u32,\n iterations: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read_write> out: array<f32>;\n\nfn unpack4(v: u32) -> vec4<u32> {\n return vec4<u32>(v & 0xFFu, (v >> 8u) & 0xFFu, (v >> 16u) & 0xFFu, (v >> 24u) & 0xFFu);\n}\n\nfn pack4(b: vec4<u32>) -> u32 {\n return (b.x & 0xFFu) | ((b.y & 0xFFu) << 8u) | ((b.z & 0xFFu) << 16u) | ((b.w & 0xFFu) << 24u);\n}\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let idx = gid.x;\n if (idx >= params.threads) {\n return;\n }\n var v0: u32 = idx * 2654435761u;\n var v1: u32 = (idx + 1u) * 2654435761u;\n var v2: u32 = (idx + 2u) * 2654435761u;\n var v3: u32 = (idx + 3u) * 2654435761u;\n var v4: u32 = (idx + 4u) * 2654435761u;\n var v5: u32 = (idx + 5u) * 2654435761u;\n var v6: u32 = (idx + 6u) * 2654435761u;\n var v7: u32 = (idx + 7u) * 2654435761u;\n let one = vec4<u32>(1u);\n for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {\n v0 = pack4((unpack4(v0) + one) & vec4<u32>(0xFFu));\n v1 = pack4((unpack4(v1) + one) & vec4<u32>(0xFFu));\n v2 = pack4((unpack4(v2) + one) & vec4<u32>(0xFFu));\n v3 = pack4((unpack4(v3) + one) & vec4<u32>(0xFFu));\n v4 = pack4((unpack4(v4) + one) & vec4<u32>(0xFFu));\n v5 = pack4((unpack4(v5) + one) & vec4<u32>(0xFFu));\n v6 = pack4((unpack4(v6) + one) & vec4<u32>(0xFFu));\n v7 = pack4((unpack4(v7) + one) & vec4<u32>(0xFFu));\n }\n out[idx] = f32(v0 ^ v1 ^ v2 ^ v3 ^ v4 ^ v5 ^ v6 ^ v7);\n}\n";
12
+ export declare const flopsU32PackUnpackWgsl = "\nstruct Params {\n threads: u32,\n iterations: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read_write> out: array<f32>;\n\n// Unpack 4 bytes, add 1 to each (wrapping), repack.\nfn step(v: u32) -> u32 {\n let b0 = (v & 0xFFu) + 1u;\n let b1 = ((v >> 8u) & 0xFFu) + 1u;\n let b2 = ((v >> 16u) & 0xFFu) + 1u;\n let b3 = (v >> 24u) + 1u;\n return (b0 & 0xFFu) | ((b1 & 0xFFu) << 8u) | ((b2 & 0xFFu) << 16u) | (b3 << 24u);\n}\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let idx = gid.x;\n if (idx >= params.threads) {\n return;\n }\n var v0: u32 = (idx + 0u) * 2654435761u;\n var v1: u32 = (idx + 1u) * 2654435761u;\n var v2: u32 = (idx + 2u) * 2654435761u;\n var v3: u32 = (idx + 3u) * 2654435761u;\n var v4: u32 = (idx + 4u) * 2654435761u;\n var v5: u32 = (idx + 5u) * 2654435761u;\n var v6: u32 = (idx + 6u) * 2654435761u;\n var v7: u32 = (idx + 7u) * 2654435761u;\n for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {\n v0 = step(v0);\n v1 = step(v1);\n v2 = step(v2);\n v3 = step(v3);\n v4 = step(v4);\n v5 = step(v5);\n v6 = step(v6);\n v7 = step(v7);\n v0 = step(v0);\n v1 = step(v1);\n v2 = step(v2);\n v3 = step(v3);\n v4 = step(v4);\n v5 = step(v5);\n v6 = step(v6);\n v7 = step(v7);\n v0 = step(v0);\n v1 = step(v1);\n v2 = step(v2);\n v3 = step(v3);\n v4 = step(v4);\n v5 = step(v5);\n v6 = step(v6);\n v7 = step(v7);\n v0 = step(v0);\n v1 = step(v1);\n v2 = step(v2);\n v3 = step(v3);\n v4 = step(v4);\n v5 = step(v5);\n v6 = step(v6);\n v7 = step(v7);\n }\n out[idx] = f32(v0 ^ v1 ^ v2 ^ v3 ^ v4 ^ v5 ^ v6 ^ v7);\n}\n";
11
13
  //# sourceMappingURL=flopsU32PackUnpack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flopsU32PackUnpack.d.ts","sourceRoot":"","sources":["../../src/shaders/flopsU32PackUnpack.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,yhDA4ClC,CAAC"}
1
+ {"version":3,"file":"flopsU32PackUnpack.d.ts","sourceRoot":"","sources":["../../src/shaders/flopsU32PackUnpack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,kuDAoElC,CAAC"}
@@ -1,11 +1,13 @@
1
1
  /**
2
- * Manual byte pack/unpack ops probe: no `pack4x*` (or `unpack4x*`) builtin, just
3
- * the shift+mask bit-twiddling those builtins compile to, so this measures
4
- * the raw integer ALU/shifter cost of doing it by hand. Eight independent
5
- * u32 lanes, each per step: unpack 4 bytes (4 mask + 3 shift = 7 ops),
6
- * increment+wrap each byte (4 add + 4 mask = 8 ops), repack (4 mask + 3
7
- * shift + 3 or = 10 ops) = 25 ops/lane/step, no unrolling (each step is
8
- * already many instructions deep). 200 ops per loop iteration.
2
+ * Manual byte pack/unpack probe: no `pack4x*` (or `unpack4x*`) builtin, just
3
+ * the shift+mask bit-twiddling those builtins compile to. Eight independent
4
+ * u32 lanes, unrolled 4x; each step unpacks 4 bytes, increments each, and
5
+ * repacks. Written with no redundant ops (the top byte needs no mask after
6
+ * `>> 24u`, and `<< 24u` discards the bits a mask would) so the source is as
7
+ * close as possible to what executes but the compiler is still free to
8
+ * reassociate shifts and masks, so each lane step counts as 2 ops (one
9
+ * unpack + one pack of a whole u32), not an instruction count. 64 ops per
10
+ * loop iteration.
9
11
  */
10
12
  export const flopsU32PackUnpackWgsl = /* wgsl */ `
11
13
  struct Params {
@@ -16,12 +18,13 @@ struct Params {
16
18
  @group(0) @binding(0) var<uniform> params: Params;
17
19
  @group(0) @binding(1) var<storage, read_write> out: array<f32>;
18
20
 
19
- fn unpack4(v: u32) -> vec4<u32> {
20
- return vec4<u32>(v & 0xFFu, (v >> 8u) & 0xFFu, (v >> 16u) & 0xFFu, (v >> 24u) & 0xFFu);
21
- }
22
-
23
- fn pack4(b: vec4<u32>) -> u32 {
24
- return (b.x & 0xFFu) | ((b.y & 0xFFu) << 8u) | ((b.z & 0xFFu) << 16u) | ((b.w & 0xFFu) << 24u);
21
+ // Unpack 4 bytes, add 1 to each (wrapping), repack.
22
+ fn step(v: u32) -> u32 {
23
+ let b0 = (v & 0xFFu) + 1u;
24
+ let b1 = ((v >> 8u) & 0xFFu) + 1u;
25
+ let b2 = ((v >> 16u) & 0xFFu) + 1u;
26
+ let b3 = (v >> 24u) + 1u;
27
+ return (b0 & 0xFFu) | ((b1 & 0xFFu) << 8u) | ((b2 & 0xFFu) << 16u) | (b3 << 24u);
25
28
  }
26
29
 
27
30
  @compute @workgroup_size(64)
@@ -30,7 +33,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
30
33
  if (idx >= params.threads) {
31
34
  return;
32
35
  }
33
- var v0: u32 = idx * 2654435761u;
36
+ var v0: u32 = (idx + 0u) * 2654435761u;
34
37
  var v1: u32 = (idx + 1u) * 2654435761u;
35
38
  var v2: u32 = (idx + 2u) * 2654435761u;
36
39
  var v3: u32 = (idx + 3u) * 2654435761u;
@@ -38,16 +41,39 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
38
41
  var v5: u32 = (idx + 5u) * 2654435761u;
39
42
  var v6: u32 = (idx + 6u) * 2654435761u;
40
43
  var v7: u32 = (idx + 7u) * 2654435761u;
41
- let one = vec4<u32>(1u);
42
44
  for (var i: u32 = 0u; i < params.iterations; i = i + 1u) {
43
- v0 = pack4((unpack4(v0) + one) & vec4<u32>(0xFFu));
44
- v1 = pack4((unpack4(v1) + one) & vec4<u32>(0xFFu));
45
- v2 = pack4((unpack4(v2) + one) & vec4<u32>(0xFFu));
46
- v3 = pack4((unpack4(v3) + one) & vec4<u32>(0xFFu));
47
- v4 = pack4((unpack4(v4) + one) & vec4<u32>(0xFFu));
48
- v5 = pack4((unpack4(v5) + one) & vec4<u32>(0xFFu));
49
- v6 = pack4((unpack4(v6) + one) & vec4<u32>(0xFFu));
50
- v7 = pack4((unpack4(v7) + one) & vec4<u32>(0xFFu));
45
+ v0 = step(v0);
46
+ v1 = step(v1);
47
+ v2 = step(v2);
48
+ v3 = step(v3);
49
+ v4 = step(v4);
50
+ v5 = step(v5);
51
+ v6 = step(v6);
52
+ v7 = step(v7);
53
+ v0 = step(v0);
54
+ v1 = step(v1);
55
+ v2 = step(v2);
56
+ v3 = step(v3);
57
+ v4 = step(v4);
58
+ v5 = step(v5);
59
+ v6 = step(v6);
60
+ v7 = step(v7);
61
+ v0 = step(v0);
62
+ v1 = step(v1);
63
+ v2 = step(v2);
64
+ v3 = step(v3);
65
+ v4 = step(v4);
66
+ v5 = step(v5);
67
+ v6 = step(v6);
68
+ v7 = step(v7);
69
+ v0 = step(v0);
70
+ v1 = step(v1);
71
+ v2 = step(v2);
72
+ v3 = step(v3);
73
+ v4 = step(v4);
74
+ v5 = step(v5);
75
+ v6 = step(v6);
76
+ v7 = step(v7);
51
77
  }
52
78
  out[idx] = f32(v0 ^ v1 ^ v2 ^ v3 ^ v4 ^ v5 ^ v6 ^ v7);
53
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flopsU32PackUnpack.js","sourceRoot":"","sources":["../../src/shaders/flopsU32PackUnpack.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ChD,CAAC"}
1
+ {"version":3,"file":"flopsU32PackUnpack.js","sourceRoot":"","sources":["../../src/shaders/flopsU32PackUnpack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEhD,CAAC"}
@@ -1,10 +1,12 @@
1
1
  /**
2
- * Read-bandwidth probe: each thread streams a run of `vec4<f32>` values out
3
- * of a large storage buffer and folds them together with plain addition (no
4
- * second buffer, no multiply) the cheapest possible "prove you read it"
5
- * op then writes a single scalar. Reads dominate; writes are negligible
6
- * (one f32 per thread vs. `cols4` vec4s read), so throughput here is close
7
- * to the device's peak storage-buffer read bandwidth.
2
+ * Read-bandwidth probe. Grid-stride loop: on step `i` every thread `t` loads
3
+ * `data[t + i * threads]`, so adjacent threads in a SIMD group always touch
4
+ * adjacent `vec4<f32>`s (fully coalesced) and the loads within a thread are
5
+ * independent (the compiler can keep several in flight). Folds with plain
6
+ * addition the cheapest "prove you read it" op and writes one scalar per
7
+ * thread, so reads dominate. The previous one-row-per-thread layout had
8
+ * adjacent threads 16 KB apart and only 4096 threads in total: fine on an
9
+ * M3, badly under-reports on a wide discrete GPU.
8
10
  */
9
- export declare const streamReadWgsl = "\nstruct Params {\n rows: u32,\n cols4: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read> data: array<vec4<f32>>;\n@group(0) @binding(2) var<storage, read_write> out: array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let row = gid.x;\n if (row >= params.rows) {\n return;\n }\n var sum: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n let base = row * params.cols4;\n for (var c: u32 = 0u; c < params.cols4; c = c + 1u) {\n sum = sum + data[base + c];\n }\n out[row] = sum.x + sum.y + sum.z + sum.w;\n}\n";
11
+ export declare const streamReadWgsl = "\nstruct Params {\n count: u32,\n threads: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read> data: array<vec4<f32>>;\n@group(0) @binding(2) var<storage, read_write> out: array<f32>;\n\n@compute @workgroup_size(256)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let t = gid.x;\n var sum: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n for (var i: u32 = t; i < params.count; i = i + params.threads) {\n sum = sum + data[i];\n }\n out[t] = sum.x + sum.y + sum.z + sum.w;\n}\n";
10
12
  //# sourceMappingURL=streamRead.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streamRead.d.ts","sourceRoot":"","sources":["../../src/shaders/streamRead.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,unBAuB1B,CAAC"}
1
+ {"version":3,"file":"streamRead.d.ts","sourceRoot":"","sources":["../../src/shaders/streamRead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,0iBAmB1B,CAAC"}
@@ -1,33 +1,31 @@
1
1
  /**
2
- * Read-bandwidth probe: each thread streams a run of `vec4<f32>` values out
3
- * of a large storage buffer and folds them together with plain addition (no
4
- * second buffer, no multiply) the cheapest possible "prove you read it"
5
- * op then writes a single scalar. Reads dominate; writes are negligible
6
- * (one f32 per thread vs. `cols4` vec4s read), so throughput here is close
7
- * to the device's peak storage-buffer read bandwidth.
2
+ * Read-bandwidth probe. Grid-stride loop: on step `i` every thread `t` loads
3
+ * `data[t + i * threads]`, so adjacent threads in a SIMD group always touch
4
+ * adjacent `vec4<f32>`s (fully coalesced) and the loads within a thread are
5
+ * independent (the compiler can keep several in flight). Folds with plain
6
+ * addition the cheapest "prove you read it" op and writes one scalar per
7
+ * thread, so reads dominate. The previous one-row-per-thread layout had
8
+ * adjacent threads 16 KB apart and only 4096 threads in total: fine on an
9
+ * M3, badly under-reports on a wide discrete GPU.
8
10
  */
9
11
  export const streamReadWgsl = /* wgsl */ `
10
12
  struct Params {
11
- rows: u32,
12
- cols4: u32,
13
+ count: u32,
14
+ threads: u32,
13
15
  };
14
16
 
15
17
  @group(0) @binding(0) var<uniform> params: Params;
16
18
  @group(0) @binding(1) var<storage, read> data: array<vec4<f32>>;
17
19
  @group(0) @binding(2) var<storage, read_write> out: array<f32>;
18
20
 
19
- @compute @workgroup_size(64)
21
+ @compute @workgroup_size(256)
20
22
  fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
21
- let row = gid.x;
22
- if (row >= params.rows) {
23
- return;
24
- }
23
+ let t = gid.x;
25
24
  var sum: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
26
- let base = row * params.cols4;
27
- for (var c: u32 = 0u; c < params.cols4; c = c + 1u) {
28
- sum = sum + data[base + c];
25
+ for (var i: u32 = t; i < params.count; i = i + params.threads) {
26
+ sum = sum + data[i];
29
27
  }
30
- out[row] = sum.x + sum.y + sum.z + sum.w;
28
+ out[t] = sum.x + sum.y + sum.z + sum.w;
31
29
  }
32
30
  `;
33
31
  //# sourceMappingURL=streamRead.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"streamRead.js","sourceRoot":"","sources":["../../src/shaders/streamRead.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBxC,CAAC"}
1
+ {"version":3,"file":"streamRead.js","sourceRoot":"","sources":["../../src/shaders/streamRead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;CAmBxC,CAAC"}
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Write-bandwidth probe: each thread stores a run of `vec4<f32>` values into
3
- * a large storage buffer. No buffer reads at all; the only input is the
4
- * thread's own id, so throughput here is close to the device's peak
5
- * storage-buffer write bandwidth.
2
+ * Write-bandwidth probe: the grid-stride layout of {@link streamReadWgsl}
3
+ * with the loads replaced by stores. No buffer reads at all; the only input
4
+ * is the thread's own id.
6
5
  */
7
- export declare const streamWriteWgsl = "\nstruct Params {\n rows: u32,\n cols4: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read_write> out: array<vec4<f32>>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let row = gid.x;\n if (row >= params.rows) {\n return;\n }\n let base = row * params.cols4;\n let v = vec4<f32>(f32(row), f32(row), f32(row), f32(row));\n for (var c: u32 = 0u; c < params.cols4; c = c + 1u) {\n out[base + c] = v;\n }\n}\n";
6
+ export declare const streamWriteWgsl = "\nstruct Params {\n count: u32,\n threads: u32,\n};\n\n@group(0) @binding(0) var<uniform> params: Params;\n@group(0) @binding(1) var<storage, read_write> out: array<vec4<f32>>;\n\n@compute @workgroup_size(256)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let t = gid.x;\n let v = vec4<f32>(f32(t), f32(t), f32(t), f32(t));\n for (var i: u32 = t; i < params.count; i = i + params.threads) {\n out[i] = v;\n }\n}\n";
8
7
  //# sourceMappingURL=streamWrite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streamWrite.d.ts","sourceRoot":"","sources":["../../src/shaders/streamWrite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,4gBAqB3B,CAAC"}
1
+ {"version":3,"file":"streamWrite.d.ts","sourceRoot":"","sources":["../../src/shaders/streamWrite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,eAAe,ybAiB3B,CAAC"}
@@ -1,28 +1,23 @@
1
1
  /**
2
- * Write-bandwidth probe: each thread stores a run of `vec4<f32>` values into
3
- * a large storage buffer. No buffer reads at all; the only input is the
4
- * thread's own id, so throughput here is close to the device's peak
5
- * storage-buffer write bandwidth.
2
+ * Write-bandwidth probe: the grid-stride layout of {@link streamReadWgsl}
3
+ * with the loads replaced by stores. No buffer reads at all; the only input
4
+ * is the thread's own id.
6
5
  */
7
6
  export const streamWriteWgsl = /* wgsl */ `
8
7
  struct Params {
9
- rows: u32,
10
- cols4: u32,
8
+ count: u32,
9
+ threads: u32,
11
10
  };
12
11
 
13
12
  @group(0) @binding(0) var<uniform> params: Params;
14
13
  @group(0) @binding(1) var<storage, read_write> out: array<vec4<f32>>;
15
14
 
16
- @compute @workgroup_size(64)
15
+ @compute @workgroup_size(256)
17
16
  fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
18
- let row = gid.x;
19
- if (row >= params.rows) {
20
- return;
21
- }
22
- let base = row * params.cols4;
23
- let v = vec4<f32>(f32(row), f32(row), f32(row), f32(row));
24
- for (var c: u32 = 0u; c < params.cols4; c = c + 1u) {
25
- out[base + c] = v;
17
+ let t = gid.x;
18
+ let v = vec4<f32>(f32(t), f32(t), f32(t), f32(t));
19
+ for (var i: u32 = t; i < params.count; i = i + params.threads) {
20
+ out[i] = v;
26
21
  }
27
22
  }
28
23
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"streamWrite.js","sourceRoot":"","sources":["../../src/shaders/streamWrite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBzC,CAAC"}
1
+ {"version":3,"file":"streamWrite.js","sourceRoot":"","sources":["../../src/shaders/streamWrite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;CAiBzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../src/suite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkDtE,OAAO,KAAK,EAAqB,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAgB1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAuB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,cAAc,CAAC,eAAe,CAAC,CAiI3F;AAyCD,YAAY,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../src/suite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+CtE,OAAO,KAAK,EAAqB,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAgB1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAuB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,cAAc,CAAC,eAAe,CAAC,CA4H3F;AAyCD,YAAY,EAAE,UAAU,EAAE,CAAC"}
package/dist/suite.js CHANGED
@@ -7,8 +7,8 @@ import { prepareFlopsF32Scalar, prepareFlopsF32Vec4, prepareFlopsF32Mat4, prepar
7
7
  import { prepareFlopsF16Scalar, prepareFlopsF16Vec4, prepareFlopsF16Mat4, prepareFlopsF16Matvec, } from "./benchmarks/flopsF16.js";
8
8
  import { prepareFlopsI8Scalar, prepareFlopsI8Vec4, prepareFlopsI8Mat4, prepareFlopsI8Matvec, prepareFlopsI8MatvecDp4a, prepareFlopsI8Dp4a, } from "./benchmarks/flopsI8.js";
9
9
  import { prepareFlopsF32Div, prepareFlopsI32Div, prepareFlopsF32Sqrt, prepareFlopsF32Rsqrt, prepareFlopsF32Pow, prepareFlopsF32Sincos, prepareFlopsF32Log, } from "./benchmarks/flopsMath.js";
10
- import { prepareFlopsU32PackUnpack, prepareFlopsI32F32Convert, prepareFlopsF32F16Convert, prepareFlopsI32F16Convert, } from "./benchmarks/flopsConvert.js";
11
- import { errorResult, metricPerSecond, rowFromMeta, FLOPS_METRIC, BYTES_METRIC, } from "./benchmarks/common.js";
10
+ import { prepareFlopsU32PackUnpack, prepareFlopsI32F32Convert, prepareFlopsF32F16Convert, } from "./benchmarks/flopsConvert.js";
11
+ import { errorResult, metricPerSecond, rowFromMeta, } from "./benchmarks/common.js";
12
12
  export { computeStats } from "./stats.js";
13
13
  const DEFAULT_ROWS = 4096;
14
14
  const DEFAULT_COLS = 4096;
@@ -71,7 +71,6 @@ export async function* runSuite(options = {}) {
71
71
  compute('flops-u32-packunpack', () => prepareFlopsU32PackUnpack(ctx, flopsHarness)),
72
72
  compute('flops-i32-f32-convert', () => prepareFlopsI32F32Convert(ctx, flopsHarness)),
73
73
  compute('flops-f32-f16-convert', () => prepareFlopsF32F16Convert(ctx, flopsHarness)),
74
- compute('flops-i32-f16-convert', () => prepareFlopsI32F16Convert(ctx, flopsHarness)),
75
74
  ];
76
75
  // Phase 1: build every benchmark's GPU resources up front. Rows that can't
77
76
  // run at all (missing feature, failed shader compile) resolve right here;
@@ -81,13 +80,9 @@ export async function* runSuite(options = {}) {
81
80
  for (const [id, category, prepare] of benchmarks) {
82
81
  const fallbackMeta = {
83
82
  id,
84
- label: id,
85
- description: '',
86
- source: '',
87
83
  category,
88
84
  rows,
89
85
  cols,
90
- metric: category === 'bandwidth' ? BYTES_METRIC : FLOPS_METRIC,
91
86
  amountPerOp: 0,
92
87
  };
93
88
  let prepared;
package/dist/suite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"suite.js","sourceRoot":"","sources":["../src/suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suite.js","sourceRoot":"","sources":["../src/suite.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -40,13 +40,14 @@ export interface MetricDef {
40
40
  * after every sample it takes (still `running`, with the partial stats so
41
41
  * far), and when it finishes (ok/skipped/error) — so the UI can render
42
42
  * progress incrementally.
43
+ *
44
+ * Pure measurement, no identity/display metadata: label, description, WGSL
45
+ * source, and the metric definition all live on the matching `id` in
46
+ * `BENCHMARK_CATALOG` instead, so a UI joins a result onto its catalog row
47
+ * rather than getting them handed twice.
43
48
  */
44
49
  export interface BenchmarkResult {
45
50
  id: string;
46
- label: string;
47
- description: string;
48
- /** WGSL source of the kernel that was run, for display alongside the result. */
49
- source: string;
50
51
  category: BenchmarkCategory;
51
52
  status: BenchmarkStatus;
52
53
  message?: string;
@@ -71,8 +72,6 @@ export interface BenchmarkResult {
71
72
  stats?: Stats;
72
73
  /** Set for `ok` rows: see `SamplingStopReason`. */
73
74
  stopReason?: SamplingStopReason;
74
- /** What `metricValue` counts. Set from the start, before any measurement lands. */
75
- metric: MetricDef;
76
75
  /** Peak `<metric.unit>/s`, computed from the best run (`stats.min`). */
77
76
  metricValue?: number;
78
77
  timingMethod: TimingMethod;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webgpu-bench",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "Benchmark suite for WebGPU's raw ceilings: memory bandwidth and fp32/fp16/int8 FLOPS.",
5
5
  "keywords": [
6
6
  "webgpu",