webgpu-bench 0.1.0 → 0.1.1

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.
@@ -0,0 +1,22 @@
1
+ import type { BenchmarkCategory, MetricDef } from './types.ts';
2
+ /** Identity of one benchmark, known without touching the GPU. */
3
+ export interface BenchmarkInfo {
4
+ id: string;
5
+ label: string;
6
+ category: BenchmarkCategory;
7
+ metric: MetricDef;
8
+ }
9
+ /**
10
+ * Every benchmark `runSuite` can yield a row for, in the same order it
11
+ * schedules them — so a UI can render the full results table (id, label,
12
+ * category, metric unit) before a device is even acquired, then fill in
13
+ * throughput as `runSuite`'s rows arrive and merge onto these ids.
14
+ *
15
+ * Kept as a hand-written list, not derived from `suite.ts`'s benchmark
16
+ * table, because each kernel's id/label/metric there is itself a literal
17
+ * embedded next to its WGSL and `prepare*` call (real GPU setup) — nothing
18
+ * to derive from without running it. `suite.browser.test.ts` asserts this
19
+ * list's ids match `runSuite`'s one-to-one, so the two can't drift silently.
20
+ */
21
+ export declare const BENCHMARK_CATALOG: readonly BenchmarkInfo[];
22
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/D,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,aAAa,EAiCrD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { BYTES_METRIC, FLOPS_METRIC, OPS_METRIC } from "./benchmarks/common.js";
2
+ /**
3
+ * Every benchmark `runSuite` can yield a row for, in the same order it
4
+ * schedules them — so a UI can render the full results table (id, label,
5
+ * category, metric unit) before a device is even acquired, then fill in
6
+ * throughput as `runSuite`'s rows arrive and merge onto these ids.
7
+ *
8
+ * Kept as a hand-written list, not derived from `suite.ts`'s benchmark
9
+ * table, because each kernel's id/label/metric there is itself a literal
10
+ * embedded next to its WGSL and `prepare*` call (real GPU setup) — nothing
11
+ * to derive from without running it. `suite.browser.test.ts` asserts this
12
+ * list's ids match `runSuite`'s one-to-one, so the two can't drift silently.
13
+ */
14
+ export const BENCHMARK_CATALOG = [
15
+ { id: 'read-bandwidth', label: 'Read bandwidth', category: 'bandwidth', metric: BYTES_METRIC },
16
+ { id: 'write-bandwidth', label: 'Write bandwidth', category: 'bandwidth', metric: BYTES_METRIC },
17
+ { id: 'flops-f32-scalar', label: 'fp32 scalar FMA FLOPS', category: 'compute', metric: FLOPS_METRIC },
18
+ { id: 'flops-f32-vec4', label: 'fp32 vec4 FLOPS', category: 'compute', metric: FLOPS_METRIC },
19
+ { id: 'flops-f32-mat4', label: 'fp32 mat4 FLOPS', category: 'compute', metric: FLOPS_METRIC },
20
+ { id: 'flops-f32-matvec', label: 'fp32 matvec FLOPS', category: 'compute', metric: FLOPS_METRIC },
21
+ { id: 'flops-f16-scalar', label: 'fp16 scalar FMA FLOPS', category: 'compute', metric: FLOPS_METRIC },
22
+ { id: 'flops-f16-vec4', label: 'fp16 vec4 FLOPS', category: 'compute', metric: FLOPS_METRIC },
23
+ { id: 'flops-f16-mat4', label: 'fp16 mat4 FLOPS', category: 'compute', metric: FLOPS_METRIC },
24
+ { id: 'flops-f16-matvec', label: 'fp16 matvec FLOPS', category: 'compute', metric: FLOPS_METRIC },
25
+ { id: 'flops-i8-scalar', label: 'int8-range scalar FMA FLOPS', category: 'compute', metric: OPS_METRIC },
26
+ { id: 'flops-i8-vec4', label: 'int8-range vec4 FLOPS', category: 'compute', metric: OPS_METRIC },
27
+ { id: 'flops-i8-mat4', label: 'int8-range mat4 FLOPS', category: 'compute', metric: OPS_METRIC },
28
+ { id: 'flops-i8-matvec', label: 'int8 matvec FLOPS (i32 dot)', category: 'compute', metric: OPS_METRIC },
29
+ {
30
+ id: 'flops-i8-matvec-dp4a',
31
+ label: 'int8 matvec FLOPS (dot4I8Packed)',
32
+ category: 'compute',
33
+ metric: OPS_METRIC,
34
+ },
35
+ { id: 'flops-i8-dp4a', label: 'int8 dot4I8Packed FLOPS', category: 'compute', metric: OPS_METRIC },
36
+ { id: 'flops-f32-div', label: 'fp32 div FLOPS', category: 'compute', metric: FLOPS_METRIC },
37
+ { id: 'flops-i32-div', label: 'i32 div FLOPS', category: 'compute', metric: OPS_METRIC },
38
+ { id: 'flops-f32-sqrt', label: 'fp32 sqrt FLOPS', category: 'compute', metric: FLOPS_METRIC },
39
+ { id: 'flops-f32-rsqrt', label: 'fp32 rsqrt FLOPS', category: 'compute', metric: FLOPS_METRIC },
40
+ { id: 'flops-f32-pow', label: 'fp32 pow FLOPS', category: 'compute', metric: FLOPS_METRIC },
41
+ { id: 'flops-f32-sincos', label: 'fp32 sin/cos FLOPS', category: 'compute', metric: FLOPS_METRIC },
42
+ { id: 'flops-f32-log', label: 'fp32 ln FLOPS', category: 'compute', metric: FLOPS_METRIC },
43
+ { id: 'flops-u32-packunpack', label: 'u32 byte pack/unpack ops', category: 'compute', metric: OPS_METRIC },
44
+ { id: 'flops-i32-f32-convert', label: 'i32<->f32 convert FLOPS', category: 'compute', metric: OPS_METRIC },
45
+ { id: 'flops-f32-f16-convert', label: 'f32<->f16 convert FLOPS', category: 'compute', metric: OPS_METRIC },
46
+ { id: 'flops-i32-f16-convert', label: 'i32<->f16 convert FLOPS', category: 'compute', metric: OPS_METRIC },
47
+ ];
48
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { runSuite } from './suite.ts';
2
+ export { BENCHMARK_CATALOG } from './catalog.ts';
3
+ export type { BenchmarkInfo } from './catalog.ts';
2
4
  export type { BenchmarkResult, SuiteOptions, SuiteProgressEvent, DeviceInfo, Stats, BenchmarkCategory, BenchmarkStatus, TimingMethod, SamplingStopReason, } from './types.ts';
3
5
  export { computeStats, isBestStable, isThrottled, tQuantile975 } from './stats.ts';
4
6
  export type { BestStableOptions } from './stats.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACrH,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACrH,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { runSuite } from "./suite.js";
2
+ export { BENCHMARK_CATALOG } from "./catalog.js";
2
3
  export { computeStats, isBestStable, isThrottled, tQuantile975 } from "./stats.js";
3
4
  export { DEFAULT_SAMPLING, runSampling, recordSample, roundIsThrottled, resolveSamplingConfig } from "./sampling.js";
4
5
  export { DEFAULT_MEASUREMENT, KernelSampler } from "./gpu/benchmarkRunner.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAYtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAErH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAajD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAErH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webgpu-bench",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Benchmark suite for WebGPU's raw ceilings: memory bandwidth and fp32/fp16/int8 FLOPS.",
5
5
  "keywords": [
6
6
  "webgpu",