Add register-tiled GEMM and 3D diffusion stencil benchmarks - #1061
Merged
Conversation
…ions All come from real-workload codegen analysis: - gemm/tiled vs tiled_unbounded: register-bound, tracks launch-bounds support - stencil/diffusion3d vs _checked: short and bandwidth-bound, sensitive to per-wave dimension-read costs and bounds-check control flow - applications/: rocm-examples Applications ports (histogram with LDS byte counters, multi-launch prefix-sum sweep, 5x5 convolution with a kernarg mask, bitonic sort and floyd-warshall as launch-overhead sentinels) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Member
Author
|
Added the rocm-examples Applications ports as |
gbaraldi
force-pushed
the
perf-real-kernels
branch
from
August 31, 2026 20:05
d537ae3 to
047b3a5
Compare
Contributor
There was a problem hiding this comment.
AMDGPU.jl Benchmarks
Details
| Benchmark suite | Current: 047b3a5 | Previous: 7cf1826 | Ratio |
|---|---|---|---|
amdgpu/synchronization/context/device |
560 ns |
535 ns |
1.05 |
amdgpu/synchronization/stream/blocking |
235 ns |
230 ns |
1.02 |
amdgpu/synchronization/stream/nonblocking |
317.5 ns |
307.5 ns |
1.03 |
applications/bitonic_sort |
1651043.75 ns |
||
applications/convolution |
107264 ns |
||
applications/floyd_warshall |
11770948.75 ns |
||
applications/histogram |
791381.25 ns |
||
applications/prefix_sum |
251868.75 ns |
||
array/accumulate/Float32/1d |
76623.5 ns |
77873.75 ns |
0.98 |
array/accumulate/Float32/dims=1 |
248063.5 ns |
272711.5 ns |
0.91 |
array/accumulate/Float32/dims=1L |
80976.25 ns |
91106.5 ns |
0.89 |
array/accumulate/Float32/dims=2 |
71406 ns |
87163.75 ns |
0.82 |
array/accumulate/Float32/dims=2L |
2762639.75 ns |
2756483.25 ns |
1.00 |
array/accumulate/Int64/1d |
77811.25 ns |
81851.25 ns |
0.95 |
array/accumulate/Int64/dims=1 |
242673.5 ns |
245181.25 ns |
0.99 |
array/accumulate/Int64/dims=1L |
83988.75 ns |
83678.75 ns |
1.00 |
array/accumulate/Int64/dims=2 |
85726 ns |
90186.5 ns |
0.95 |
array/accumulate/Int64/dims=2L |
2897179.25 ns |
2898395.25 ns |
1.00 |
array/broadcast |
73043.75 ns |
73666.25 ns |
0.99 |
array/construct |
2235 ns |
2057.5 ns |
1.09 |
array/copy |
33183 ns |
37383 ns |
0.89 |
array/copyto!/cpu_to_gpu |
111814 ns |
111264 ns |
1.00 |
array/copyto!/gpu_to_cpu |
111966.75 ns |
111711.75 ns |
1.00 |
array/copyto!/gpu_to_gpu |
53695.75 ns |
59595.75 ns |
0.90 |
array/iteration/findall/bool |
135384.25 ns |
139419.75 ns |
0.97 |
array/iteration/findall/int |
137344.5 ns |
149934.75 ns |
0.92 |
array/iteration/findfirst/bool |
184492.5 ns |
146172.25 ns |
1.26 |
array/iteration/findfirst/int |
162022.5 ns |
145079.75 ns |
1.12 |
array/iteration/findmin/1d |
118321.5 ns |
123587 ns |
0.96 |
array/iteration/findmin/2d |
108454.25 ns |
113761.75 ns |
0.95 |
array/iteration/logical |
245131 ns |
237901.25 ns |
1.03 |
array/iteration/scalar |
287591.75 ns |
298014.5 ns |
0.97 |
array/permutedims/2d |
71481 ns |
71631 ns |
1.00 |
array/permutedims/3d |
70581 ns |
70726 ns |
1.00 |
array/permutedims/4d |
60888.5 ns |
73603.75 ns |
0.83 |
array/random/rand/Float32 |
45635.75 ns |
45208 ns |
1.01 |
array/random/rand/Int64 |
54348.25 ns |
54288.25 ns |
1.00 |
array/random/rand!/Float32 |
64160.75 ns |
65161 ns |
0.98 |
array/random/rand!/Int64 |
71556 ns |
66998.5 ns |
1.07 |
array/random/randn/Float32 |
79106 ns |
79741.25 ns |
0.99 |
array/random/randn!/Float32 |
80946.25 ns |
81228.75 ns |
1.00 |
array/reductions/mapreduce/Float32/1d |
97088.75 ns |
87228.75 ns |
1.11 |
array/reductions/mapreduce/Float32/dims=1 |
83813.75 ns |
75168.75 ns |
1.12 |
array/reductions/mapreduce/Float32/dims=1L |
834459.5 ns |
831937.25 ns |
1.00 |
array/reductions/mapreduce/Float32/dims=2 |
83818.75 ns |
88813.75 ns |
0.94 |
array/reductions/mapreduce/Float32/dims=2L |
144232 ns |
142234.5 ns |
1.01 |
array/reductions/mapreduce/Int64/1d |
96833.75 ns |
101484 ns |
0.95 |
array/reductions/mapreduce/Int64/dims=1 |
83708.5 ns |
91746.5 ns |
0.91 |
array/reductions/mapreduce/Int64/dims=1L |
832542 ns |
832082.5 ns |
1.00 |
array/reductions/mapreduce/Int64/dims=2 |
83903.75 ns |
90866.25 ns |
0.92 |
array/reductions/mapreduce/Int64/dims=2L |
144754.5 ns |
217318.25 ns |
0.67 |
array/reductions/reduce/Float32/1d |
96846.25 ns |
101954 ns |
0.95 |
array/reductions/reduce/Float32/dims=1 |
84021.25 ns |
75456.25 ns |
1.11 |
array/reductions/reduce/Float32/dims=1L |
832932 ns |
829999.75 ns |
1.00 |
array/reductions/reduce/Float32/dims=2 |
84116.25 ns |
89351.25 ns |
0.94 |
array/reductions/reduce/Float32/dims=2L |
143159.75 ns |
143432 ns |
1.00 |
array/reductions/reduce/Int64/1d |
89141.25 ns |
101771.5 ns |
0.88 |
array/reductions/reduce/Int64/dims=1 |
93796.25 ns |
91171.25 ns |
1.03 |
array/reductions/reduce/Int64/dims=1L |
829429.5 ns |
835642.5 ns |
0.99 |
array/reductions/reduce/Int64/dims=2 |
83151.25 ns |
92804 ns |
0.90 |
array/reductions/reduce/Int64/dims=2L |
144569.75 ns |
144482.25 ns |
1.00 |
array/reverse/1d |
44985.75 ns |
45710.5 ns |
0.98 |
array/reverse/1dL |
73921 ns |
72093.5 ns |
1.03 |
array/reverse/1dL_inplace |
65543.5 ns |
80361.25 ns |
0.82 |
array/reverse/1d_inplace |
37133 ns |
61453.5 ns |
0.60 |
array/reverse/2d |
49930.75 ns |
43585.75 ns |
1.15 |
array/reverse/2dL |
83538.75 ns |
87671.25 ns |
0.95 |
array/reverse/2dL_inplace |
91774 ns |
92566.5 ns |
0.99 |
array/reverse/2d_inplace |
57886 ns |
63991 ns |
0.90 |
array/sorting/1d |
334265 ns |
333142.5 ns |
1.00 |
gemm/tiled |
1870684.5 ns |
||
gemm/tiled_unbounded |
1868396.75 ns |
||
integration/byval/reference |
38761 ns |
38921 ns |
1.00 |
integration/byval/slices=1 |
39160 ns |
41091 ns |
0.95 |
integration/byval/slices=2 |
116571 ns |
159003 ns |
0.73 |
integration/byval/slices=3 |
233593 ns |
231453 ns |
1.01 |
integration/volumerhs |
4887940 ns |
4910793 ns |
1.00 |
kernel/indexing |
57155.75 ns |
57765.75 ns |
0.99 |
kernel/indexing_checked |
39290.5 ns |
51668.25 ns |
0.76 |
kernel/launch |
1425 ns |
1402.5 ns |
1.02 |
kernel/rand |
80776 ns |
70716 ns |
1.14 |
latency/import |
1720025947 ns |
1713216916 ns |
1.00 |
latency/precompile |
39753959217 ns |
39864575175 ns |
1.00 |
latency/ttfp |
2325086865 ns |
2323506210 ns |
1.00 |
stencil/diffusion3d |
1627126.25 ns |
||
stencil/diffusion3d_checked |
1658231.75 ns |
This comment was automatically generated by workflow using github-action-benchmark.
Member
|
Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds two real-workload benchmarks distilled from an ISA-level analysis of Oceananigans/ParallelStencil/Trixi kernels on MI300A, chosen because each pins a codegen behavior the existing suite doesn't cover:
gemm/tiledandgemm/tiled_unbounded: register-tiled FP32 GEMM (16×16 workgroup, 8×8 accumulator microtile, LDS-staged). Register-bound: the pair tracks launch-bounds support (Support launch bounds (@roc maxthreads) and set them for static KernelAbstractions workgroups #1060) — on MI300A the bound is worth +76% (15.96 → 28.11 TFLOPS at 4096³) because the default1,1024flat-workgroup-size caps the register budget at 128 VGPRs and forces spills.stencil/diffusion3dandstencil/diffusion3d_checked: 7-point Float64 diffusion step, 256³. Short and bandwidth-bound, so it is dominated by per-wave entry costs — it regresses ~3× if workgroup dimension reads fall back to uncached dispatch-packet loads (the Read workgroup/grid dimensions from hidden kernargs instead of the dispatch packet (2x on short kernels) #1058 sentinel), and the checked variant tracks the bounds-check control-flow overhead.Kernel correctness and timings were validated on MI300A (gfx942, ROCm 7.2.4).
🤖 Generated with Claude Code
https://claude.ai/code/session_01FJL9JQhcpXUVWkhuuiA7ad