Skip to content

Do not emit aliasscope markers on Julia 1.11 and later - #776

Open
vchuravy wants to merge 2 commits into
release-0.9from
vc/no-aliasscope-1.11
Open

vchuravy wants to merge 2 commits into
release-0.9from
vc/no-aliasscope-1.11

Conversation

@vchuravy

Copy link
Copy Markdown
Member

Julia miscompiles code placed inside an aliasscope, see JuliaLang/julia#63129 (and our earlier report in #652). We already restricted the markers to kernels with @Const arguments; this disables them entirely on 1.11 and later.

@Const arguments are still wrapped in Base.Experimental.Const (so back-ends that specialize on it, e.g. for __ldg, are unaffected) — they just no longer participate in alias-scope based optimizations on affected versions.

Tested locally on 1.12.7: the @kernel expansion of a kernel with a @Const argument no longer contains aliasscope, and the CPU test suite passes (the Enzyme extension tests error only because Enzyme isn't installed in my local test env).

Note: this does not bump the version in Project.toml.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Be2cuG5qj1BfmHFnsKADNZ

Julia miscompiles code placed inside an `aliasscope` (JuliaLang/julia#63129),
so on 1.11 and later `@kernel` no longer emits the `aliasscope` /
`popaliasscope` markers for kernels that use `@Const` arguments. `@Const`
arguments are still wrapped in `Base.Experimental.Const`, they just no longer
participate in alias-scope based optimizations.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Be2cuG5qj1BfmHFnsKADNZ
@github-actions

github-actions Bot commented Sep 12, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results

main 24609fb... main / 24609fb...
const/@Const/Float32/262144 0.178 ± 0.013 ms 2.51 ± 0.0085 ms 0.0709 ± 0.0053
const/@Const/Float32/65536 0.0784 ± 0.021 ms 0.605 ± 0.0081 ms 0.13 ± 0.036
const/@Const/Float64/262144 0.288 ± 0.012 ms 2.5 ± 0.0084 ms 0.115 ± 0.0047
const/@Const/Float64/65536 0.11 ± 0.017 ms 0.605 ± 0.0079 ms 0.182 ± 0.029
const/unmarked/Float32/262144 0.275 ± 0.016 ms 2.52 ± 0.0085 ms 0.109 ± 0.0063
const/unmarked/Float32/65536 0.0958 ± 0.019 ms 0.604 ± 0.0078 ms 0.159 ± 0.031
const/unmarked/Float64/262144 0.436 ± 0.023 ms 2.5 ± 0.0089 ms 0.174 ± 0.0093
const/unmarked/Float64/65536 0.137 ± 0.013 ms 0.604 ± 0.008 ms 0.227 ± 0.022
launch/3D static workgroup, dynamic ndrange 0.0371 ± 0.025 ms 0.137 ± 0.003 μs 270 ± 1.9e+02
launch/3D static workgroup, static ndrange 0.0381 ± 0.025 ms 0.0733 ± 0.0017 μs 519 ± 3.4e+02
launch/dynamic workgroup, dynamic ndrange 0.0383 ± 0.024 ms 0.074 ± 0.0014 μs 517 ± 3.2e+02
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 0.0321 ± 0.024 ms 0.0731 ± 0.0017 μs 439 ± 3.3e+02
launch/static workgroup, dynamic ndrange 0.034 ± 0.025 ms 0.047 ± 0.0011 μs 722 ± 5.3e+02
launch/static workgroup, static ndrange 0.0396 ± 0.024 ms 0.0445 ± 0.0012 μs 890 ± 5.4e+02
partition/dynamic workgroup, dynamic ndrange 0.0496 ± 0.0017 μs 0.0446 ± 0.0019 μs 1.11 ± 0.062
partition/static workgroup, dynamic ndrange 0.0564 ± 0.011 μs 0.0551 ± 0.0013 μs 1.02 ± 0.21
partition/static workgroup, static ndrange 1.35 ± 0 ns 12.5 ± 0.71 ns 0.108 ± 0.0062
saxpy/default/Float16/1024 0.0415 ± 0.025 ms 0.553 ± 0.008 μs 75 ± 46
saxpy/default/Float16/1048576 0.257 ± 0.015 ms 0.172 ± 0.0026 ms 1.49 ± 0.088
saxpy/default/Float16/16384 0.0463 ± 0.021 ms 3.1 ± 0.025 μs 14.9 ± 6.7
saxpy/default/Float16/2048 0.0442 ± 0.024 ms 0.725 ± 0.0097 μs 60.9 ± 33
saxpy/default/Float16/256 0.0426 ± 0.026 ms 0.414 ± 0.0093 μs 103 ± 63
saxpy/default/Float16/262144 0.102 ± 0.021 ms 0.0435 ± 0.00041 ms 2.35 ± 0.5
saxpy/default/Float16/32768 0.0463 ± 0.023 ms 5.76 ± 0.047 μs 8.04 ± 4
saxpy/default/Float16/4096 0.0427 ± 0.02 ms 1.09 ± 0.017 μs 39.3 ± 18
saxpy/default/Float16/512 0.0428 ± 0.026 ms 0.469 ± 0.0094 μs 91.1 ± 56
saxpy/default/Float16/64 0.0427 ± 0.025 ms 0.38 ± 0.037 μs 112 ± 67
saxpy/default/Float16/65536 0.0471 ± 0.023 ms 11.2 ± 0.13 μs 4.22 ± 2
saxpy/default/Float32/1024 0.0424 ± 0.025 ms 0.433 ± 0.012 μs 97.7 ± 57
saxpy/default/Float32/1048576 0.2 ± 0.015 ms 0.194 ± 0.022 ms 1.03 ± 0.14
saxpy/default/Float32/16384 0.0434 ± 0.02 ms 2.25 ± 0.14 μs 19.3 ± 9.2
saxpy/default/Float32/2048 0.0442 ± 0.022 ms 0.525 ± 0.074 μs 84.2 ± 44
saxpy/default/Float32/256 0.0438 ± 0.025 ms 0.382 ± 0.0042 μs 115 ± 64
saxpy/default/Float32/262144 0.0888 ± 0.02 ms 0.0442 ± 0.0094 ms 2.01 ± 0.62
saxpy/default/Float32/32768 0.0457 ± 0.021 ms 4.07 ± 0.27 μs 11.2 ± 5.3
saxpy/default/Float32/4096 0.0439 ± 0.021 ms 0.888 ± 0.075 μs 49.5 ± 24
saxpy/default/Float32/512 0.0412 ± 0.026 ms 0.412 ± 0.0076 μs 100 ± 62
saxpy/default/Float32/64 0.0401 ± 0.026 ms 0.374 ± 0.036 μs 107 ± 70
saxpy/default/Float32/65536 0.054 ± 0.022 ms 8.18 ± 0.61 μs 6.6 ± 2.8
saxpy/default/Float64/1024 0.0429 ± 0.024 ms 0.521 ± 0.0093 μs 82.4 ± 46
saxpy/default/Float64/1048576 0.278 ± 0.018 ms 0.406 ± 0.043 ms 0.687 ± 0.085
saxpy/default/Float64/16384 0.0457 ± 0.02 ms 6.68 ± 0.068 μs 6.85 ± 3.1
saxpy/default/Float64/2048 0.0434 ± 0.023 ms 0.877 ± 0.014 μs 49.5 ± 27
saxpy/default/Float64/256 0.0401 ± 0.025 ms 0.397 ± 0.0066 μs 101 ± 63
saxpy/default/Float64/262144 0.106 ± 0.016 ms 0.0888 ± 0.021 ms 1.2 ± 0.34
saxpy/default/Float64/32768 0.0525 ± 0.022 ms 13 ± 2.6 μs 4.05 ± 1.9
saxpy/default/Float64/4096 0.0413 ± 0.025 ms 1.92 ± 0.55 μs 21.4 ± 14
saxpy/default/Float64/512 0.043 ± 0.024 ms 0.441 ± 0.0098 μs 97.5 ± 54
saxpy/default/Float64/64 0.0414 ± 0.025 ms 0.379 ± 0.041 μs 109 ± 68
saxpy/default/Float64/65536 0.0623 ± 0.021 ms 25.7 ± 5.3 μs 2.42 ± 0.94
saxpy/static workgroup=(1024,)/Float16/1024 0.0395 ± 0.026 ms 1.67 ± 0.026 μs 23.7 ± 15
saxpy/static workgroup=(1024,)/Float16/1048576 0.254 ± 0.014 ms 0.175 ± 0.0033 ms 1.45 ± 0.086
saxpy/static workgroup=(1024,)/Float16/16384 0.0453 ± 0.02 ms 4.21 ± 0.04 μs 10.8 ± 4.7
saxpy/static workgroup=(1024,)/Float16/2048 0.0432 ± 0.023 ms 1.88 ± 0.3 μs 23 ± 13
saxpy/static workgroup=(1024,)/Float16/256 0.04 ± 0.025 ms 2.1 ± 0.028 μs 19 ± 12
saxpy/static workgroup=(1024,)/Float16/262144 0.101 ± 0.02 ms 0.0454 ± 0.0008 ms 2.22 ± 0.45
saxpy/static workgroup=(1024,)/Float16/32768 0.0464 ± 0.021 ms 6.84 ± 0.072 μs 6.78 ± 3.1
saxpy/static workgroup=(1024,)/Float16/4096 0.0416 ± 0.02 ms 2.24 ± 0.028 μs 18.6 ± 8.8
saxpy/static workgroup=(1024,)/Float16/512 0.0438 ± 0.024 ms 2.31 ± 0.041 μs 18.9 ± 11
saxpy/static workgroup=(1024,)/Float16/64 0.04 ± 0.026 ms 1.95 ± 0.028 μs 20.5 ± 13
saxpy/static workgroup=(1024,)/Float16/65536 0.0539 ± 0.022 ms 12.7 ± 0.28 μs 4.25 ± 1.7
saxpy/static workgroup=(1024,)/Float32/1024 0.0409 ± 0.025 ms 1.66 ± 0.033 μs 24.7 ± 15
saxpy/static workgroup=(1024,)/Float32/1048576 0.196 ± 0.014 ms 0.194 ± 0.019 ms 1.01 ± 0.12
saxpy/static workgroup=(1024,)/Float32/16384 0.0422 ± 0.02 ms 3.46 ± 0.16 μs 12.2 ± 5.8
saxpy/static workgroup=(1024,)/Float32/2048 0.0415 ± 0.024 ms 1.86 ± 0.051 μs 22.3 ± 13
saxpy/static workgroup=(1024,)/Float32/256 0.0398 ± 0.026 ms 2.03 ± 0.032 μs 19.6 ± 13
saxpy/static workgroup=(1024,)/Float32/262144 0.0877 ± 0.017 ms 0.0462 ± 0.0058 ms 1.9 ± 0.44
saxpy/static workgroup=(1024,)/Float32/32768 0.0443 ± 0.02 ms 5.38 ± 0.33 μs 8.23 ± 3.8
saxpy/static workgroup=(1024,)/Float32/4096 0.0391 ± 0.024 ms 2.12 ± 0.085 μs 18.4 ± 11
saxpy/static workgroup=(1024,)/Float32/512 0.0382 ± 0.026 ms 2.15 ± 0.033 μs 17.8 ± 12
saxpy/static workgroup=(1024,)/Float32/64 0.0387 ± 0.026 ms 1.97 ± 0.031 μs 19.7 ± 13
saxpy/static workgroup=(1024,)/Float32/65536 0.0539 ± 0.021 ms 10 ± 0.61 μs 5.37 ± 2.2
saxpy/static workgroup=(1024,)/Float64/1024 0.0421 ± 0.024 ms 1.83 ± 0.051 μs 23 ± 13
saxpy/static workgroup=(1024,)/Float64/1048576 0.273 ± 0.018 ms 0.432 ± 0.046 ms 0.63 ± 0.079
saxpy/static workgroup=(1024,)/Float64/16384 0.0441 ± 0.021 ms 5.33 ± 0.35 μs 8.28 ± 3.9
saxpy/static workgroup=(1024,)/Float64/2048 0.0426 ± 0.024 ms 2.11 ± 0.094 μs 20.2 ± 11
saxpy/static workgroup=(1024,)/Float64/256 0.0451 ± 0.026 ms 2.02 ± 0.028 μs 22.3 ± 13
saxpy/static workgroup=(1024,)/Float64/262144 0.106 ± 0.015 ms 0.0873 ± 0.0058 ms 1.22 ± 0.19
saxpy/static workgroup=(1024,)/Float64/32768 0.0486 ± 0.02 ms 10 ± 0.63 μs 4.86 ± 2
saxpy/static workgroup=(1024,)/Float64/4096 0.0323 ± 0.025 ms 2.56 ± 0.14 μs 12.7 ± 9.8
saxpy/static workgroup=(1024,)/Float64/512 0.0426 ± 0.027 ms 2.16 ± 0.038 μs 19.8 ± 12
saxpy/static workgroup=(1024,)/Float64/64 0.0415 ± 0.025 ms 1.94 ± 0.028 μs 21.4 ± 13
saxpy/static workgroup=(1024,)/Float64/65536 0.0613 ± 0.019 ms 21 ± 3.2 μs 2.91 ± 1
time_to_load 0.631 ± 0.0096 s 0.2 ± 0.00034 s 3.16 ± 0.048

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 Sep 12, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 73.68%. Comparing base (49dee88) to head (24609fb).
⚠️ Report is 1 commits behind head on release-0.9.

❗ There is a different number of reports uploaded between BASE (49dee88) and HEAD (24609fb). Click for more details.

HEAD has 26 uploads less than BASE
Flag BASE (49dee88) HEAD (24609fb)
69 43
Additional details and impacted files
@@               Coverage Diff               @@
##           release-0.9     #776      +/-   ##
===============================================
- Coverage        79.38%   73.68%   -5.70%     
===============================================
  Files               14       14              
  Lines              907      988      +81     
===============================================
+ Hits               720      728       +8     
- Misses             187      260      +73     

☔ 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.

@stillyslalom

Copy link
Copy Markdown

Potentially fixed upstream by JuliaLang/julia#63130, but this PR should help for v1.11-1.13 if the upstream fix isn't backported.

@christiangnrd

Copy link
Copy Markdown
Member

Non-lts releases that aren’t current typically don’t get releases. That convention was broken for 1.11 a few times but I wouldn’t expect it

The CPU Const test checked for !alias.scope and !noalias on every
Julia version. On 1.11 and later KernelAbstractions no longer emits
aliasscope markers, so gate the checks on EMIT_ALIASSCOPE.

Assisted-by: Claude Code (Opus 5.5)

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants