Skip to content

Fold smaller workgroups of N-d launches on hardware that runs them fast - #918

Open
maleadt wants to merge 1 commit into
tb/ndlaunch-foldfrom
tb/fold-threshold
Open

maleadt wants to merge 1 commit into
tb/ndlaunch-foldfrom
tb/fold-threshold

Conversation

@maleadt

@maleadt maleadt commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

#919 folds tuned launches of iteration spaces with more than three dimensions onto the N-d grid only when the first three dimensions hold at least 64 work-items. Below that, NVIDIA GPUs run the folded launch slower than a linear one, but other hardware keeps gaining from folding well below 64. Folded over linear, by work-items in the first three dimensions:

64 32 16 12 8
CUDA, RTX 5080 1.35 0.72 0.45
CUDA, RTX 6000 Ada 0.85 0.51 0.50
AMDGPU, Radeon iGPU (gfx1036) 2.85 2.85 1.43 1.09 0.73
Metal, M1 1.93 1.92 1.02 0.80 0.63
oneAPI, Arc A770 1.41 1.42 1.17 1.18 0.97
PoCL, 8 threads 4.3 6.1 2.3

This makes the threshold a per-backend fold_threshold: 1 on PoCL, whose work-items are iterations of a loop, 16 on AMDGPU, Metal and oneAPI, and 64 otherwise. The default also covers the OpenCL back end, which serves NVIDIA devices too (0.90 at 64 on the RTX 6000 Ada).

Like the tunables of AcceleratedKernels, the values live in KernelAbstractions, as extensions on AMDGPU, Metal and oneAPI, rather than in the back ends, so they can be tuned without releasing those. The extensions load on Julia 1.10 and 1.13, even though their triggers depend on KernelAbstractions.

The AMDGPU numbers come from an integrated RDNA2 GPU; discrete RDNA and wave64 CDNA GPUs weren't measured.

Tested with the KA test suite on PoCL, and the KernelAbstractions tests of AMDGPU.jl (gfx1036), Metal.jl (M1) and oneAPI.jl (Arc A770), each with the extension loaded.

A tuned launch of an iteration space with more than three dimensions is
only folded onto the N-d grid if the first three dimensions hold 64
work-items. Below that, NVIDIA GPUs run the folded launch slower than a
linear one, but other hardware keeps gaining from it. Folded over
linear, for a kernel scaling an array, by work-items in the first three
dimensions:

                         64     32     16      8
  CUDA, RTX 5080       1.35   0.72      -   0.45
  CUDA, RTX 6000 Ada   0.85   0.51      -   0.50
  AMDGPU, gfx1036      2.85   2.85   1.43   0.73
  Metal, M1            1.93   1.92   1.02   0.63
  oneAPI, Arc A770     1.41   1.42   1.17   0.97
  PoCL, 8 threads      4.3    6.1       -   2.3

