Skip to content

Keep kernel macro and POCL device code concretely typed - #914

Merged
maleadt merged 1 commit into
mainfrom
tb/invalidations
Oct 22, 2026
Merged

maleadt merged 1 commit into
mainfrom
tb/invalidations

Conversation

@maleadt

@maleadt maleadt commented Oct 21, 2026

Copy link
Copy Markdown
Member

Packages loaded before KernelAbstractions that extend generic Base functions (e.g. ChainRulesCore's mapreduce for thunks and its promote_rule) invalidate precompiled KernelAbstractions code that calls those functions on values of unknown type, so Julia recompiles it on first use. Three places did that: default_forwarders! reduced over def[:args] from an untyped Dict, split_branches sliced an untyped expression, and the POCL back-end's default_sub_group_size spliced the untyped result of the device's getproperty into an array literal. The last one is on the CPU back-end's launch path, so with ChainRulesCore loaded first it was recompiled for every session's first kernel, together with its callers. This asserts the (known) types at those three places.

This is part of a series addressing JuliaGPU/GPUCompiler.jl#1048 (with JuliaGPU/GPUCompiler.jl#1052, JuliaLLVM/LLVM.jl#702 and maleadt/CompilerCaching.jl#33). With all of them, the first CPU kernel with ChainRulesCore loaded first goes from 2.51 s to 1.09 s (0.78 s without ChainRulesCore). Tested with the test suite on Julia 1.13.

The launch path still infers some abstract types when kernels are launched with abstractly-typed arguments (e.g. partition and normalize_workgroupsize from AcceleratedKernels' generic backends); I'll look at normalizing those at the launch boundary separately.

@maleadt maleadt added the latency Compile time, load time, time-to-first-execution, invalidations. label Oct 21, 2026
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main 4b72f59... main / 4b72f59...
const/@Const/Float32/262144 0.243 ± 0.0093 ms 0.249 ± 0.0098 ms 0.974 ± 0.053
const/@Const/Float32/65536 0.0788 ± 0.0021 ms 0.0779 ± 0.0031 ms 1.01 ± 0.049
const/@Const/Float64/262144 0.43 ± 0.014 ms 0.436 ± 0.014 ms 0.986 ± 0.045
const/@Const/Float64/65536 0.126 ± 0.0034 ms 0.125 ± 0.0062 ms 1.01 ± 0.057
const/unmarked/Float32/262144 0.326 ± 0.013 ms 0.339 ± 0.015 ms 0.962 ± 0.057
const/unmarked/Float32/65536 0.0984 ± 0.011 ms 0.099 ± 0.012 ms 0.995 ± 0.16
const/unmarked/Float64/262144 0.6 ± 0.022 ms 0.628 ± 0.021 ms 0.956 ± 0.048
const/unmarked/Float64/65536 0.17 ± 0.013 ms 0.17 ± 0.013 ms 1 ± 0.11
dgsem/2D/Float32/fluxdiff/element 0.336 ± 0.013 ms 0.314 ± 0.013 ms 1.07 ± 0.06
dgsem/2D/Float32/fluxdiff/node E=8 0.453 ± 0.014 ms 0.431 ± 0.012 ms 1.05 ± 0.044
dgsem/2D/Float32/fluxdiff/node halfsweep E=8 0.335 ± 0.014 ms 0.319 ± 0.014 ms 1.05 ± 0.065
dgsem/2D/Float32/fluxdiff/node halfsweep v-last E=8 0.345 ± 0.015 ms 0.333 ± 0.015 ms 1.03 ± 0.065
dgsem/2D/Float32/weak/element 0.112 ± 0.0072 ms 0.107 ± 0.0069 ms 1.04 ± 0.095
dgsem/2D/Float32/weak/element private 0.119 ± 0.0075 ms 0.117 ± 0.0049 ms 1.01 ± 0.077
dgsem/2D/Float32/weak/node localmem E=1 0.103 ± 0.0097 ms 0.0995 ± 0.0083 ms 1.04 ± 0.13
dgsem/2D/Float32/weak/node localmem E=8 0.103 ± 0.01 ms 0.099 ± 0.015 ms 1.04 ± 0.18
dgsem/2D/Float32/weak/node localmem v-last E=1 0.159 ± 0.0063 ms 0.161 ± 0.011 ms 0.987 ± 0.075
dgsem/2D/Float32/weak/node localmem v-last E=8 0.162 ± 0.0089 ms 0.153 ± 0.011 ms 1.06 ± 0.097
dgsem/2D/Float32/weak/node recompute E=8 0.289 ± 0.013 ms 0.279 ± 0.0093 ms 1.04 ± 0.058
dgsem/2D/Float64/fluxdiff/element 0.347 ± 0.013 ms 0.332 ± 0.014 ms 1.05 ± 0.058
dgsem/2D/Float64/fluxdiff/node E=8 0.487 ± 0.013 ms 0.474 ± 0.015 ms 1.03 ± 0.043
dgsem/2D/Float64/fluxdiff/node halfsweep E=8 0.362 ± 0.016 ms 0.347 ± 0.014 ms 1.04 ± 0.063
dgsem/2D/Float64/fluxdiff/node halfsweep v-last E=8 0.346 ± 0.014 ms 0.35 ± 0.02 ms 0.988 ± 0.069
dgsem/2D/Float64/weak/element 0.119 ± 0.0096 ms 0.12 ± 0.0069 ms 0.993 ± 0.098
dgsem/2D/Float64/weak/element private 0.131 ± 0.0076 ms 0.129 ± 0.0089 ms 1.01 ± 0.091
dgsem/2D/Float64/weak/node localmem E=1 0.106 ± 0.013 ms 0.101 ± 0.014 ms 1.05 ± 0.19
dgsem/2D/Float64/weak/node localmem E=8 0.104 ± 0.0044 ms 0.101 ± 0.015 ms 1.02 ± 0.16
dgsem/2D/Float64/weak/node localmem v-last E=1 0.16 ± 0.0049 ms 0.166 ± 0.008 ms 0.963 ± 0.055
dgsem/2D/Float64/weak/node localmem v-last E=8 0.159 ± 0.011 ms 0.156 ± 0.01 ms 1.02 ± 0.095
dgsem/2D/Float64/weak/node recompute E=8 0.399 ± 0.012 ms 0.386 ± 0.012 ms 1.03 ± 0.044
dgsem/3D/Float32/fluxdiff/element 1.11 ± 0.013 ms 1.1 ± 0.02 ms 1.01 ± 0.022
dgsem/3D/Float32/fluxdiff/node E=2 1.84 ± 0.045 ms 1.86 ± 0.025 ms 0.989 ± 0.027
dgsem/3D/Float32/fluxdiff/node halfsweep E=1 1.17 ± 0.019 ms 1.17 ± 0.014 ms 1 ± 0.02
dgsem/3D/Float32/fluxdiff/node halfsweep v-last E=1 1.39 ± 0.027 ms 1.31 ± 0.035 ms 1.06 ± 0.035
dgsem/3D/Float32/weak/element 0.417 ± 0.014 ms 0.397 ± 0.012 ms 1.05 ± 0.047
dgsem/3D/Float32/weak/element private 0.428 ± 0.014 ms 0.399 ± 0.011 ms 1.07 ± 0.048
dgsem/3D/Float32/weak/node localmem E=1 0.546 ± 0.016 ms 0.526 ± 0.017 ms 1.04 ± 0.045
dgsem/3D/Float32/weak/node localmem E=2 0.558 ± 0.016 ms 0.544 ± 0.016 ms 1.03 ± 0.042
dgsem/3D/Float32/weak/node localmem v-last E=1 0.824 ± 0.021 ms 0.785 ± 0.034 ms 1.05 ± 0.053
dgsem/3D/Float32/weak/node localmem v-last E=2 0.84 ± 0.02 ms 0.807 ± 0.029 ms 1.04 ± 0.045
dgsem/3D/Float32/weak/node recompute E=2 1.32 ± 0.016 ms 1.31 ± 0.011 ms 1 ± 0.015
dgsem/3D/Float32/weak/slab E=1 1.47 ± 0.025 ms 1.45 ± 0.048 ms 1.01 ± 0.038
dgsem/3D/Float32/weak/slab E=8 4.35 ± 0.19 ms 4.23 ± 0.13 ms 1.03 ± 0.055
dgsem/3D/Float32/weak/slab double-buffered E=1 0.94 ± 0.013 ms 0.926 ± 0.04 ms 1.02 ± 0.046
dgsem/3D/Float32/weak/slab double-buffered E=8 1.06 ± 0.019 ms 1.04 ± 0.015 ms 1.02 ± 0.023
dgsem/3D/Float32/weak/slab double-buffered v-last E=1 0.935 ± 0.015 ms 0.917 ± 0.017 ms 1.02 ± 0.025
dgsem/3D/Float32/weak/slab double-buffered v-last E=8 1.05 ± 0.022 ms 1.01 ± 0.03 ms 1.04 ± 0.038
dgsem/3D/Float32/weak/slab v-last E=1 1.51 ± 0.036 ms 1.49 ± 0.024 ms 1.01 ± 0.029
dgsem/3D/Float32/weak/slab v-last E=8 4.25 ± 0.085 ms 3.87 ± 0.071 ms 1.1 ± 0.03
dgsem/3D/Float64/fluxdiff/element 1.18 ± 0.011 ms 1.23 ± 0.02 ms 0.957 ± 0.018
dgsem/3D/Float64/fluxdiff/node E=2 1.97 ± 0.021 ms 2.04 ± 0.03 ms 0.966 ± 0.017
dgsem/3D/Float64/fluxdiff/node halfsweep E=1 1.19 ± 0.015 ms 1.24 ± 0.011 ms 0.963 ± 0.015
dgsem/3D/Float64/fluxdiff/node halfsweep v-last E=1 1.42 ± 0.086 ms 1.37 ± 0.028 ms 1.03 ± 0.066
dgsem/3D/Float64/weak/element 0.493 ± 0.014 ms 0.51 ± 0.015 ms 0.968 ± 0.039
dgsem/3D/Float64/weak/element private 0.505 ± 0.014 ms 0.486 ± 0.033 ms 1.04 ± 0.075
dgsem/3D/Float64/weak/node localmem E=1 0.588 ± 0.015 ms 0.609 ± 0.015 ms 0.966 ± 0.035
dgsem/3D/Float64/weak/node localmem E=2 0.597 ± 0.015 ms 0.615 ± 0.018 ms 0.971 ± 0.038
dgsem/3D/Float64/weak/node localmem v-last E=1 0.831 ± 0.022 ms 0.797 ± 0.022 ms 1.04 ± 0.04
dgsem/3D/Float64/weak/node localmem v-last E=2 0.862 ± 0.017 ms 0.851 ± 0.045 ms 1.01 ± 0.058
dgsem/3D/Float64/weak/node recompute E=2 1.42 ± 0.037 ms 1.34 ± 0.044 ms 1.07 ± 0.045
dgsem/3D/Float64/weak/slab E=1 1.57 ± 0.019 ms 1.43 ± 0.0085 ms 1.1 ± 0.015
dgsem/3D/Float64/weak/slab E=8 4.91 ± 0.37 ms 4.01 ± 0.27 ms 1.22 ± 0.12
dgsem/3D/Float64/weak/slab double-buffered E=1 0.923 ± 0.027 ms 0.98 ± 0.012 ms 0.941 ± 0.03
dgsem/3D/Float64/weak/slab double-buffered E=8 1.09 ± 0.021 ms 1.11 ± 0.02 ms 0.978 ± 0.026
dgsem/3D/Float64/weak/slab double-buffered v-last E=1 0.966 ± 0.014 ms 1.01 ± 0.016 ms 0.958 ± 0.02
dgsem/3D/Float64/weak/slab double-buffered v-last E=8 1.09 ± 0.022 ms 1.1 ± 0.02 ms 0.986 ± 0.027
dgsem/3D/Float64/weak/slab v-last E=1 1.56 ± 0.024 ms 1.58 ± 0.016 ms 0.988 ± 0.018
dgsem/3D/Float64/weak/slab v-last E=8 4.81 ± 0.43 ms 4.17 ± 0.24 ms 1.15 ± 0.12
launch/3D static workgroup, dynamic ndrange 6.44 ± 0.4 μs 6.41 ± 0.39 μs 1 ± 0.088
launch/3D static workgroup, static ndrange 6.64 ± 0.72 μs 6.78 ± 1.1 μs 0.98 ± 0.19
launch/dynamic workgroup, dynamic ndrange 6.11 ± 0.53 μs 6.11 ± 0.65 μs 0.999 ± 0.14
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 6.44 ± 0.64 μs 5.8 ± 0.46 μs 1.11 ± 0.14
launch/static workgroup, dynamic ndrange 6.23 ± 0.47 μs 6.68 ± 0.83 μs 0.932 ± 0.14
launch/static workgroup, static ndrange 6.74 ± 0.73 μs 6.22 ± 0.49 μs 1.08 ± 0.14
narrow workgroup/masked/W=16 0.286 ± 0.015 ms 0.308 ± 0.031 ms 0.929 ± 0.1
narrow workgroup/masked/W=4 0.297 ± 0.022 ms 0.307 ± 0.045 ms 0.969 ± 0.16
narrow workgroup/unmasked/W=16 0.275 ± 0.011 ms 0.279 ± 0.012 ms 0.983 ± 0.056
narrow workgroup/unmasked/W=4 0.28 ± 0.012 ms 0.277 ± 0.011 ms 1.01 ± 0.06
partition/dynamic workgroup, dynamic ndrange 0.054 ± 0.021 μs 0.0527 ± 0.021 μs 1.02 ± 0.57
partition/static workgroup, dynamic ndrange 0.0447 ± 0.0095 μs 0.0431 ± 0.0096 μs 1.04 ± 0.32
partition/static workgroup, static ndrange 1.65 ± 0.01 ns 1.18 ± 0.01 ns 1.4 ± 0.015
saxpy/default/Float16/1024 7.38 ± 0.77 μs 7.5 ± 0.32 μs 0.984 ± 0.11
saxpy/default/Float16/1048576 0.377 ± 0.033 ms 0.402 ± 0.04 ms 0.938 ± 0.12
saxpy/default/Float16/16384 13.6 ± 0.5 μs 13.8 ± 0.49 μs 0.983 ± 0.05
saxpy/default/Float16/2048 7.53 ± 0.41 μs 8.56 ± 1.3 μs 0.879 ± 0.14
saxpy/default/Float16/256 7.37 ± 1.5 μs 7.43 ± 0.88 μs 0.993 ± 0.23
saxpy/default/Float16/262144 0.117 ± 0.018 ms 0.117 ± 0.02 ms 0.996 ± 0.23
saxpy/default/Float16/32768 18.7 ± 0.65 μs 19.3 ± 2.1 μs 0.966 ± 0.11
saxpy/default/Float16/4096 8.21 ± 0.37 μs 8.58 ± 0.33 μs 0.957 ± 0.057
saxpy/default/Float16/512 6.95 ± 0.7 μs 8.63 ± 1.6 μs 0.804 ± 0.17
saxpy/default/Float16/64 7.6 ± 1.2 μs 7.45 ± 1.2 μs 1.02 ± 0.23
saxpy/default/Float16/65536 29 ± 1.3 μs 29.4 ± 4.7 μs 0.988 ± 0.16
saxpy/default/Float32/1024 7.23 ± 0.39 μs 7.68 ± 1 μs 0.942 ± 0.14
saxpy/default/Float32/1048576 0.403 ± 0.06 ms 0.418 ± 0.081 ms 0.965 ± 0.24
saxpy/default/Float32/16384 9.77 ± 0.44 μs 9.95 ± 0.37 μs 0.983 ± 0.057
saxpy/default/Float32/2048 7.21 ± 0.37 μs 7.45 ± 0.37 μs 0.969 ± 0.069
saxpy/default/Float32/256 7.04 ± 0.69 μs 7.49 ± 1.2 μs 0.94 ± 0.18
saxpy/default/Float32/262144 0.104 ± 0.078 ms 0.101 ± 0.058 ms 1.02 ± 0.97
saxpy/default/Float32/32768 16.5 ± 1.8 μs 17.1 ± 1.7 μs 0.963 ± 0.14
saxpy/default/Float32/4096 7.65 ± 0.53 μs 7.7 ± 0.4 μs 0.993 ± 0.087
saxpy/default/Float32/512 7.01 ± 0.38 μs 7.17 ± 0.3 μs 0.978 ± 0.067
saxpy/default/Float32/64 7.03 ± 0.67 μs 6.84 ± 0.7 μs 1.03 ± 0.14
saxpy/default/Float32/65536 25.5 ± 3.8 μs 25.9 ± 3.2 μs 0.983 ± 0.19
saxpy/default/Float64/1024 7.67 ± 0.35 μs 7.3 ± 0.45 μs 1.05 ± 0.08
saxpy/default/Float64/1048576 0.733 ± 0.12 ms 0.882 ± 0.15 ms 0.831 ± 0.2
saxpy/default/Float64/16384 10.9 ± 0.75 μs 11.4 ± 0.68 μs 0.952 ± 0.086
saxpy/default/Float64/2048 7.92 ± 0.45 μs 7.55 ± 0.44 μs 1.05 ± 0.085
saxpy/default/Float64/256 7.16 ± 1.2 μs 7.49 ± 1 μs 0.956 ± 0.2
saxpy/default/Float64/262144 0.148 ± 0.02 ms 0.157 ± 0.023 ms 0.944 ± 0.19
saxpy/default/Float64/32768 23.5 ± 4 μs 25.4 ± 3.2 μs 0.925 ± 0.2
saxpy/default/Float64/4096 8.22 ± 0.34 μs 7.91 ± 0.5 μs 1.04 ± 0.078
saxpy/default/Float64/512 7.58 ± 0.3 μs 7.33 ± 1.1 μs 1.03 ± 0.16
saxpy/default/Float64/64 6.74 ± 0.55 μs 7.22 ± 1.1 μs 0.934 ± 0.16
saxpy/default/Float64/65536 0.0343 ± 0.0082 ms 0.0356 ± 0.0057 ms 0.963 ± 0.28
saxpy/static workgroup=(1024,)/Float16/1024 7.36 ± 1.2 μs 7.19 ± 1.3 μs 1.02 ± 0.25
saxpy/static workgroup=(1024,)/Float16/1048576 0.358 ± 0.031 ms 0.361 ± 0.037 ms 0.992 ± 0.13
saxpy/static workgroup=(1024,)/Float16/16384 13.4 ± 0.56 μs 13.6 ± 0.48 μs 0.983 ± 0.054
saxpy/static workgroup=(1024,)/Float16/2048 7.58 ± 0.85 μs 7.59 ± 0.36 μs 0.998 ± 0.12
saxpy/static workgroup=(1024,)/Float16/256 7.4 ± 0.74 μs 7.62 ± 1.5 μs 0.971 ± 0.21
saxpy/static workgroup=(1024,)/Float16/262144 0.112 ± 0.019 ms 0.11 ± 0.02 ms 1.02 ± 0.25
saxpy/static workgroup=(1024,)/Float16/32768 18 ± 0.57 μs 18.3 ± 2.1 μs 0.986 ± 0.12
saxpy/static workgroup=(1024,)/Float16/4096 8.24 ± 0.46 μs 8.73 ± 1.3 μs 0.944 ± 0.15
saxpy/static workgroup=(1024,)/Float16/512 7.53 ± 0.69 μs 7.48 ± 0.72 μs 1.01 ± 0.13
saxpy/static workgroup=(1024,)/Float16/64 7.43 ± 0.49 μs 7.41 ± 1 μs 1 ± 0.16
saxpy/static workgroup=(1024,)/Float16/65536 27.6 ± 0.97 μs 27.6 ± 0.74 μs 1 ± 0.044
saxpy/static workgroup=(1024,)/Float32/1024 7.33 ± 0.42 μs 7.06 ± 0.34 μs 1.04 ± 0.078
saxpy/static workgroup=(1024,)/Float32/1048576 0.385 ± 0.085 ms 0.398 ± 0.082 ms 0.968 ± 0.29
saxpy/static workgroup=(1024,)/Float32/16384 9.68 ± 1 μs 9.66 ± 1.1 μs 1 ± 0.15
saxpy/static workgroup=(1024,)/Float32/2048 7.09 ± 0.35 μs 7.18 ± 0.37 μs 0.988 ± 0.07
saxpy/static workgroup=(1024,)/Float32/256 7.46 ± 0.66 μs 7.28 ± 0.67 μs 1.03 ± 0.13
saxpy/static workgroup=(1024,)/Float32/262144 0.0952 ± 0.058 ms 0.0968 ± 0.036 ms 0.983 ± 0.7
saxpy/static workgroup=(1024,)/Float32/32768 16.3 ± 0.83 μs 16 ± 1.4 μs 1.02 ± 0.1
saxpy/static workgroup=(1024,)/Float32/4096 7.68 ± 0.44 μs 7.44 ± 0.45 μs 1.03 ± 0.086
saxpy/static workgroup=(1024,)/Float32/512 6.96 ± 0.34 μs 8.37 ± 0.52 μs 0.832 ± 0.066
saxpy/static workgroup=(1024,)/Float32/64 7.21 ± 0.55 μs 7.23 ± 0.62 μs 0.997 ± 0.11
saxpy/static workgroup=(1024,)/Float32/65536 24.4 ± 0.96 μs 23.5 ± 4.2 μs 1.04 ± 0.19
saxpy/static workgroup=(1024,)/Float64/1024 6.93 ± 0.38 μs 7.31 ± 1.3 μs 0.947 ± 0.17
saxpy/static workgroup=(1024,)/Float64/1048576 0.707 ± 0.096 ms 0.766 ± 0.14 ms 0.923 ± 0.21
saxpy/static workgroup=(1024,)/Float64/16384 10.2 ± 1.3 μs 10.2 ± 1.1 μs 0.998 ± 0.16
saxpy/static workgroup=(1024,)/Float64/2048 7.23 ± 0.57 μs 7.32 ± 0.4 μs 0.989 ± 0.094
saxpy/static workgroup=(1024,)/Float64/256 7.62 ± 18 μs 7.32 ± 18 μs 1.04 ± 3.6
saxpy/static workgroup=(1024,)/Float64/262144 0.141 ± 0.019 ms 0.144 ± 0.023 ms 0.98 ± 0.2
saxpy/static workgroup=(1024,)/Float64/32768 23 ± 5 μs 23.6 ± 5.1 μs 0.973 ± 0.3
saxpy/static workgroup=(1024,)/Float64/4096 8.69 ± 0.56 μs 7.71 ± 0.38 μs 1.13 ± 0.091
saxpy/static workgroup=(1024,)/Float64/512 7.05 ± 0.4 μs 7.07 ± 0.32 μs 0.997 ± 0.073
saxpy/static workgroup=(1024,)/Float64/64 7.28 ± 0.46 μs 7.18 ± 0.56 μs 1.01 ± 0.1
saxpy/static workgroup=(1024,)/Float64/65536 0.0339 ± 0.0065 ms 0.0334 ± 0.0064 ms 1.02 ± 0.28
time_to_load 0.455 ± 0.032 s 0.388 ± 0.0069 s 1.17 ± 0.084
main 4b72f59... main / 4b72f59...
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 4 allocs: 0.188 kB 1
dgsem/3D/Float32/fluxdiff/node halfsweep v-last E=1 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
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 4 allocs: 0.188 kB 1
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 4 allocs: 0.188 kB 1
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 4 allocs: 0.188 kB 1
dgsem/3D/Float64/fluxdiff/node halfsweep v-last E=1 4 allocs: 0.188 kB 4 allocs: 0.188 kB 1
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 4 allocs: 0.188 kB 1
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 4 allocs: 0.188 kB 1
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).

`default_forwarders!` reduced over a value of unknown type, `split_branches`
sliced one, and `default_sub_group_size` spliced the untyped result of the
device's `getproperty` into an array literal. That compiled them with edges to
generic Base methods that packages loaded before KernelAbstractions invalidate
(e.g. ChainRulesCore's `mapreduce` and `promote_rule` methods), making Julia
discard their precompiled code, and that of the POCL back-end's launch path,
when loading KernelAbstractions.
@codecov

codecov Bot commented Oct 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.73%. Comparing base (ddd7c49) to head (4b72f59).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #914   +/-   ##
=======================================
  Coverage   82.73%   82.73%           
=======================================
  Files          28       28           
  Lines        2461     2461           
=======================================
  Hits         2036     2036           
  Misses        425      425           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@maleadt
maleadt merged commit 5b27d8f into main Oct 22, 2026
69 checks passed
@maleadt
maleadt deleted the tb/invalidations branch October 22, 2026 10:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

latency Compile time, load time, time-to-first-execution, invalidations.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants