Skip to content

POCL: size the RNG state's local memory in elements - #907

Merged
maleadt merged 1 commit into
mainfrom
tb/pocl-rng-localmem
Oct 23, 2026
Merged

maleadt merged 1 commit into
mainfrom
tb/pocl-rng-localmem

Conversation

@maleadt

@maleadt maleadt commented Oct 19, 2026

Copy link
Copy Markdown
Member

Kernels that use random numbers get two local-memory arguments for the per-sub-group RNG keys and counters, one UInt32 per sub-group each. call passed their size in bytes to LocalMem(UInt32, len), which takes a number of elements, so these kernels reserved four times the local memory they use. That counts against the device's local memory limit, e.g. for kernels that also use @localmem.

This also fixes the fallback for when the caller doesn't pass the number of arguments. It read k.num_args, which Kernel doesn't have. It now queries CL_KERNEL_NUM_ARGS. All current callers pass the number, but #906 doesn't.

The new test checks the kernel's local memory size after launching an RNG kernel: 32 bytes for one sub-group on main, 8 with this PR.

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main f02d6a8... main / f02d6a8...
const/@Const/Float32/262144 0.249 ± 0.0083 ms 0.239 ± 0.01 ms 1.04 ± 0.056
const/@Const/Float32/65536 0.0791 ± 0.0038 ms 0.0765 ± 0.0024 ms 1.03 ± 0.059
const/@Const/Float64/262144 0.452 ± 0.017 ms 0.428 ± 0.019 ms 1.06 ± 0.063
const/@Const/Float64/65536 0.126 ± 0.0048 ms 0.123 ± 0.0054 ms 1.03 ± 0.06
const/unmarked/Float32/262144 0.349 ± 0.015 ms 0.326 ± 0.016 ms 1.07 ± 0.068
const/unmarked/Float32/65536 0.101 ± 0.011 ms 0.0987 ± 0.01 ms 1.03 ± 0.15
const/unmarked/Float64/262144 0.681 ± 0.045 ms 0.581 ± 0.02 ms 1.17 ± 0.087
const/unmarked/Float64/65536 0.169 ± 0.012 ms 0.158 ± 0.012 ms 1.07 ± 0.11
dgsem/2D/Float32/fluxdiff/element 0.335 ± 0.013 ms 0.328 ± 0.015 ms 1.02 ± 0.06
dgsem/2D/Float32/fluxdiff/node E=8 0.453 ± 0.014 ms 0.432 ± 0.014 ms 1.05 ± 0.048
dgsem/2D/Float32/fluxdiff/node halfsweep E=8 0.336 ± 0.015 ms 0.336 ± 0.015 ms 0.999 ± 0.064
dgsem/2D/Float32/fluxdiff/node halfsweep v-last E=8 0.349 ± 0.015 ms 0.333 ± 0.019 ms 1.05 ± 0.074
dgsem/2D/Float32/weak/element 0.116 ± 0.0091 ms 0.112 ± 0.0079 ms 1.03 ± 0.11
dgsem/2D/Float32/weak/element private 0.125 ± 0.0076 ms 0.117 ± 0.0082 ms 1.08 ± 0.1
dgsem/2D/Float32/weak/node localmem E=1 0.105 ± 0.015 ms 0.102 ± 0.014 ms 1.03 ± 0.21
dgsem/2D/Float32/weak/node localmem E=8 0.112 ± 0.016 ms 0.103 ± 0.015 ms 1.09 ± 0.22
dgsem/2D/Float32/weak/node localmem v-last E=1 0.166 ± 0.011 ms 0.16 ± 0.0093 ms 1.03 ± 0.093
dgsem/2D/Float32/weak/node localmem v-last E=8 0.167 ± 0.0073 ms 0.159 ± 0.014 ms 1.05 ± 0.1
dgsem/2D/Float32/weak/node recompute E=8 0.29 ± 0.012 ms 0.292 ± 0.011 ms 0.993 ± 0.054
dgsem/2D/Float64/fluxdiff/element 0.354 ± 0.01 ms 0.333 ± 0.0092 ms 1.06 ± 0.043
dgsem/2D/Float64/fluxdiff/node E=8 0.494 ± 0.012 ms 0.477 ± 0.016 ms 1.04 ± 0.043
dgsem/2D/Float64/fluxdiff/node halfsweep E=8 0.362 ± 0.013 ms 0.346 ± 0.018 ms 1.05 ± 0.065
dgsem/2D/Float64/fluxdiff/node halfsweep v-last E=8 0.357 ± 0.016 ms 0.343 ± 0.012 ms 1.04 ± 0.061
dgsem/2D/Float64/weak/element 0.12 ± 0.0044 ms 0.12 ± 0.008 ms 0.999 ± 0.076
dgsem/2D/Float64/weak/element private 0.129 ± 0.0056 ms 0.123 ± 0.0064 ms 1.05 ± 0.071
dgsem/2D/Float64/weak/node localmem E=1 0.109 ± 0.016 ms 0.117 ± 0.015 ms 0.932 ± 0.18
dgsem/2D/Float64/weak/node localmem E=8 0.106 ± 0.016 ms 0.098 ± 0.0069 ms 1.08 ± 0.18
dgsem/2D/Float64/weak/node localmem v-last E=1 0.169 ± 0.012 ms 0.154 ± 0.01 ms 1.1 ± 0.11
dgsem/2D/Float64/weak/node localmem v-last E=8 0.163 ± 0.0093 ms 0.156 ± 0.0063 ms 1.05 ± 0.073
dgsem/2D/Float64/weak/node recompute E=8 0.408 ± 0.014 ms 0.383 ± 0.012 ms 1.07 ± 0.05
dgsem/3D/Float32/fluxdiff/element 1.14 ± 0.0095 ms 1.06 ± 0.0041 ms 1.07 ± 0.0099
dgsem/3D/Float32/fluxdiff/node E=2 1.89 ± 0.03 ms 1.85 ± 0.024 ms 1.02 ± 0.021
dgsem/3D/Float32/fluxdiff/node halfsweep E=1 1.22 ± 0.029 ms 1.12 ± 0.017 ms 1.09 ± 0.03
dgsem/3D/Float32/fluxdiff/node halfsweep v-last E=1 1.43 ± 0.018 ms 1.31 ± 0.031 ms 1.09 ± 0.03
dgsem/3D/Float32/weak/element 0.423 ± 0.014 ms 0.399 ± 0.015 ms 1.06 ± 0.053
dgsem/3D/Float32/weak/element private 0.428 ± 0.015 ms 0.411 ± 0.015 ms 1.04 ± 0.051
dgsem/3D/Float32/weak/node localmem E=1 0.55 ± 0.015 ms 0.517 ± 0.013 ms 1.06 ± 0.039
dgsem/3D/Float32/weak/node localmem E=2 0.565 ± 0.015 ms 0.533 ± 0.015 ms 1.06 ± 0.042
dgsem/3D/Float32/weak/node localmem v-last E=1 0.824 ± 0.023 ms 0.796 ± 0.032 ms 1.04 ± 0.051
dgsem/3D/Float32/weak/node localmem v-last E=2 0.842 ± 0.019 ms 0.824 ± 0.049 ms 1.02 ± 0.065
dgsem/3D/Float32/weak/node recompute E=2 1.34 ± 0.022 ms 1.3 ± 0.048 ms 1.03 ± 0.042
dgsem/3D/Float32/weak/slab E=1 1.53 ± 0.018 ms 1.45 ± 0.043 ms 1.05 ± 0.033
dgsem/3D/Float32/weak/slab E=8 4.34 ± 0.39 ms 4.27 ± 0.24 ms 1.02 ± 0.11
dgsem/3D/Float32/weak/slab double-buffered E=1 0.954 ± 0.011 ms 0.891 ± 0.03 ms 1.07 ± 0.038
dgsem/3D/Float32/weak/slab double-buffered E=8 1.06 ± 0.014 ms 0.985 ± 0.02 ms 1.07 ± 0.026
dgsem/3D/Float32/weak/slab double-buffered v-last E=1 0.952 ± 0.0092 ms 0.931 ± 0.036 ms 1.02 ± 0.04
dgsem/3D/Float32/weak/slab double-buffered v-last E=8 1.08 ± 0.014 ms 1.03 ± 0.027 ms 1.05 ± 0.031
dgsem/3D/Float32/weak/slab v-last E=1 1.51 ± 0.017 ms 1.44 ± 0.023 ms 1.05 ± 0.02
dgsem/3D/Float32/weak/slab v-last E=8 4.02 ± 0.071 ms 4.17 ± 0.46 ms 0.963 ± 0.11
dgsem/3D/Float64/fluxdiff/element 1.21 ± 0.014 ms 1.16 ± 0.024 ms 1.05 ± 0.025
dgsem/3D/Float64/fluxdiff/node E=2 2.03 ± 0.022 ms 1.95 ± 0.019 ms 1.04 ± 0.015
dgsem/3D/Float64/fluxdiff/node halfsweep E=1 1.23 ± 0.015 ms 1.16 ± 0.042 ms 1.06 ± 0.04
dgsem/3D/Float64/fluxdiff/node halfsweep v-last E=1 1.44 ± 0.013 ms 1.37 ± 0.037 ms 1.05 ± 0.03
dgsem/3D/Float64/weak/element 0.507 ± 0.014 ms 0.463 ± 0.014 ms 1.09 ± 0.045
dgsem/3D/Float64/weak/element private 0.509 ± 0.012 ms 0.487 ± 0.02 ms 1.05 ± 0.049
dgsem/3D/Float64/weak/node localmem E=1 0.591 ± 0.018 ms 0.548 ± 0.014 ms 1.08 ± 0.042
dgsem/3D/Float64/weak/node localmem E=2 0.621 ± 0.022 ms 0.558 ± 0.015 ms 1.11 ± 0.05
dgsem/3D/Float64/weak/node localmem v-last E=1 0.856 ± 0.013 ms 0.805 ± 0.019 ms 1.06 ± 0.03
dgsem/3D/Float64/weak/node localmem v-last E=2 0.896 ± 0.019 ms 0.822 ± 0.023 ms 1.09 ± 0.038
dgsem/3D/Float64/weak/node recompute E=2 1.44 ± 0.011 ms 1.36 ± 0.026 ms 1.06 ± 0.022
dgsem/3D/Float64/weak/slab E=1 1.57 ± 0.021 ms 1.46 ± 0.045 ms 1.07 ± 0.036
dgsem/3D/Float64/weak/slab E=8 4.44 ± 0.32 ms 4.5 ± 0.29 ms 0.986 ± 0.095
dgsem/3D/Float64/weak/slab double-buffered E=1 0.966 ± 0.015 ms 0.907 ± 0.033 ms 1.07 ± 0.042
dgsem/3D/Float64/weak/slab double-buffered E=8 1.09 ± 0.012 ms 1.04 ± 0.049 ms 1.05 ± 0.05
dgsem/3D/Float64/weak/slab double-buffered v-last E=1 0.964 ± 0.0096 ms 0.924 ± 0.033 ms 1.04 ± 0.039
dgsem/3D/Float64/weak/slab double-buffered v-last E=8 1.15 ± 0.027 ms 1.1 ± 0.029 ms 1.05 ± 0.038
dgsem/3D/Float64/weak/slab v-last E=1 1.55 ± 0.031 ms 1.45 ± 0.025 ms 1.08 ± 0.028
dgsem/3D/Float64/weak/slab v-last E=8 4.26 ± 0.15 ms 4.01 ± 0.19 ms 1.06 ± 0.062
launch/3D static workgroup, dynamic ndrange 6.36 ± 0.48 μs 6.24 ± 0.41 μs 1.02 ± 0.1
launch/3D static workgroup, static ndrange 7.23 ± 0.54 μs 6.17 ± 0.57 μs 1.17 ± 0.14
launch/dynamic workgroup, dynamic ndrange 6.04 ± 0.53 μs 5.98 ± 0.47 μs 1.01 ± 0.12
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 6.18 ± 0.75 μs 6.04 ± 0.52 μs 1.02 ± 0.15
launch/static workgroup, dynamic ndrange 6.1 ± 0.45 μs 5.96 ± 0.42 μs 1.02 ± 0.1
launch/static workgroup, static ndrange 6.25 ± 0.56 μs 6.21 ± 0.56 μs 1.01 ± 0.13
narrow workgroup/masked/W=16 0.302 ± 0.024 ms 0.289 ± 0.022 ms 1.05 ± 0.12
narrow workgroup/masked/W=4 0.34 ± 0.037 ms 0.333 ± 0.078 ms 1.02 ± 0.26
narrow workgroup/unmasked/W=16 0.285 ± 0.012 ms 0.279 ± 0.012 ms 1.02 ± 0.061
narrow workgroup/unmasked/W=4 0.283 ± 0.012 ms 0.276 ± 0.013 ms 1.03 ± 0.066
partition/dynamic workgroup, dynamic ndrange 0.0467 ± 0.021 μs 0.0536 ± 0.022 μs 0.872 ± 0.53
partition/static workgroup, dynamic ndrange 0.0445 ± 0.01 μs 0.0452 ± 0.01 μs 0.984 ± 0.32
partition/static workgroup, static ndrange 1.19 ± 0.01 ns 1.17 ± 0.01 ns 1.02 ± 0.012
saxpy/default/Float16/1024 7.36 ± 0.51 μs 6.83 ± 0.35 μs 1.08 ± 0.093
saxpy/default/Float16/1048576 0.426 ± 0.034 ms 0.362 ± 0.037 ms 1.18 ± 0.15
saxpy/default/Float16/16384 13.7 ± 0.52 μs 13.4 ± 0.65 μs 1.02 ± 0.063
saxpy/default/Float16/2048 7.53 ± 0.38 μs 7.37 ± 0.33 μs 1.02 ± 0.069
saxpy/default/Float16/256 7.32 ± 0.69 μs 6.97 ± 0.59 μs 1.05 ± 0.13
saxpy/default/Float16/262144 0.113 ± 0.0071 ms 0.109 ± 0.019 ms 1.03 ± 0.19
saxpy/default/Float16/32768 19.7 ± 0.96 μs 17.9 ± 0.83 μs 1.1 ± 0.074
saxpy/default/Float16/4096 8.17 ± 0.4 μs 7.75 ± 0.39 μs 1.05 ± 0.074
saxpy/default/Float16/512 7.11 ± 0.65 μs 6.93 ± 0.58 μs 1.03 ± 0.13
saxpy/default/Float16/64 6.91 ± 0.51 μs 7.67 ± 1.3 μs 0.901 ± 0.17
saxpy/default/Float16/65536 29.8 ± 4 μs 27.9 ± 1.1 μs 1.07 ± 0.15
saxpy/default/Float32/1024 7.4 ± 0.87 μs 6.72 ± 0.55 μs 1.1 ± 0.16
saxpy/default/Float32/1048576 0.559 ± 0.087 ms 0.368 ± 0.091 ms 1.52 ± 0.45
saxpy/default/Float32/16384 9.66 ± 0.67 μs 9.13 ± 0.57 μs 1.06 ± 0.099
saxpy/default/Float32/2048 7.38 ± 0.37 μs 6.71 ± 0.35 μs 1.1 ± 0.079
saxpy/default/Float32/256 7.33 ± 0.68 μs 6.72 ± 0.66 μs 1.09 ± 0.15
saxpy/default/Float32/262144 0.116 ± 0.023 ms 0.0899 ± 0.021 ms 1.28 ± 0.39
saxpy/default/Float32/32768 17.1 ± 1.3 μs 16.1 ± 1.7 μs 1.07 ± 0.14
saxpy/default/Float32/4096 7.66 ± 0.43 μs 7.17 ± 0.5 μs 1.07 ± 0.096
saxpy/default/Float32/512 7.24 ± 0.78 μs 7.74 ± 1.5 μs 0.936 ± 0.21
saxpy/default/Float32/64 7.05 ± 0.75 μs 6.59 ± 0.6 μs 1.07 ± 0.15
saxpy/default/Float32/65536 26.6 ± 2.8 μs 24.4 ± 2 μs 1.09 ± 0.15
saxpy/default/Float64/1024 7.2 ± 0.39 μs 6.7 ± 0.58 μs 1.07 ± 0.11
saxpy/default/Float64/1048576 0.909 ± 0.37 ms 0.685 ± 0.16 ms 1.33 ± 0.62
saxpy/default/Float64/16384 11.2 ± 0.76 μs 11 ± 0.99 μs 1.02 ± 0.12
saxpy/default/Float64/2048 7.44 ± 0.87 μs 6.85 ± 0.32 μs 1.09 ± 0.14
saxpy/default/Float64/256 7.06 ± 0.38 μs 6.44 ± 0.41 μs 1.1 ± 0.092
saxpy/default/Float64/262144 0.16 ± 0.021 ms 0.135 ± 0.021 ms 1.18 ± 0.24
saxpy/default/Float64/32768 24.1 ± 3.2 μs 21.6 ± 6.1 μs 1.11 ± 0.34
saxpy/default/Float64/4096 8.93 ± 0.91 μs 7.44 ± 0.4 μs 1.2 ± 0.14
saxpy/default/Float64/512 7.1 ± 0.4 μs 6.53 ± 0.35 μs 1.09 ± 0.084
saxpy/default/Float64/64 7.09 ± 0.5 μs 6.94 ± 0.48 μs 1.02 ± 0.1
saxpy/default/Float64/65536 0.036 ± 0.0055 ms 0.0371 ± 0.02 ms 0.97 ± 0.55
saxpy/static workgroup=(1024,)/Float16/1024 7.07 ± 0.34 μs 6.85 ± 0.6 μs 1.03 ± 0.1
saxpy/static workgroup=(1024,)/Float16/1048576 0.424 ± 0.041 ms 0.335 ± 0.034 ms 1.26 ± 0.18
saxpy/static workgroup=(1024,)/Float16/16384 13.4 ± 0.54 μs 13 ± 0.44 μs 1.03 ± 0.055
saxpy/static workgroup=(1024,)/Float16/2048 8.99 ± 0.44 μs 7.23 ± 0.35 μs 1.24 ± 0.085
saxpy/static workgroup=(1024,)/Float16/256 7.48 ± 0.6 μs 7.06 ± 0.65 μs 1.06 ± 0.13
saxpy/static workgroup=(1024,)/Float16/262144 0.11 ± 0.0089 ms 0.103 ± 0.013 ms 1.07 ± 0.16
saxpy/static workgroup=(1024,)/Float16/32768 18.9 ± 1.8 μs 17.8 ± 0.78 μs 1.06 ± 0.11
saxpy/static workgroup=(1024,)/Float16/4096 8.17 ± 0.4 μs 7.77 ± 0.46 μs 1.05 ± 0.081
saxpy/static workgroup=(1024,)/Float16/512 7.37 ± 0.73 μs 7.03 ± 0.59 μs 1.05 ± 0.14
saxpy/static workgroup=(1024,)/Float16/64 7.39 ± 0.47 μs 6.9 ± 0.46 μs 1.07 ± 0.099
saxpy/static workgroup=(1024,)/Float16/65536 28.3 ± 1.5 μs 25.9 ± 0.95 μs 1.1 ± 0.069
saxpy/static workgroup=(1024,)/Float32/1024 7.02 ± 0.34 μs 7.24 ± 1.6 μs 0.97 ± 0.22
saxpy/static workgroup=(1024,)/Float32/1048576 0.557 ± 0.11 ms 0.34 ± 0.091 ms 1.64 ± 0.55
saxpy/static workgroup=(1024,)/Float32/16384 9.47 ± 0.59 μs 8.74 ± 1.5 μs 1.08 ± 0.19
saxpy/static workgroup=(1024,)/Float32/2048 7.23 ± 0.33 μs 7.95 ± 1.4 μs 0.909 ± 0.17
saxpy/static workgroup=(1024,)/Float32/256 7.28 ± 0.63 μs 7.41 ± 0.51 μs 0.983 ± 0.11
saxpy/static workgroup=(1024,)/Float32/262144 0.114 ± 0.026 ms 0.0888 ± 0.022 ms 1.29 ± 0.43
saxpy/static workgroup=(1024,)/Float32/32768 16.8 ± 1.3 μs 15 ± 2.2 μs 1.12 ± 0.18
saxpy/static workgroup=(1024,)/Float32/4096 7.38 ± 0.35 μs 7.51 ± 0.36 μs 0.983 ± 0.067
saxpy/static workgroup=(1024,)/Float32/512 7 ± 0.34 μs 6.57 ± 0.32 μs 1.07 ± 0.074
saxpy/static workgroup=(1024,)/Float32/64 7.35 ± 0.55 μs 6.82 ± 0.42 μs 1.08 ± 0.1
saxpy/static workgroup=(1024,)/Float32/65536 25.9 ± 2.5 μs 24.6 ± 4.6 μs 1.05 ± 0.22
saxpy/static workgroup=(1024,)/Float64/1024 7.07 ± 0.34 μs 6.66 ± 0.31 μs 1.06 ± 0.072
saxpy/static workgroup=(1024,)/Float64/1048576 0.894 ± 0.13 ms 0.671 ± 0.14 ms 1.33 ± 0.34
saxpy/static workgroup=(1024,)/Float64/16384 11.1 ± 1.1 μs 9.59 ± 1.2 μs 1.15 ± 0.18
saxpy/static workgroup=(1024,)/Float64/2048 7.45 ± 0.92 μs 6.72 ± 0.33 μs 1.11 ± 0.15
saxpy/static workgroup=(1024,)/Float64/256 7.38 ± 18 μs 7.79 ± 17 μs 0.947 ± 3.1
saxpy/static workgroup=(1024,)/Float64/262144 0.162 ± 0.023 ms 0.133 ± 0.025 ms 1.21 ± 0.28
saxpy/static workgroup=(1024,)/Float64/32768 23.4 ± 3.5 μs 22.5 ± 6 μs 1.04 ± 0.32
saxpy/static workgroup=(1024,)/Float64/4096 7.67 ± 0.36 μs 8.41 ± 0.48 μs 0.912 ± 0.067
saxpy/static workgroup=(1024,)/Float64/512 7.13 ± 0.39 μs 6.59 ± 0.33 μs 1.08 ± 0.08
saxpy/static workgroup=(1024,)/Float64/64 7.35 ± 0.56 μs 6.8 ± 0.5 μs 1.08 ± 0.11
saxpy/static workgroup=(1024,)/Float64/65536 0.0351 ± 0.005 ms 0.0434 ± 0.016 ms 0.808 ± 0.32
time_to_load 0.446 ± 0.0095 s 0.417 ± 0.029 s 1.07 ± 0.079
main f02d6a8... main / f02d6a8...
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 20, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 22.22222% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.61%. Comparing base (8cd5c98) to head (f02d6a8).

Files with missing lines Patch % Lines
src/pocl/nanoOpenCL.jl 22.22% 7 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #907      +/-   ##
==========================================
- Coverage   82.73%   82.61%   -0.13%     
==========================================
  Files          28       28              
  Lines        2462     2467       +5     
==========================================
+ Hits         2037     2038       +1     
- Misses        425      429       +4     

☔ 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 force-pushed the tb/pocl-rng-localmem branch 2 times, most recently from e7f4a08 to 4799422 Compare October 20, 2026 16:06
`LocalMem(T, len)` takes a number of elements, but was passed the number of
bytes of the per-sub-group RNG keys and counters, so kernels using random
numbers reserved four times the local memory they use, which counts against
the device's limit. Also count the kernel's arguments with
`clGetKernelInfo` where the caller doesn't pass their number; `Kernel` has
no `num_args` property.
@maleadt
maleadt force-pushed the tb/pocl-rng-localmem branch from 4799422 to f02d6a8 Compare October 22, 2026 11:57
@maleadt
maleadt merged commit 25a0667 into main Oct 23, 2026
67 of 69 checks passed
@maleadt
maleadt deleted the tb/pocl-rng-localmem branch October 23, 2026 13:13
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.

2 participants