Make the threshold a per-backend `fold_threshold`: 1 on PoCL, 16 on
AMDGPU, Metal and oneAPI, and 64 otherwise, which also covers OpenCL
devices from NVIDIA. Like the tunables of AcceleratedKernels, the values
live in KernelAbstractions (in extensions on the back ends), so they can
be changed without releasing those.
@maleadt
maleadt changed the base branch from main to tb/ndlaunch-fold October 23, 2026 14:42
@maleadt
maleadt added this pull request to stack #920 October 23, 2026 14:42
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main 0bf46d3... main / 0bf46d3...
const/@Const/Float32/262144 0.251 ± 0.0064 ms 0.253 ± 0.0071 ms 0.993 ± 0.037
const/@Const/Float32/65536 0.0842 ± 0.0034 ms 0.0835 ± 0.0024 ms 1.01 ± 0.05
const/@Const/Float64/262144 0.448 ± 0.013 ms 0.437 ± 0.01 ms 1.03 ± 0.038
const/@Const/Float64/65536 0.133 ± 0.0036 ms 0.13 ± 0.0048 ms 1.03 ± 0.047
const/unmarked/Float32/262144 0.321 ± 0.013 ms 0.347 ± 0.011 ms 0.924 ± 0.046
const/unmarked/Float32/65536 0.097 ± 0.0018 ms 0.112 ± 0.0022 ms 0.865 ± 0.024
const/unmarked/Float64/262144 0.618 ± 0.046 ms 0.632 ± 0.02 ms 0.978 ± 0.08
const/unmarked/Float64/65536 0.171 ± 0.011 ms 0.175 ± 0.0093 ms 0.98 ± 0.081
dgsem/2D/Float32/fluxdiff/element 0.329 ± 0.011 ms 0.336 ± 0.0093 ms 0.978 ± 0.042
dgsem/2D/Float32/fluxdiff/node E=8 0.448 ± 0.0096 ms 0.461 ± 0.011 ms 0.971 ± 0.03
dgsem/2D/Float32/fluxdiff/node halfsweep E=8 0.325 ± 0.013 ms 0.34 ± 0.011 ms 0.958 ± 0.048
dgsem/2D/Float32/fluxdiff/node halfsweep v-last E=8 0.346 ± 0.012 ms 0.359 ± 0.021 ms 0.963 ± 0.064
dgsem/2D/Float32/weak/element 0.121 ± 0.0091 ms 0.117 ± 0.0079 ms 1.04 ± 0.1
dgsem/2D/Float32/weak/element private 0.124 ± 0.0063 ms 0.125 ± 0.0029 ms 0.992 ± 0.056
dgsem/2D/Float32/weak/node localmem E=1 0.121 ± 0.016 ms 0.111 ± 0.0029 ms 1.09 ± 0.15
dgsem/2D/Float32/weak/node localmem E=8 0.106 ± 0.012 ms 0.107 ± 0.0061 ms 0.996 ± 0.13
dgsem/2D/Float32/weak/node localmem v-last E=1 0.168 ± 0.0091 ms 0.166 ± 0.0067 ms 1.01 ± 0.068
dgsem/2D/Float32/weak/node localmem v-last E=8 0.164 ± 0.0093 ms 0.164 ± 0.0078 ms 1 ± 0.074
dgsem/2D/Float32/weak/node recompute E=8 0.292 ± 0.0083 ms 0.301 ± 0.0074 ms 0.971 ± 0.036
dgsem/2D/Float64/fluxdiff/element 0.347 ± 0.0084 ms 0.347 ± 0.015 ms 1 ± 0.05
dgsem/2D/Float64/fluxdiff/node E=8 0.488 ± 0.013 ms 0.48 ± 0.017 ms 1.02 ± 0.045
dgsem/2D/Float64/fluxdiff/node halfsweep E=8 0.358 ± 0.012 ms 0.354 ± 0.0093 ms 1.01 ± 0.042
dgsem/2D/Float64/fluxdiff/node halfsweep v-last E=8 0.346 ± 0.0077 ms 0.355 ± 0.015 ms 0.972 ± 0.048
dgsem/2D/Float64/weak/element 0.123 ± 0.01 ms 0.124 ± 0.005 ms 0.99 ± 0.091
dgsem/2D/Float64/weak/element private 0.133 ± 0.0048 ms 0.134 ± 0.0079 ms 0.998 ± 0.069
dgsem/2D/Float64/weak/node localmem E=1 0.113 ± 0.012 ms 0.112 ± 0.016 ms 1.01 ± 0.18
dgsem/2D/Float64/weak/node localmem E=8 0.112 ± 0.0081 ms 0.109 ± 0.0043 ms 1.03 ± 0.085
dgsem/2D/Float64/weak/node localmem v-last E=1 0.165 ± 0.0086 ms 0.167 ± 0.0082 ms 0.987 ± 0.071
dgsem/2D/Float64/weak/node localmem v-last E=8 0.163 ± 0.0031 ms 0.168 ± 0.0062 ms 0.97 ± 0.04
dgsem/2D/Float64/weak/node recompute E=8 0.406 ± 0.0094 ms 0.401 ± 0.011 ms 1.01 ± 0.037
dgsem/3D/Float32/fluxdiff/element 1.12 ± 0.016 ms 1.15 ± 0.016 ms 0.973 ± 0.019
dgsem/3D/Float32/fluxdiff/node E=2 1.85 ± 0.047 ms 1.88 ± 0.024 ms 0.987 ± 0.028
dgsem/3D/Float32/fluxdiff/node halfsweep E=1 1.16 ± 0.021 ms 1.24 ± 0.034 ms 0.93 ± 0.031
dgsem/3D/Float32/fluxdiff/node halfsweep v-last E=1 1.34 ± 0.031 ms 1.32 ± 0.019 ms 1.02 ± 0.028
dgsem/3D/Float32/weak/element 0.416 ± 0.014 ms 0.434 ± 0.011 ms 0.959 ± 0.039
dgsem/3D/Float32/weak/element private 0.419 ± 0.012 ms 0.425 ± 0.01 ms 0.986 ± 0.036
dgsem/3D/Float32/weak/node localmem E=1 0.546 ± 0.012 ms 0.39 ± 0.014 ms 1.4 ± 0.059
dgsem/3D/Float32/weak/node localmem E=2 0.562 ± 0.014 ms 0.576 ± 0.012 ms 0.976 ± 0.031
dgsem/3D/Float32/weak/node localmem v-last E=1 0.78 ± 0.025 ms 0.692 ± 0.012 ms 1.13 ± 0.041
dgsem/3D/Float32/weak/node localmem v-last E=2 0.789 ± 0.011 ms 0.839 ± 0.012 ms 0.94 ± 0.019
dgsem/3D/Float32/weak/node recompute E=2 1.26 ± 0.026 ms 1.33 ± 0.012 ms 0.949 ± 0.022
dgsem/3D/Float32/weak/slab E=1 1.44 ± 0.041 ms 1.48 ± 0.019 ms 0.969 ± 0.03
dgsem/3D/Float32/weak/slab E=8 4.08 ± 0.085 ms 4.41 ± 0.039 ms 0.925 ± 0.021
dgsem/3D/Float32/weak/slab double-buffered E=1 0.919 ± 0.024 ms 0.944 ± 0.0083 ms 0.973 ± 0.027
dgsem/3D/Float32/weak/slab double-buffered E=8 1.05 ± 0.013 ms 1.09 ± 0.018 ms 0.968 ± 0.02
dgsem/3D/Float32/weak/slab double-buffered v-last E=1 0.939 ± 0.026 ms 0.961 ± 0.013 ms 0.977 ± 0.03
dgsem/3D/Float32/weak/slab double-buffered v-last E=8 1.04 ± 0.014 ms 1.06 ± 0.01 ms 0.981 ± 0.016
dgsem/3D/Float32/weak/slab v-last E=1 1.48 ± 0.015 ms 1.51 ± 0.02 ms 0.979 ± 0.017
dgsem/3D/Float32/weak/slab v-last E=8 4.54 ± 0.32 ms 4.42 ± 0.052 ms 1.03 ± 0.074
dgsem/3D/Float64/fluxdiff/element 1.13 ± 0.033 ms 1.18 ± 0.015 ms 0.955 ± 0.031
dgsem/3D/Float64/fluxdiff/node E=2 1.96 ± 0.034 ms 1.99 ± 0.027 ms 0.986 ± 0.022
dgsem/3D/Float64/fluxdiff/node halfsweep E=1 1.18 ± 0.017 ms 1.23 ± 0.015 ms 0.964 ± 0.018
dgsem/3D/Float64/fluxdiff/node halfsweep v-last E=1 1.39 ± 0.026 ms 1.38 ± 0.019 ms 1 ± 0.023
dgsem/3D/Float64/weak/element 0.485 ± 0.013 ms 0.492 ± 0.012 ms 0.986 ± 0.036
dgsem/3D/Float64/weak/element private 0.501 ± 0.014 ms 0.517 ± 0.011 ms 0.969 ± 0.034
dgsem/3D/Float64/weak/node localmem E=1 0.598 ± 0.013 ms 0.397 ± 0.012 ms 1.5 ± 0.056
dgsem/3D/Float64/weak/node localmem E=2 0.559 ± 0.012 ms 0.572 ± 0.01 ms 0.977 ± 0.027
dgsem/3D/Float64/weak/node localmem v-last E=1 0.832 ± 0.014 ms 0.716 ± 0.013 ms 1.16 ± 0.029
dgsem/3D/Float64/weak/node localmem v-last E=2 0.844 ± 0.014 ms 0.83 ± 0.022 ms 1.02 ± 0.031
dgsem/3D/Float64/weak/node recompute E=2 1.41 ± 0.025 ms 1.43 ± 0.015 ms 0.987 ± 0.021
dgsem/3D/Float64/weak/slab E=1 1.5 ± 0.017 ms 1.55 ± 0.73 ms 0.971 ± 0.46
dgsem/3D/Float64/weak/slab E=8 4.27 ± 0.29 ms 4.06 ± 0.34 ms 1.05 ± 0.11
dgsem/3D/Float64/weak/slab double-buffered E=1 0.938 ± 0.015 ms 0.947 ± 0.02 ms 0.99 ± 0.026
dgsem/3D/Float64/weak/slab double-buffered E=8 1.03 ± 0.034 ms 1.06 ± 0.015 ms 0.965 ± 0.035
dgsem/3D/Float64/weak/slab double-buffered v-last E=1 0.942 ± 0.019 ms 0.944 ± 0.018 ms 0.998 ± 0.028
dgsem/3D/Float64/weak/slab double-buffered v-last E=8 1.07 ± 0.022 ms 1.07 ± 0.013 ms 1 ± 0.024
dgsem/3D/Float64/weak/slab v-last E=1 1.59 ± 0.061 ms 1.51 ± 0.033 ms 1.05 ± 0.046
dgsem/3D/Float64/weak/slab v-last E=8 4.58 ± 0.17 ms 4.39 ± 0.065 ms 1.04 ± 0.042
launch/3D static workgroup, dynamic ndrange 8.17 ± 1.5 μs 8.35 ± 0.96 μs 0.979 ± 0.21
launch/3D static workgroup, static ndrange 7.49 ± 1.2 μs 8.19 ± 1 μs 0.915 ± 0.18
launch/dynamic workgroup, dynamic ndrange 8.2 ± 1 μs 8.14 ± 1.1 μs 1.01 ± 0.18
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 7.77 ± 1.3 μs 7.73 ± 1.1 μs 1 ± 0.22
launch/static workgroup, dynamic ndrange 7.13 ± 1.4 μs 7.85 ± 0.84 μs 0.908 ± 0.2
launch/static workgroup, static ndrange 7.07 ± 0.89 μs 7.66 ± 1.1 μs 0.924 ± 0.18
narrow workgroup/masked/W=16 0.281 ± 0.01 ms 0.279 ± 0.011 ms 1.01 ± 0.052
narrow workgroup/masked/W=4 0.273 ± 0.013 ms 0.279 ± 0.0074 ms 0.978 ± 0.054
narrow workgroup/unmasked/W=16 0.295 ± 0.012 ms 0.277 ± 0.0077 ms 1.06 ± 0.053
narrow workgroup/unmasked/W=4 0.306 ± 0.009 ms 0.278 ± 0.0072 ms 1.1 ± 0.043
partition/dynamic workgroup, dynamic ndrange 0.0355 ± 0.017 μs 0.035 ± 0.017 μs 1.01 ± 0.7
partition/static workgroup, dynamic ndrange 0.0418 ± 0.0085 μs 0.0429 ± 0.0086 μs 0.974 ± 0.28
partition/static workgroup, static ndrange 1.19 ± 0.01 ns 1.63 ± 0.011 ns 0.73 ± 0.0079
saxpy/default/Float16/1024 8.94 ± 0.94 μs 9.72 ± 0.99 μs 0.919 ± 0.13
saxpy/default/Float16/1048576 0.359 ± 0.026 ms 0.387 ± 0.025 ms 0.928 ± 0.089
saxpy/default/Float16/16384 14 ± 0.5 μs 15.1 ± 0.51 μs 0.924 ± 0.046
saxpy/default/Float16/2048 9.62 ± 1.2 μs 9.98 ± 1.2 μs 0.963 ± 0.16
saxpy/default/Float16/256 7.29 ± 1.9 μs 7.96 ± 1.3 μs 0.916 ± 0.28
saxpy/default/Float16/262144 0.107 ± 0.0085 ms 0.114 ± 0.0093 ms 0.943 ± 0.11
saxpy/default/Float16/32768 19.1 ± 1.9 μs 20.4 ± 0.71 μs 0.938 ± 0.099
saxpy/default/Float16/4096 10.1 ± 1.1 μs 10.7 ± 1.3 μs 0.951 ± 0.15
saxpy/default/Float16/512 7.32 ± 1.6 μs 7.22 ± 1.3 μs 1.01 ± 0.28
saxpy/default/Float16/64 6.43 ± 1.1 μs 7.6 ± 1.3 μs 0.846 ± 0.21
saxpy/default/Float16/65536 28.9 ± 1.9 μs 30.3 ± 0.84 μs 0.953 ± 0.068
saxpy/default/Float32/1024 8.35 ± 0.96 μs 9.59 ± 1 μs 0.871 ± 0.14
saxpy/default/Float32/1048576 0.373 ± 0.072 ms 0.377 ± 0.081 ms 0.989 ± 0.28
saxpy/default/Float32/16384 10.7 ± 1.8 μs 12.2 ± 1.6 μs 0.878 ± 0.19
saxpy/default/Float32/2048 8.63 ± 1 μs 9.79 ± 1.3 μs 0.882 ± 0.15
saxpy/default/Float32/256 7.04 ± 1.3 μs 8.44 ± 1.5 μs 0.834 ± 0.21
saxpy/default/Float32/262144 0.098 ± 0.063 ms 0.104 ± 0.02 ms 0.938 ± 0.63
saxpy/default/Float32/32768 17.5 ± 1.3 μs 18.1 ± 1.8 μs 0.962 ± 0.12
saxpy/default/Float32/4096 9.6 ± 0.93 μs 10.3 ± 1.2 μs 0.934 ± 0.14
saxpy/default/Float32/512 8.54 ± 1 μs 9.74 ± 1.2 μs 0.877 ± 0.15
saxpy/default/Float32/64 7.93 ± 1.3 μs 8.12 ± 1.4 μs 0.977 ± 0.23
saxpy/default/Float32/65536 25.4 ± 4 μs 26.1 ± 3.6 μs 0.971 ± 0.2
saxpy/default/Float64/1024 8.62 ± 1 μs 9.69 ± 1 μs 0.889 ± 0.14
saxpy/default/Float64/1048576 0.661 ± 0.15 ms 0.686 ± 0.15 ms 0.964 ± 0.3
saxpy/default/Float64/16384 16.4 ± 2.7 μs 16.6 ± 2.7 μs 0.989 ± 0.23
saxpy/default/Float64/2048 8.6 ± 1.2 μs 9.83 ± 1.2 μs 0.874 ± 0.17
saxpy/default/Float64/256 8.44 ± 0.98 μs 9.67 ± 1.2 μs 0.873 ± 0.15
saxpy/default/Float64/262144 0.138 ± 0.019 ms 0.15 ± 0.017 ms 0.924 ± 0.16
saxpy/default/Float64/32768 24.8 ± 3.9 μs 25.8 ± 3.4 μs 0.962 ± 0.2
saxpy/default/Float64/4096 9.29 ± 1 μs 9.91 ± 1.4 μs 0.937 ± 0.17
saxpy/default/Float64/512 8.49 ± 1.1 μs 9.54 ± 1.1 μs 0.89 ± 0.15
saxpy/default/Float64/64 6.95 ± 1.3 μs 7.95 ± 1.2 μs 0.874 ± 0.2
saxpy/default/Float64/65536 0.0349 ± 0.013 ms 0.034 ± 0.0047 ms 1.03 ± 0.41
saxpy/static workgroup=(1024,)/Float16/1024 9.28 ± 1.2 μs 9.93 ± 1 μs 0.935 ± 0.16
saxpy/static workgroup=(1024,)/Float16/1048576 0.356 ± 0.034 ms 0.365 ± 0.028 ms 0.976 ± 0.12
saxpy/static workgroup=(1024,)/Float16/16384 14.6 ± 0.75 μs 15.2 ± 1.2 μs 0.964 ± 0.09
saxpy/static workgroup=(1024,)/Float16/2048 9.29 ± 0.87 μs 10.1 ± 1.1 μs 0.923 ± 0.13
saxpy/static workgroup=(1024,)/Float16/256 7.86 ± 1.3 μs 8.36 ± 1.3 μs 0.94 ± 0.22
saxpy/static workgroup=(1024,)/Float16/262144 0.103 ± 0.01 ms 0.112 ± 0.013 ms 0.917 ± 0.14
saxpy/static workgroup=(1024,)/Float16/32768 19.5 ± 1.3 μs 19.5 ± 0.7 μs 1 ± 0.074
saxpy/static workgroup=(1024,)/Float16/4096 10 ± 1.2 μs 10.7 ± 1.1 μs 0.933 ± 0.15
saxpy/static workgroup=(1024,)/Float16/512 7.5 ± 1.4 μs 8.65 ± 1.3 μs 0.867 ± 0.21
saxpy/static workgroup=(1024,)/Float16/64 8.19 ± 1.4 μs 8.23 ± 1.2 μs 0.994 ± 0.22
saxpy/static workgroup=(1024,)/Float16/65536 28.7 ± 1.1 μs 29.4 ± 1.1 μs 0.975 ± 0.053
saxpy/static workgroup=(1024,)/Float32/1024 8.77 ± 0.91 μs 9.32 ± 1.3 μs 0.941 ± 0.16
saxpy/static workgroup=(1024,)/Float32/1048576 0.318 ± 0.064 ms 0.393 ± 0.094 ms 0.809 ± 0.25
saxpy/static workgroup=(1024,)/Float32/16384 11.3 ± 1.3 μs 14.4 ± 1.1 μs 0.781 ± 0.11
saxpy/static workgroup=(1024,)/Float32/2048 9.03 ± 0.92 μs 9.71 ± 1.3 μs 0.929 ± 0.15
saxpy/static workgroup=(1024,)/Float32/256 7.8 ± 1.3 μs 7.99 ± 1.2 μs 0.976 ± 0.22
saxpy/static workgroup=(1024,)/Float32/262144 0.0885 ± 0.033 ms 0.1 ± 0.032 ms 0.882 ± 0.43
saxpy/static workgroup=(1024,)/Float32/32768 16.3 ± 1.6 μs 18.7 ± 1.4 μs 0.872 ± 0.11
saxpy/static workgroup=(1024,)/Float32/4096 9.07 ± 0.97 μs 9.96 ± 1.1 μs 0.91 ± 0.14
saxpy/static workgroup=(1024,)/Float32/512 8.99 ± 0.86 μs 9.51 ± 1 μs 0.945 ± 0.13
saxpy/static workgroup=(1024,)/Float32/64 7.78 ± 1.3 μs 8.07 ± 1.2 μs 0.964 ± 0.21
saxpy/static workgroup=(1024,)/Float32/65536 24.9 ± 4 μs 25.8 ± 4.3 μs 0.964 ± 0.22
saxpy/static workgroup=(1024,)/Float64/1024 9.02 ± 1 μs 9.78 ± 1.1 μs 0.922 ± 0.15
saxpy/static workgroup=(1024,)/Float64/1048576 0.723 ± 0.11 ms 0.629 ± 0.11 ms 1.15 ± 0.27
saxpy/static workgroup=(1024,)/Float64/16384 12.3 ± 1.4 μs 12.7 ± 1.7 μs 0.968 ± 0.17
saxpy/static workgroup=(1024,)/Float64/2048 9.03 ± 1.1 μs 9.47 ± 1.1 μs 0.954 ± 0.16
saxpy/static workgroup=(1024,)/Float64/256 9.27 ± 17 μs 9.95 ± 17 μs 0.931 ± 2.3
saxpy/static workgroup=(1024,)/Float64/262144 0.137 ± 0.02 ms 0.141 ± 0.017 ms 0.973 ± 0.18
saxpy/static workgroup=(1024,)/Float64/32768 24.1 ± 5 μs 24.6 ± 4.6 μs 0.979 ± 0.28
saxpy/static workgroup=(1024,)/Float64/4096 9.46 ± 1.3 μs 10.2 ± 1.1 μs 0.932 ± 0.16
saxpy/static workgroup=(1024,)/Float64/512 8.86 ± 0.97 μs 9.37 ± 1.1 μs 0.945 ± 0.15
saxpy/static workgroup=(1024,)/Float64/64 7.35 ± 1.2 μs 8 ± 1.3 μs 0.92 ± 0.21
saxpy/static workgroup=(1024,)/Float64/65536 0.0346 ± 0.013 ms 0.0335 ± 0.0057 ms 1.03 ± 0.43
time_to_load 0.408 ± 0.013 s 0.417 ± 0.013 s 0.979 ± 0.044
main 0bf46d3... main / 0bf46d3...
const/@Const/Float32/262144 0 allocs: 0 B 0 allocs: 0 B
const/@Const/Float32/65536 0 allocs: 0 B 0 allocs: 0 B
const/@Const/Float64/262144 0 allocs: 0 B 0 allocs: 0 B
const/@Const/Float64/65536 0 allocs: 0 B 0 allocs: 0 B
const/unmarked/Float32/262144 0 allocs: 0 B 0 allocs: 0 B
const/unmarked/Float32/65536 0 allocs: 0 B 0 allocs: 0 B
const/unmarked/Float64/262144 0 allocs: 0 B 0 allocs: 0 B
const/unmarked/Float64/65536 0 allocs: 0 B 0 allocs: 0 B
dgsem/2D/Float32/fluxdiff/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/2D/Float32/fluxdiff/node E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/fluxdiff/node halfsweep E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/fluxdiff/node halfsweep v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/weak/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/2D/Float32/weak/element private 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/2D/Float32/weak/node localmem E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/weak/node localmem E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/weak/node localmem v-last E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/weak/node localmem v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float32/weak/node recompute E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/fluxdiff/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/2D/Float64/fluxdiff/node E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/fluxdiff/node halfsweep E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/fluxdiff/node halfsweep v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/weak/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/2D/Float64/weak/element private 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/2D/Float64/weak/node localmem E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/weak/node localmem E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/weak/node localmem v-last E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/weak/node localmem v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/2D/Float64/weak/node recompute E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/fluxdiff/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/3D/Float32/fluxdiff/node E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float32/fluxdiff/node halfsweep E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float32/fluxdiff/node halfsweep v-last E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float32/weak/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/3D/Float32/weak/element private 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/3D/Float32/weak/node localmem E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float32/weak/node localmem E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float32/weak/node localmem v-last E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float32/weak/node localmem v-last E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float32/weak/node recompute E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float32/weak/slab E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab double-buffered E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab double-buffered E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab double-buffered v-last E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab double-buffered v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab v-last E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float32/weak/slab v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/fluxdiff/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/3D/Float64/fluxdiff/node E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float64/fluxdiff/node halfsweep E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float64/fluxdiff/node halfsweep v-last E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float64/weak/element 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/3D/Float64/weak/element private 1 allocs: 16 B 1 allocs: 16 B 1
dgsem/3D/Float64/weak/node localmem E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float64/weak/node localmem E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float64/weak/node localmem v-last E=1 4 allocs: 0.188 kB 1 allocs: 0.0469 kB 4
dgsem/3D/Float64/weak/node localmem v-last E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float64/weak/node recompute E=2 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
dgsem/3D/Float64/weak/slab E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab double-buffered E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab double-buffered E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab double-buffered v-last E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab double-buffered v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab v-last E=1 1 allocs: 32 B 1 allocs: 32 B 1
dgsem/3D/Float64/weak/slab v-last E=8 1 allocs: 32 B 1 allocs: 32 B 1
launch/3D static workgroup, dynamic ndrange 4 allocs: 0.125 kB 4 allocs: 0.125 kB 1
launch/3D static workgroup, static ndrange 4 allocs: 0.125 kB 4 allocs: 0.125 kB 1
launch/dynamic workgroup, dynamic ndrange 0 allocs: 0 B 0 allocs: 0 B
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 0 allocs: 0 B 0 allocs: 0 B
launch/static workgroup, dynamic ndrange 0 allocs: 0 B 0 allocs: 0 B
launch/static workgroup, static ndrange 0 allocs: 0 B 0 allocs: 0 B
narrow workgroup/masked/W=16 0 allocs: 0 B 0 allocs: 0 B
narrow workgroup/masked/W=4 0 allocs: 0 B 0 allocs: 0 B
narrow workgroup/unmasked/W=16 0 allocs: 0 B 0 allocs: 0 B
narrow workgroup/unmasked/W=4 0 allocs: 0 B 0 allocs: 0 B
partition/dynamic workgroup, dynamic ndrange 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
partition/static workgroup, dynamic ndrange 2 allocs: 32 B 2 allocs: 32 B 1
partition/static workgroup, static ndrange 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float16/1024 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/1048576 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/16384 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/2048 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/256 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float16/262144 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/32768 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/4096 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/512 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float16/64 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float16/65536 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/1024 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/1048576 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/16384 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/2048 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/256 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float32/262144 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/32768 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/4096 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/512 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float32/64 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float32/65536 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/1024 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/1048576 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/16384 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/2048 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/256 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float64/262144 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/32768 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/4096 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/512 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/default/Float64/64 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float64/65536 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/1024 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/1048576 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/16384 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/2048 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/256 0 allocs: 0 B 0 allocs: 0 B
saxpy/static workgroup=(1024,)/Float16/262144 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/32768 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/4096 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/512 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float16/64 0 allocs: 0 B 0 allocs: 0 B
saxpy/static workgroup=(1024,)/Float16/65536 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/1024 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/1048576 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/16384 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/2048 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/256 0 allocs: 0 B 0 allocs: 0 B
saxpy/static workgroup=(1024,)/Float32/262144 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/32768 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/4096 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/512 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float32/64 0 allocs: 0 B 0 allocs: 0 B
saxpy/static workgroup=(1024,)/Float32/65536 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/1024 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/1048576 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/16384 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/2048 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/256 0 allocs: 0 B 0 allocs: 0 B
saxpy/static workgroup=(1024,)/Float64/262144 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/32768 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/4096 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/512 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
saxpy/static workgroup=(1024,)/Float64/64 0 allocs: 0 B 0 allocs: 0 B
saxpy/static workgroup=(1024,)/Float64/65536 3 allocs: 0.0469 kB 3 allocs: 0.0469 kB 1
time_to_load 0.2 k allocs: 11.8 kB 0.2 k allocs: 11.8 kB 1

Benchmark Plots

A plot of the benchmark results have been uploaded as an artifact to the workflow run for this PR.
Go to "Actions"->"Benchmark a pull request"->[the most recent run]->"Artifacts" (at the bottom).

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant