Skip to content

Keep the OpenCL queries of the POCL back-end concretely typed - #915

Merged
maleadt merged 2 commits into
mainfrom
tb/invalidations-2
Oct 22, 2026
Merged

maleadt merged 2 commits into
mainfrom
tb/invalidations-2

Conversation

@maleadt

@maleadt maleadt commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Follow-up to #914. The POCL back-end's OpenCL wrapper queried scalar device and kernel properties with local helpers that took the property's type as a value (get_scalar(prop, cl_uint)), which Julia doesn't specialize on, so Ref{typ}() and the ccalls it was passed to were inferred with arguments of unknown type. getproperty also used the (untyped) result of querying other properties of the same object, e.g. p.num_devices to size a buffer. Those ccalls were then compiled with edges to generic conversion methods, like CEnum's cconvert (loaded through LLVM.jl), and as these queries run when launching a kernel on the CPU back-end, Julia recompiled that path for the first kernel whenever a package extending those methods (e.g. DataFrames' dependencies) was loaded first.

This specializes the helpers on the property type, and asserts the types of the nested property queries.

Tested with the test suite. With JuliaLLVM/LLVM.jl#703 and JuliaGPU/GPUCompiler.jl#1053, the first CPU kernel with DataFrames loaded first goes from 4.16 s on main to 1.47 s (0.71 s with nothing loaded first).

@maleadt maleadt added the latency Compile time, load time, time-to-first-execution, invalidations. label Oct 21, 2026
`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.
The local helpers that query scalar properties took the property's type as a
value, which Julia doesn't specialize on, and `getproperty` used the untyped
result of querying other properties of the same object. The OpenCL API calls
were then compiled with arguments of unknown type, and with edges to generic
conversion methods (e.g. CEnum's `cconvert`, loaded through LLVM.jl), which
packages invalidate. As these queries are made when launching a kernel on the
CPU back-end, Julia recompiled that path when such a package was loaded before
KernelAbstractions. Specialize the helpers on the type, and assert the types of
nested property queries.
@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main 185d448... main / 185d448...
const/@Const/Float32/262144 0.695 ± 0.014 ms 0.693 ± 0.012 ms 1 ± 0.027
const/@Const/Float32/65536 0.203 ± 0.011 ms 0.229 ± 0.0071 ms 0.888 ± 0.055
const/@Const/Float64/262144 0.909 ± 0.015 ms 0.906 ± 0.0093 ms 1 ± 0.019
const/@Const/Float64/65536 0.328 ± 0.014 ms 0.32 ± 0.013 ms 1.03 ± 0.061
const/unmarked/Float32/262144 2.92 ± 0.051 ms 2.86 ± 0.036 ms 1.02 ± 0.022
const/unmarked/Float32/65536 0.665 ± 0.016 ms 0.665 ± 0.016 ms 1 ± 0.034
const/unmarked/Float64/262144 3.34 ± 0.046 ms 3.33 ± 0.04 ms 1 ± 0.018
const/unmarked/Float64/65536 0.837 ± 0.011 ms 0.839 ± 0.012 ms 0.998 ± 0.019
dgsem/2D/Float32/fluxdiff/element 0.586 ± 0.018 ms 0.587 ± 0.017 ms 0.997 ± 0.041
dgsem/2D/Float32/fluxdiff/node E=8 0.764 ± 0.02 ms 0.76 ± 0.015 ms 1.01 ± 0.033
dgsem/2D/Float32/fluxdiff/node halfsweep E=8 0.576 ± 0.015 ms 0.587 ± 0.024 ms 0.981 ± 0.047
dgsem/2D/Float32/fluxdiff/node halfsweep v-last E=8 0.607 ± 0.022 ms 0.601 ± 0.013 ms 1.01 ± 0.043
dgsem/2D/Float32/weak/element 0.191 ± 0.015 ms 0.196 ± 0.016 ms 0.976 ± 0.11
dgsem/2D/Float32/weak/element private 0.21 ± 0.014 ms 0.208 ± 0.013 ms 1.01 ± 0.092
dgsem/2D/Float32/weak/node localmem E=1 0.182 ± 0.025 ms 0.181 ± 0.011 ms 1.01 ± 0.15
dgsem/2D/Float32/weak/node localmem E=8 0.175 ± 0.019 ms 0.172 ± 0.017 ms 1.02 ± 0.15
dgsem/2D/Float32/weak/node localmem v-last E=1 0.259 ± 0.018 ms 0.26 ± 0.021 ms 0.997 ± 0.1
dgsem/2D/Float32/weak/node localmem v-last E=8 0.249 ± 0.016 ms 0.249 ± 0.015 ms 1 ± 0.087
dgsem/2D/Float32/weak/node recompute E=8 0.499 ± 0.016 ms 0.505 ± 0.022 ms 0.988 ± 0.053
dgsem/2D/Float64/fluxdiff/element 0.615 ± 0.018 ms 0.621 ± 0.016 ms 0.99 ± 0.038
dgsem/2D/Float64/fluxdiff/node E=8 0.767 ± 0.022 ms 0.765 ± 0.009 ms 1 ± 0.032
dgsem/2D/Float64/fluxdiff/node halfsweep E=8 0.601 ± 0.018 ms 0.598 ± 0.014 ms 1 ± 0.037
dgsem/2D/Float64/fluxdiff/node halfsweep v-last E=8 0.645 ± 0.017 ms 0.64 ± 0.02 ms 1.01 ± 0.041
dgsem/2D/Float64/weak/element 0.224 ± 0.013 ms 0.227 ± 0.012 ms 0.984 ± 0.08
dgsem/2D/Float64/weak/element private 0.228 ± 0.012 ms 0.231 ± 0.013 ms 0.989 ± 0.077
dgsem/2D/Float64/weak/node localmem E=1 0.186 ± 0.011 ms 0.186 ± 0.0074 ms 0.998 ± 0.07
dgsem/2D/Float64/weak/node localmem E=8 0.177 ± 0.013 ms 0.192 ± 0.025 ms 0.919 ± 0.14
dgsem/2D/Float64/weak/node localmem v-last E=1 0.265 ± 0.012 ms 0.267 ± 0.017 ms 0.994 ± 0.08
dgsem/2D/Float64/weak/node localmem v-last E=8 0.259 ± 0.022 ms 0.257 ± 0.021 ms 1.01 ± 0.12
dgsem/2D/Float64/weak/node recompute E=8 0.637 ± 0.022 ms 0.632 ± 0.012 ms 1.01 ± 0.039
dgsem/3D/Float32/fluxdiff/element 2.09 ± 0.044 ms 2.1 ± 0.022 ms 0.999 ± 0.024
dgsem/3D/Float32/fluxdiff/node E=2 3.11 ± 0.033 ms 3.13 ± 0.034 ms 0.993 ± 0.015
dgsem/3D/Float32/fluxdiff/node halfsweep E=1 2.21 ± 0.01 ms 2.25 ± 0.026 ms 0.981 ± 0.012
dgsem/3D/Float32/fluxdiff/node halfsweep v-last E=1 2.11 ± 0.033 ms 2.1 ± 0.036 ms 1.01 ± 0.023
dgsem/3D/Float32/weak/element 0.677 ± 0.02 ms 0.677 ± 0.021 ms 0.999 ± 0.043
dgsem/3D/Float32/weak/element private 0.699 ± 0.016 ms 0.689 ± 0.012 ms 1.02 ± 0.029
dgsem/3D/Float32/weak/node localmem E=1 0.677 ± 0.017 ms 0.694 ± 0.032 ms 0.976 ± 0.051
dgsem/3D/Float32/weak/node localmem E=2 0.744 ± 0.014 ms 0.737 ± 0.018 ms 1.01 ± 0.031
dgsem/3D/Float32/weak/node localmem v-last E=1 0.901 ± 0.027 ms 0.902 ± 0.0062 ms 0.999 ± 0.03
dgsem/3D/Float32/weak/node localmem v-last E=2 1.06 ± 0.0058 ms 1.06 ± 0.0054 ms 1 ± 0.0075
dgsem/3D/Float32/weak/node recompute E=2 2.21 ± 0.036 ms 2.2 ± 0.032 ms 1 ± 0.022
dgsem/3D/Float32/weak/slab E=1 2.77 ± 0.019 ms 2.74 ± 0.028 ms 1.01 ± 0.013
dgsem/3D/Float32/weak/slab E=8 5.63 ± 0.11 ms 5.64 ± 0.099 ms 0.997 ± 0.026
dgsem/3D/Float32/weak/slab double-buffered E=1 1.66 ± 0.028 ms 1.65 ± 0.025 ms 1 ± 0.023
dgsem/3D/Float32/weak/slab double-buffered E=8 2.27 ± 0.033 ms 2.26 ± 0.036 ms 1.01 ± 0.022
dgsem/3D/Float32/weak/slab double-buffered v-last E=1 1.68 ± 0.03 ms 1.67 ± 0.0094 ms 1.01 ± 0.019
dgsem/3D/Float32/weak/slab double-buffered v-last E=8 2.42 ± 0.04 ms 2.33 ± 0.023 ms 1.04 ± 0.02
dgsem/3D/Float32/weak/slab v-last E=1 2.75 ± 0.044 ms 2.76 ± 0.037 ms 0.997 ± 0.021
dgsem/3D/Float32/weak/slab v-last E=8 5.75 ± 0.079 ms 5.77 ± 0.046 ms 0.997 ± 0.016
dgsem/3D/Float64/fluxdiff/element 2.21 ± 0.026 ms 2.25 ± 0.041 ms 0.981 ± 0.022
dgsem/3D/Float64/fluxdiff/node E=2 3.05 ± 0.03 ms 3.08 ± 0.041 ms 0.988 ± 0.016
dgsem/3D/Float64/fluxdiff/node halfsweep E=1 2.19 ± 0.051 ms 2.18 ± 0.043 ms 1 ± 0.031
dgsem/3D/Float64/fluxdiff/node halfsweep v-last E=1 2.28 ± 0.024 ms 2.21 ± 0.02 ms 1.03 ± 0.014
dgsem/3D/Float64/weak/element 0.813 ± 0.017 ms 0.841 ± 0.0062 ms 0.966 ± 0.022
dgsem/3D/Float64/weak/element private 0.836 ± 0.0066 ms 0.83 ± 0.01 ms 1.01 ± 0.015
dgsem/3D/Float64/weak/node localmem E=1 0.705 ± 0.015 ms 0.712 ± 0.025 ms 0.99 ± 0.041
dgsem/3D/Float64/weak/node localmem E=2 0.771 ± 0.0072 ms 0.775 ± 0.025 ms 0.995 ± 0.034
dgsem/3D/Float64/weak/node localmem v-last E=1 0.904 ± 0.0063 ms 0.907 ± 0.0054 ms 0.998 ± 0.0092
dgsem/3D/Float64/weak/node localmem v-last E=2 1.11 ± 0.018 ms 1.09 ± 0.021 ms 1.02 ± 0.026
dgsem/3D/Float64/weak/node recompute E=2 2.26 ± 0.032 ms 2.23 ± 0.035 ms 1.01 ± 0.021
dgsem/3D/Float64/weak/slab E=1 2.86 ± 0.018 ms 2.88 ± 0.02 ms 0.994 ± 0.0092
dgsem/3D/Float64/weak/slab E=8 6.74 ± 0.074 ms 6.66 ± 0.06 ms 1.01 ± 0.014
dgsem/3D/Float64/weak/slab double-buffered E=1 1.7 ± 0.03 ms 1.68 ± 0.03 ms 1.01 ± 0.025
dgsem/3D/Float64/weak/slab double-buffered E=8 2.31 ± 0.017 ms 2.31 ± 0.023 ms 1 ± 0.013
dgsem/3D/Float64/weak/slab double-buffered v-last E=1 1.76 ± 0.021 ms 1.74 ± 0.019 ms 1.01 ± 0.017
dgsem/3D/Float64/weak/slab double-buffered v-last E=8 2.33 ± 0.052 ms 2.33 ± 0.049 ms 1 ± 0.031
dgsem/3D/Float64/weak/slab v-last E=1 2.83 ± 0.03 ms 2.87 ± 0.022 ms 0.987 ± 0.013
dgsem/3D/Float64/weak/slab v-last E=8 6.53 ± 0.098 ms 6.68 ± 0.15 ms 0.977 ± 0.027
launch/3D static workgroup, dynamic ndrange 9.54 ± 3.9 μs 9.26 ± 0.77 μs 1.03 ± 0.43
launch/3D static workgroup, static ndrange 11.2 ± 2.2 μs 11.3 ± 4 μs 0.995 ± 0.4
launch/dynamic workgroup, dynamic ndrange 11.1 ± 1.3 μs 10.3 ± 1.1 μs 1.08 ± 0.17
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 10.2 ± 0.51 μs 10.2 ± 1.8 μs 1 ± 0.19
launch/static workgroup, dynamic ndrange 11.7 ± 1.7 μs 10.9 ± 2 μs 1.07 ± 0.25
launch/static workgroup, static ndrange 11.4 ± 1.8 μs 9.15 ± 4 μs 1.25 ± 0.58
narrow workgroup/masked/W=16 0.815 ± 0.046 ms 0.78 ± 0.019 ms 1.04 ± 0.065
narrow workgroup/masked/W=4 0.77 ± 0.045 ms 0.766 ± 0.035 ms 1.01 ± 0.075
narrow workgroup/unmasked/W=16 0.496 ± 0.018 ms 0.496 ± 0.017 ms 1 ± 0.05
narrow workgroup/unmasked/W=4 0.511 ± 0.017 ms 0.51 ± 0.015 ms 1 ± 0.044
partition/dynamic workgroup, dynamic ndrange 0.0612 ± 0.024 μs 0.0626 ± 0.012 μs 0.979 ± 0.43
partition/static workgroup, dynamic ndrange 0.0723 ± 0.013 μs 0.071 ± 0.014 μs 1.02 ± 0.28
partition/static workgroup, static ndrange 1.74 ± 0.01 ns 1.74 ± 0.01 ns 1 ± 0.0081
saxpy/default/Float16/1024 14.8 ± 1.4 μs 14.7 ± 1.1 μs 1 ± 0.12
saxpy/default/Float16/1048576 1.64 ± 0.019 ms 1.63 ± 0.014 ms 1.01 ± 0.014
saxpy/default/Float16/16384 0.0387 ± 0.00071 ms 0.0389 ± 0.0062 ms 0.995 ± 0.16
saxpy/default/Float16/2048 16.7 ± 0.61 μs 17.4 ± 3.9 μs 0.962 ± 0.22
saxpy/default/Float16/256 16.7 ± 5.2 μs 9.96 ± 1.2 μs 1.68 ± 0.56
saxpy/default/Float16/262144 0.447 ± 0.016 ms 0.446 ± 0.017 ms 1 ± 0.051
saxpy/default/Float16/32768 0.0897 ± 0.0093 ms 0.088 ± 0.0091 ms 1.02 ± 0.15
saxpy/default/Float16/4096 19.9 ± 0.55 μs 19.8 ± 0.54 μs 1 ± 0.039
saxpy/default/Float16/512 13.5 ± 3.9 μs 14 ± 4.6 μs 0.966 ± 0.43
saxpy/default/Float16/64 9.73 ± 0.64 μs 9.68 ± 0.6 μs 1.01 ± 0.091
saxpy/default/Float16/65536 0.14 ± 0.0091 ms 0.141 ± 0.012 ms 0.991 ± 0.11
saxpy/default/Float32/1024 14.2 ± 1.2 μs 14.7 ± 1.4 μs 0.968 ± 0.12
saxpy/default/Float32/1048576 1.01 ± 0.17 ms 1.05 ± 0.27 ms 0.965 ± 0.3
saxpy/default/Float32/16384 27.5 ± 1.2 μs 26.7 ± 0.75 μs 1.03 ± 0.054
saxpy/default/Float32/2048 18.7 ± 4.1 μs 15.2 ± 0.59 μs 1.23 ± 0.28
saxpy/default/Float32/256 9.88 ± 3.9 μs 9.84 ± 3.9 μs 1 ± 0.56
saxpy/default/Float32/262144 0.285 ± 0.036 ms 0.298 ± 0.06 ms 0.956 ± 0.23
saxpy/default/Float32/32768 0.0427 ± 0.041 ms 0.0403 ± 0.0019 ms 1.06 ± 1
saxpy/default/Float32/4096 17.2 ± 4.2 μs 17 ± 0.77 μs 1.02 ± 0.25
saxpy/default/Float32/512 17.7 ± 2.8 μs 14.1 ± 5 μs 1.26 ± 0.48
saxpy/default/Float32/64 9.93 ± 2.5 μs 9.83 ± 2.7 μs 1.01 ± 0.37
saxpy/default/Float32/65536 0.1 ± 0.02 ms 0.094 ± 0.013 ms 1.06 ± 0.26
saxpy/default/Float64/1024 14.4 ± 0.54 μs 14.4 ± 0.54 μs 0.997 ± 0.053
saxpy/default/Float64/1048576 1.86 ± 0.29 ms 1.86 ± 0.17 ms 1 ± 0.18
saxpy/default/Float64/16384 31.3 ± 9.6 μs 29.1 ± 10 μs 1.08 ± 0.5
saxpy/default/Float64/2048 16.4 ± 2.6 μs 15.4 ± 0.8 μs 1.07 ± 0.18
saxpy/default/Float64/256 14.2 ± 2.8 μs 17.2 ± 3.6 μs 0.824 ± 0.24
saxpy/default/Float64/262144 0.301 ± 0.07 ms 0.324 ± 0.26 ms 0.927 ± 0.77
saxpy/default/Float64/32768 0.0486 ± 0.012 ms 0.0458 ± 0.0081 ms 1.06 ± 0.33
saxpy/default/Float64/4096 17.4 ± 0.73 μs 17.4 ± 1.1 μs 0.999 ± 0.076
saxpy/default/Float64/512 14.2 ± 0.8 μs 13.9 ± 0.62 μs 1.02 ± 0.073
saxpy/default/Float64/64 13.3 ± 5.2 μs 9.62 ± 3.9 μs 1.39 ± 0.78
saxpy/default/Float64/65536 0.116 ± 0.02 ms 0.115 ± 0.022 ms 1.01 ± 0.26
saxpy/static workgroup=(1024,)/Float16/1024 16.3 ± 4.9 μs 14.9 ± 1.7 μs 1.09 ± 0.35
saxpy/static workgroup=(1024,)/Float16/1048576 1.65 ± 0.019 ms 1.64 ± 0.017 ms 1 ± 0.015
saxpy/static workgroup=(1024,)/Float16/16384 0.0389 ± 0.0011 ms 0.0385 ± 0.00067 ms 1.01 ± 0.034
saxpy/static workgroup=(1024,)/Float16/2048 16.8 ± 0.55 μs 20.3 ± 3.3 μs 0.824 ± 0.14
saxpy/static workgroup=(1024,)/Float16/256 10.3 ± 0.58 μs 12.5 ± 5.1 μs 0.822 ± 0.34
saxpy/static workgroup=(1024,)/Float16/262144 0.451 ± 0.019 ms 0.449 ± 0.016 ms 1 ± 0.055
saxpy/static workgroup=(1024,)/Float16/32768 0.0884 ± 0.0098 ms 0.0883 ± 0.008 ms 1 ± 0.14
saxpy/static workgroup=(1024,)/Float16/4096 20.1 ± 0.56 μs 19.9 ± 0.53 μs 1.01 ± 0.039
saxpy/static workgroup=(1024,)/Float16/512 10.8 ± 3.9 μs 14 ± 3.8 μs 0.773 ± 0.35
saxpy/static workgroup=(1024,)/Float16/64 10 ± 0.44 μs 10 ± 0.46 μs 1 ± 0.064
saxpy/static workgroup=(1024,)/Float16/65536 0.141 ± 0.0097 ms 0.139 ± 0.0091 ms 1.01 ± 0.096
saxpy/static workgroup=(1024,)/Float32/1024 14.6 ± 1.1 μs 14.1 ± 1.3 μs 1.03 ± 0.12
saxpy/static workgroup=(1024,)/Float32/1048576 1.05 ± 0.19 ms 1.11 ± 0.17 ms 0.952 ± 0.23
saxpy/static workgroup=(1024,)/Float32/16384 27.7 ± 10 μs 26.7 ± 10 μs 1.04 ± 0.55
saxpy/static workgroup=(1024,)/Float32/2048 15.4 ± 0.86 μs 15.5 ± 4 μs 0.99 ± 0.26
saxpy/static workgroup=(1024,)/Float32/256 10.6 ± 4.1 μs 10.2 ± 3.9 μs 1.05 ± 0.57
saxpy/static workgroup=(1024,)/Float32/262144 0.273 ± 0.049 ms 0.3 ± 0.068 ms 0.908 ± 0.26
saxpy/static workgroup=(1024,)/Float32/32768 0.0421 ± 0.0028 ms 0.0398 ± 0.0014 ms 1.06 ± 0.08
saxpy/static workgroup=(1024,)/Float32/4096 17 ± 0.72 μs 17.5 ± 4.5 μs 0.971 ± 0.25
saxpy/static workgroup=(1024,)/Float32/512 13.2 ± 1 μs 13.4 ± 2.1 μs 0.989 ± 0.17
saxpy/static workgroup=(1024,)/Float32/64 12.7 ± 2.7 μs 10.2 ± 0.44 μs 1.25 ± 0.27
saxpy/static workgroup=(1024,)/Float32/65536 0.102 ± 0.021 ms 0.0952 ± 0.02 ms 1.07 ± 0.32
saxpy/static workgroup=(1024,)/Float64/1024 14.4 ± 0.59 μs 14.5 ± 0.84 μs 0.997 ± 0.071
saxpy/static workgroup=(1024,)/Float64/1048576 1.84 ± 0.48 ms 2.15 ± 0.15 ms 0.857 ± 0.23
saxpy/static workgroup=(1024,)/Float64/16384 31.3 ± 9.5 μs 29.1 ± 10 μs 1.08 ± 0.5
saxpy/static workgroup=(1024,)/Float64/2048 15.6 ± 2.6 μs 15.7 ± 2.7 μs 0.993 ± 0.24
saxpy/static workgroup=(1024,)/Float64/256 18.9 ± 3.9 μs 14.7 ± 7.2 μs 1.29 ± 0.69
saxpy/static workgroup=(1024,)/Float64/262144 0.291 ± 0.069 ms 0.362 ± 0.3 ms 0.805 ± 0.69
saxpy/static workgroup=(1024,)/Float64/32768 0.0502 ± 0.022 ms 0.0458 ± 0.0053 ms 1.09 ± 0.5
saxpy/static workgroup=(1024,)/Float64/4096 20.2 ± 2.9 μs 17.4 ± 1.5 μs 1.17 ± 0.2
saxpy/static workgroup=(1024,)/Float64/512 14.3 ± 0.77 μs 14.3 ± 0.73 μs 0.995 ± 0.074
saxpy/static workgroup=(1024,)/Float64/64 10.2 ± 2.6 μs 12.6 ± 3.7 μs 0.81 ± 0.32
saxpy/static workgroup=(1024,)/Float64/65536 0.122 ± 0.026 ms 0.111 ± 0.017 ms 1.1 ± 0.28
time_to_load 0.597 ± 0.006 s 0.561 ± 0.0033 s 1.06 ± 0.012
main 185d448... main / 185d448...
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).

@codecov

codecov Bot commented Oct 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 76.47059% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.73%. Comparing base (4b72f59) to head (185d448).

Files with missing lines Patch % Lines
src/pocl/nanoOpenCL.jl 76.47% 4 Missing ⚠️
Additional details and impacted files
@@                Coverage Diff                @@
##           tb/invalidations     #915   +/-   ##
=================================================
  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.

Base automatically changed from tb/invalidations to main October 22, 2026 10:03
@maleadt
maleadt merged commit 8cd5c98 into main Oct 22, 2026
68 of 69 checks passed
@maleadt
maleadt deleted the tb/invalidations-2 branch October 22, 2026 10:07
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.

1 participant