Skip to content

POCL: pass the exception type to @gputhrow - #790

Merged
christiangnrd merged 1 commit into
mainfrom
tb/gputhrow
Sep 23, 2026
Merged

christiangnrd merged 1 commit into
mainfrom
tb/gputhrow

Conversation

@maleadt

@maleadt maleadt commented Sep 23, 2026

Copy link
Copy Markdown
Member

This is preparation for sharing the exception quirks (Base methods that are overridden so that exceptions don't box their arguments) across back-ends. Those are nearly identical across CUDA.jl, AMDGPU.jl, Metal.jl, OpenCL.jl, oneAPI.jl and KernelAbstractions' POCL back-end, except for the macro that throws: CUDA.jl, Metal.jl and OpenCL.jl use @gputhrow name reason, taking the name of the exception type and a reason.

Here, the POCL back-end's @print_and_throw reason becomes @gputhrow name reason, which also includes the exception type in the printed message, e.g. ERROR: BoundsError: Out-of-bounds array access. (I dropped the period from the sincos reason, which was printed twice.) Checked locally with kernels throwing a BoundsError and a DomainError.

Based on #789; GitHub will retarget this PR to main once that one is merged.

@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main 5a3872a... main / 5a3872a...
const/@Const/Float32/262144 0.158 ± 0.012 ms 0.151 ± 0.013 ms 1.04 ± 0.12
const/@Const/Float32/65536 0.061 ± 0.02 ms 0.0562 ± 0.021 ms 1.09 ± 0.53
const/@Const/Float64/262144 0.267 ± 0.011 ms 0.265 ± 0.015 ms 1.01 ± 0.072
const/@Const/Float64/65536 0.0875 ± 0.018 ms 0.0842 ± 0.017 ms 1.04 ± 0.3
const/unmarked/Float32/262144 0.199 ± 0.014 ms 0.197 ± 0.015 ms 1.01 ± 0.1
const/unmarked/Float32/65536 0.0719 ± 0.018 ms 0.0676 ± 0.019 ms 1.06 ± 0.4
const/unmarked/Float64/262144 0.362 ± 0.018 ms 0.361 ± 0.019 ms 1 ± 0.073
const/unmarked/Float64/65536 0.111 ± 0.015 ms 0.108 ± 0.015 ms 1.03 ± 0.19
launch/3D static workgroup, dynamic ndrange 31.2 ± 23 μs 23.7 ± 24 μs 1.31 ± 1.6
launch/3D static workgroup, static ndrange 29.7 ± 24 μs 23.6 ± 24 μs 1.26 ± 1.6
launch/dynamic workgroup, dynamic ndrange 0.0357 ± 0.024 ms 25.3 ± 24 μs 1.41 ± 1.7
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 30.1 ± 24 μs 23.3 ± 24 μs 1.29 ± 1.7
launch/static workgroup, dynamic ndrange 0.0316 ± 0.024 ms 24 ± 24 μs 1.32 ± 1.7
launch/static workgroup, static ndrange 24.7 ± 23 μs 24.3 ± 24 μs 1.02 ± 1.4
partition/dynamic workgroup, dynamic ndrange 0.0355 ± 0.017 μs 0.0351 ± 0.0016 μs 1.01 ± 0.48
partition/static workgroup, dynamic ndrange 0.0426 ± 0.0085 μs 0.0424 ± 0.0088 μs 1 ± 0.29
partition/static workgroup, static ndrange 1.67 ± 0.001 ns 1.63 ± 0.01 ns 1.02 ± 0.0063
saxpy/default/Float16/1024 0.0367 ± 0.022 ms 0.0368 ± 0.022 ms 0.998 ± 0.86
saxpy/default/Float16/1048576 0.222 ± 0.016 ms 0.215 ± 0.014 ms 1.03 ± 0.1
saxpy/default/Float16/16384 0.0321 ± 0.02 ms 30.1 ± 19 μs 1.07 ± 0.95
saxpy/default/Float16/2048 0.0404 ± 0.022 ms 0.0332 ± 0.022 ms 1.22 ± 1
saxpy/default/Float16/256 0.0382 ± 0.023 ms 0.0366 ± 0.023 ms 1.05 ± 0.93
saxpy/default/Float16/262144 0.0754 ± 0.019 ms 0.0738 ± 0.018 ms 1.02 ± 0.36
saxpy/default/Float16/32768 0.034 ± 0.021 ms 0.0322 ± 0.02 ms 1.06 ± 0.91
saxpy/default/Float16/4096 27.7 ± 19 μs 26.4 ± 20 μs 1.05 ± 1.1
saxpy/default/Float16/512 0.0391 ± 0.023 ms 0.0383 ± 0.023 ms 1.02 ± 0.87
saxpy/default/Float16/64 0.0399 ± 0.024 ms 0.0366 ± 0.024 ms 1.09 ± 0.97
saxpy/default/Float16/65536 0.0408 ± 0.022 ms 0.037 ± 0.02 ms 1.1 ± 0.83
saxpy/default/Float32/1024 0.0371 ± 0.023 ms 0.0355 ± 0.023 ms 1.05 ± 0.94
saxpy/default/Float32/1048576 0.227 ± 0.049 ms 0.255 ± 0.06 ms 0.89 ± 0.28
saxpy/default/Float32/16384 30.1 ± 20 μs 29.5 ± 19 μs 1.02 ± 0.93
saxpy/default/Float32/2048 30.4 ± 22 μs 26 ± 22 μs 1.17 ± 1.3
saxpy/default/Float32/256 0.0369 ± 0.024 ms 0.0362 ± 0.024 ms 1.02 ± 0.95
saxpy/default/Float32/262144 0.0721 ± 0.022 ms 0.0698 ± 0.022 ms 1.03 ± 0.45
saxpy/default/Float32/32768 0.0328 ± 0.02 ms 0.0318 ± 0.021 ms 1.03 ± 0.93
saxpy/default/Float32/4096 27.3 ± 20 μs 26.5 ± 19 μs 1.03 ± 1.1
saxpy/default/Float32/512 0.0357 ± 0.024 ms 0.0331 ± 0.024 ms 1.08 ± 1.1
saxpy/default/Float32/64 0.0386 ± 0.024 ms 0.0343 ± 0.024 ms 1.13 ± 1.1
saxpy/default/Float32/65536 0.0378 ± 0.021 ms 0.0364 ± 0.02 ms 1.04 ± 0.82
saxpy/default/Float64/1024 0.0335 ± 0.024 ms 25 ± 24 μs 1.34 ± 1.6
saxpy/default/Float64/1048576 0.281 ± 0.063 ms 0.268 ± 0.04 ms 1.05 ± 0.28
saxpy/default/Float64/16384 30.7 ± 20 μs 28.5 ± 20 μs 1.08 ± 1
saxpy/default/Float64/2048 25.9 ± 23 μs 24.4 ± 23 μs 1.06 ± 1.4
saxpy/default/Float64/256 0.0361 ± 0.024 ms 0.0321 ± 0.024 ms 1.12 ± 1.1
saxpy/default/Float64/262144 0.0932 ± 0.021 ms 0.0834 ± 0.017 ms 1.12 ± 0.34
saxpy/default/Float64/32768 0.0321 ± 0.02 ms 31.4 ± 19 μs 1.02 ± 0.89
saxpy/default/Float64/4096 29.2 ± 21 μs 25.6 ± 21 μs 1.14 ± 1.2
saxpy/default/Float64/512 0.0365 ± 0.024 ms 29.5 ± 24 μs 1.23 ± 1.3
saxpy/default/Float64/64 0.0392 ± 0.024 ms 0.0352 ± 0.024 ms 1.12 ± 1
saxpy/default/Float64/65536 0.0389 ± 0.021 ms 0.0394 ± 0.021 ms 0.986 ± 0.74
saxpy/static workgroup=(1024,)/Float16/1024 24.1 ± 23 μs 23.6 ± 23 μs 1.02 ± 1.4
saxpy/static workgroup=(1024,)/Float16/1048576 0.217 ± 0.014 ms 0.217 ± 0.02 ms 1 ± 0.11
saxpy/static workgroup=(1024,)/Float16/16384 31.5 ± 21 μs 29 ± 19 μs 1.08 ± 1
saxpy/static workgroup=(1024,)/Float16/2048 25.6 ± 21 μs 25.3 ± 22 μs 1.01 ± 1.2
saxpy/static workgroup=(1024,)/Float16/256 26 ± 22 μs 24.9 ± 23 μs 1.04 ± 1.3
saxpy/static workgroup=(1024,)/Float16/262144 0.0741 ± 0.017 ms 0.0737 ± 0.018 ms 1 ± 0.33
saxpy/static workgroup=(1024,)/Float16/32768 0.0328 ± 0.02 ms 31.4 ± 19 μs 1.05 ± 0.89
saxpy/static workgroup=(1024,)/Float16/4096 26.8 ± 17 μs 26.2 ± 19 μs 1.02 ± 0.99
saxpy/static workgroup=(1024,)/Float16/512 26.6 ± 22 μs 25 ± 23 μs 1.07 ± 1.3
saxpy/static workgroup=(1024,)/Float16/64 27.4 ± 23 μs 24.3 ± 23 μs 1.13 ± 1.4
saxpy/static workgroup=(1024,)/Float16/65536 0.038 ± 0.02 ms 0.0373 ± 0.02 ms 1.02 ± 0.77
saxpy/static workgroup=(1024,)/Float32/1024 23.7 ± 23 μs 24.2 ± 23 μs 0.979 ± 1.3
saxpy/static workgroup=(1024,)/Float32/1048576 0.207 ± 0.03 ms 0.206 ± 0.035 ms 1 ± 0.22
saxpy/static workgroup=(1024,)/Float32/16384 28.7 ± 19 μs 28.6 ± 18 μs 1 ± 0.93
saxpy/static workgroup=(1024,)/Float32/2048 30 ± 21 μs 25.7 ± 21 μs 1.17 ± 1.3
saxpy/static workgroup=(1024,)/Float32/256 29.4 ± 23 μs 26.5 ± 22 μs 1.11 ± 1.3
saxpy/static workgroup=(1024,)/Float32/262144 0.0698 ± 0.021 ms 0.0694 ± 0.022 ms 1.01 ± 0.44
saxpy/static workgroup=(1024,)/Float32/32768 31.4 ± 19 μs 30.5 ± 19 μs 1.03 ± 0.91
saxpy/static workgroup=(1024,)/Float32/4096 25.7 ± 18 μs 26.1 ± 19 μs 0.985 ± 0.98
saxpy/static workgroup=(1024,)/Float32/512 28.7 ± 22 μs 26.1 ± 22 μs 1.1 ± 1.2
saxpy/static workgroup=(1024,)/Float32/64 29.1 ± 23 μs 25.6 ± 23 μs 1.14 ± 1.3
saxpy/static workgroup=(1024,)/Float32/65536 0.0367 ± 0.02 ms 0.0358 ± 0.021 ms 1.02 ± 0.82
saxpy/static workgroup=(1024,)/Float64/1024 26.8 ± 24 μs 24.4 ± 24 μs 1.1 ± 1.5
saxpy/static workgroup=(1024,)/Float64/1048576 0.267 ± 0.051 ms 0.266 ± 0.047 ms 1 ± 0.26
saxpy/static workgroup=(1024,)/Float64/16384 27.9 ± 20 μs 27.6 ± 19 μs 1.01 ± 0.99
saxpy/static workgroup=(1024,)/Float64/2048 24.9 ± 22 μs 24.1 ± 23 μs 1.03 ± 1.3
saxpy/static workgroup=(1024,)/Float64/256 0.0365 ± 0.022 ms 24.8 ± 22 μs 1.47 ± 1.6
saxpy/static workgroup=(1024,)/Float64/262144 0.0856 ± 0.018 ms 0.0821 ± 0.016 ms 1.04 ± 0.3
saxpy/static workgroup=(1024,)/Float64/32768 31.5 ± 20 μs 30.7 ± 19 μs 1.02 ± 0.91
saxpy/static workgroup=(1024,)/Float64/4096 26.9 ± 20 μs 25.4 ± 21 μs 1.06 ± 1.2
saxpy/static workgroup=(1024,)/Float64/512 0.0358 ± 0.021 ms 24 ± 23 μs 1.49 ± 1.7
saxpy/static workgroup=(1024,)/Float64/64 0.0347 ± 0.023 ms 24.1 ± 24 μs 1.44 ± 1.7
saxpy/static workgroup=(1024,)/Float64/65536 0.0381 ± 0.02 ms 0.037 ± 0.02 ms 1.03 ± 0.78
time_to_load 0.549 ± 0.016 s 0.558 ± 0.012 s 0.984 ± 0.035
main 5a3872a... main / 5a3872a...
const/@Const/Float32/262144 1 allocs: 16 B 1 allocs: 16 B 1
const/@Const/Float32/65536 1 allocs: 16 B 1 allocs: 16 B 1
const/@Const/Float64/262144 1 allocs: 16 B 1 allocs: 16 B 1
const/@Const/Float64/65536 1 allocs: 16 B 1 allocs: 16 B 1
const/unmarked/Float32/262144 1 allocs: 16 B 1 allocs: 16 B 1
const/unmarked/Float32/65536 1 allocs: 16 B 1 allocs: 16 B 1
const/unmarked/Float64/262144 1 allocs: 16 B 1 allocs: 16 B 1
const/unmarked/Float64/65536 1 allocs: 16 B 1 allocs: 16 B 1
launch/3D static workgroup, dynamic ndrange 5 allocs: 0.141 kB 5 allocs: 0.141 kB 1
launch/3D static workgroup, static ndrange 6 allocs: 0.172 kB 6 allocs: 0.172 kB 1
launch/dynamic workgroup, dynamic ndrange 15 allocs: 0.312 kB 15 allocs: 0.312 kB 1
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 1 allocs: 16 B 1 allocs: 16 B 1
launch/static workgroup, dynamic ndrange 1 allocs: 16 B 1 allocs: 16 B 1
launch/static workgroup, static ndrange 2 allocs: 0.0469 kB 2 allocs: 0.0469 kB 1
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 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/1048576 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/16384 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/2048 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/256 16 allocs: 0.328 kB 16 allocs: 0.328 kB 1
saxpy/default/Float16/262144 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/32768 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/4096 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/512 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float16/64 16 allocs: 0.328 kB 16 allocs: 0.328 kB 1
saxpy/default/Float16/65536 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/1024 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/1048576 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/16384 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/2048 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/256 16 allocs: 0.328 kB 16 allocs: 0.328 kB 1
saxpy/default/Float32/262144 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/32768 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/4096 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/512 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float32/64 16 allocs: 0.328 kB 16 allocs: 0.328 kB 1
saxpy/default/Float32/65536 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/1024 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/1048576 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/16384 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/2048 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/256 16 allocs: 0.328 kB 16 allocs: 0.328 kB 1
saxpy/default/Float64/262144 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/32768 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/4096 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/512 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/default/Float64/64 16 allocs: 0.328 kB 16 allocs: 0.328 kB 1
saxpy/default/Float64/65536 24 allocs: 0.453 kB 24 allocs: 0.453 kB 1
saxpy/static workgroup=(1024,)/Float16/1024 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/1048576 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/16384 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/2048 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/256 1 allocs: 16 B 1 allocs: 16 B 1
saxpy/static workgroup=(1024,)/Float16/262144 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/32768 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/4096 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/512 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float16/64 1 allocs: 16 B 1 allocs: 16 B 1
saxpy/static workgroup=(1024,)/Float16/65536 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/1024 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/1048576 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/16384 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/2048 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/256 1 allocs: 16 B 1 allocs: 16 B 1
saxpy/static workgroup=(1024,)/Float32/262144 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/32768 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/4096 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/512 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float32/64 1 allocs: 16 B 1 allocs: 16 B 1
saxpy/static workgroup=(1024,)/Float32/65536 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/1024 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/1048576 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/16384 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/2048 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/256 1 allocs: 16 B 1 allocs: 16 B 1
saxpy/static workgroup=(1024,)/Float64/262144 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/32768 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/4096 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/512 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
saxpy/static workgroup=(1024,)/Float64/64 1 allocs: 16 B 1 allocs: 16 B 1
saxpy/static workgroup=(1024,)/Float64/65536 4 allocs: 0.0625 kB 4 allocs: 0.0625 kB 1
time_to_load 0.201 k allocs: 11.8 kB 0.201 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).

Base automatically changed from tb/dead-quirks to main September 23, 2026 14:43
Replace `@print_and_throw reason` by `@gputhrow name reason`, which takes
the name of the exception type separately, like CUDA.jl, Metal.jl and
OpenCL.jl do, and includes it in the printed message. This makes the
quirks the same across back-ends, apart from how the exception is
reported, which prepares for sharing them.
@christiangnrd

Copy link
Copy Markdown
Member

I cancelled buildkite runs since this only touches pocl and there are 384 jobs waiting in the JuliaGPU cluster

@christiangnrd
christiangnrd merged commit c657ae2 into main Sep 23, 2026
58 of 62 checks passed
@christiangnrd
christiangnrd deleted the tb/gputhrow branch September 23, 2026 18:09
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.

3 participants