Skip to content

Clarify what @spawn orders, for users and for backends - #833

Draft
maleadt wants to merge 2 commits into
mainfrom
tb/spawn-host-access
Draft

maleadt wants to merge 2 commits into
mainfrom
tb/spawn-host-access

Conversation

@maleadt

@maleadt maleadt commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

#817 showed that @spawn loses most of its overlap on CUDA. The spawned task's first use of an array from the parent made CUDA.jl wait for everything the parent had queued, even though wait_event had already ordered the child's work after the parent's. The fix belongs in CUDA.jl (JuliaGPU/CUDA.jl#3329 and #3328), but two parts of the @spawn contract were never written down:

  • For users: @spawn orders work on the device; it doesn't wait for the parent's work on the host. Code in the spawned task that passes the parent's results to something outside the backend, like an MPI call on a GPU buffer, needs them to be ready first. CUDA.jl takes care of that when such code takes the buffer's pointer, but other backends may not, so portable code should call synchronize.
  • For backend authors: a backend that synchronizes an array when another queue uses it should respect the order that wait_event sets up. Otherwise the spawned task's first use of a shared array waits for everything the parent queued, including work queued after @spawn. Other reasons to synchronize, like cross-device access, still apply.

Closes #817, together with the CUDA.jl PRs.

@maleadt
maleadt requested a review from vchuravy October 4, 2026 06:47
@codecov

codecov Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.06%. Comparing base (e70abc3) to head (f3c60b0).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #833   +/-   ##
=======================================
  Coverage   79.06%   79.06%           
=======================================
  Files          24       24           
  Lines        2040     2040           
=======================================
  Hits         1613     1613           
  Misses        427      427           

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

@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main f3c60b0... main / f3c60b0...
const/@Const/Float32/262144 0.322 ± 0.018 ms 0.328 ± 0.018 ms 0.981 ± 0.076
const/@Const/Float32/65536 0.116 ± 0.012 ms 0.112 ± 0.015 ms 1.04 ± 0.17
const/@Const/Float64/262144 0.594 ± 0.014 ms 0.594 ± 0.014 ms 0.999 ± 0.034
const/@Const/Float64/65536 0.188 ± 0.015 ms 0.189 ± 0.017 ms 0.998 ± 0.12
const/unmarked/Float32/262144 0.516 ± 0.015 ms 0.526 ± 0.015 ms 0.982 ± 0.04
const/unmarked/Float32/65536 0.16 ± 0.017 ms 0.162 ± 0.018 ms 0.988 ± 0.15
const/unmarked/Float64/262144 0.994 ± 0.016 ms 1.06 ± 0.014 ms 0.941 ± 0.02
const/unmarked/Float64/65536 0.273 ± 0.018 ms 0.276 ± 0.019 ms 0.989 ± 0.096
launch/3D static workgroup, dynamic ndrange 11.4 ± 2.7 μs 9.39 ± 0.54 μs 1.22 ± 0.29
launch/3D static workgroup, static ndrange 8.85 ± 0.39 μs 9.35 ± 2.3 μs 0.946 ± 0.23
launch/dynamic workgroup, dynamic ndrange 8.07 ± 0.23 μs 9.82 ± 1.5 μs 0.821 ± 0.13
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 8.03 ± 0.3 μs 8.02 ± 0.18 μs 1 ± 0.044
launch/static workgroup, dynamic ndrange 9.35 ± 1.9 μs 11.3 ± 1.3 μs 0.828 ± 0.19
launch/static workgroup, static ndrange 8.94 ± 1.8 μs 9.16 ± 0.41 μs 0.977 ± 0.21
partition/dynamic workgroup, dynamic ndrange 0.0458 ± 0.0023 μs 0.0461 ± 0.0037 μs 0.993 ± 0.093
partition/static workgroup, dynamic ndrange 0.0506 ± 0.011 μs 0.0487 ± 0.011 μs 1.04 ± 0.33
partition/static workgroup, static ndrange 1.35 ± 0 ns 2.15 ± 0.001 ns 0.628 ± 0.00029
saxpy/default/Float16/1024 11.8 ± 2.4 μs 12.4 ± 10 μs 0.952 ± 0.8
saxpy/default/Float16/1048576 0.269 ± 0.017 ms 0.272 ± 0.02 ms 0.989 ± 0.095
saxpy/default/Float16/16384 0.0395 ± 0.014 ms 0.0401 ± 0.015 ms 0.987 ± 0.5
saxpy/default/Float16/2048 11.8 ± 3.1 μs 10.1 ± 0.97 μs 1.17 ± 0.32
saxpy/default/Float16/256 9.4 ± 0.46 μs 9.44 ± 0.37 μs 0.996 ± 0.063
saxpy/default/Float16/262144 0.101 ± 0.019 ms 0.0976 ± 0.015 ms 1.03 ± 0.25
saxpy/default/Float16/32768 0.0426 ± 0.011 ms 0.047 ± 0.017 ms 0.907 ± 0.4
saxpy/default/Float16/4096 17.7 ± 17 μs 14.7 ± 1.3 μs 1.21 ± 1.2
saxpy/default/Float16/512 9.82 ± 2.4 μs 9.5 ± 0.41 μs 1.03 ± 0.26
saxpy/default/Float16/64 11.4 ± 0.38 μs 9.43 ± 0.41 μs 1.21 ± 0.067
saxpy/default/Float16/65536 0.0504 ± 0.013 ms 0.0486 ± 0.01 ms 1.04 ± 0.35
saxpy/default/Float32/1024 11.7 ± 0.77 μs 11.8 ± 0.36 μs 0.986 ± 0.072
saxpy/default/Float32/1048576 0.235 ± 0.025 ms 0.239 ± 0.023 ms 0.983 ± 0.14
saxpy/default/Float32/16384 16.6 ± 24 μs 23.9 ± 37 μs 0.696 ± 1.5
saxpy/default/Float32/2048 9.82 ± 0.27 μs 11.9 ± 0.68 μs 0.826 ± 0.052
saxpy/default/Float32/256 11.6 ± 0.49 μs 9.39 ± 0.38 μs 1.23 ± 0.072
saxpy/default/Float32/262144 0.0913 ± 0.016 ms 0.0888 ± 0.018 ms 1.03 ± 0.27
saxpy/default/Float32/32768 0.0448 ± 0.016 ms 0.0428 ± 0.011 ms 1.05 ± 0.47
saxpy/default/Float32/4096 11.6 ± 2.2 μs 11.9 ± 1.6 μs 0.974 ± 0.23
saxpy/default/Float32/512 11.8 ± 2.3 μs 11.9 ± 3.5 μs 0.989 ± 0.35
saxpy/default/Float32/64 9.12 ± 2.1 μs 9.57 ± 2.2 μs 0.953 ± 0.32
saxpy/default/Float32/65536 0.0526 ± 0.015 ms 0.0574 ± 0.021 ms 0.917 ± 0.43
saxpy/default/Float64/1024 11.5 ± 3.9 μs 11.9 ± 0.89 μs 0.968 ± 0.34
saxpy/default/Float64/1048576 0.535 ± 0.049 ms 0.527 ± 0.057 ms 1.02 ± 0.14
saxpy/default/Float64/16384 0.0409 ± 0.011 ms 0.0447 ± 0.019 ms 0.913 ± 0.47
saxpy/default/Float64/2048 11.6 ± 2.2 μs 12.1 ± 9.5 μs 0.96 ± 0.78
saxpy/default/Float64/256 11.7 ± 0.36 μs 11.9 ± 0.28 μs 0.984 ± 0.038
saxpy/default/Float64/262144 0.132 ± 0.022 ms 0.129 ± 0.022 ms 1.02 ± 0.24
saxpy/default/Float64/32768 0.0524 ± 0.018 ms 0.0542 ± 0.018 ms 0.968 ± 0.47
saxpy/default/Float64/4096 12 ± 1.8 μs 17.2 ± 11 μs 0.697 ± 0.45
saxpy/default/Float64/512 9.94 ± 2.2 μs 11.8 ± 9.2 μs 0.84 ± 0.68
saxpy/default/Float64/64 9.41 ± 1.2 μs 9.43 ± 0.37 μs 0.998 ± 0.14
saxpy/default/Float64/65536 0.0637 ± 0.012 ms 0.0653 ± 0.014 ms 0.975 ± 0.28
saxpy/static workgroup=(1024,)/Float16/1024 11.7 ± 0.24 μs 12 ± 1.8 μs 0.977 ± 0.15
saxpy/static workgroup=(1024,)/Float16/1048576 0.272 ± 0.021 ms 0.278 ± 0.02 ms 0.979 ± 0.1
saxpy/static workgroup=(1024,)/Float16/16384 0.0365 ± 0.024 ms 0.037 ± 0.0082 ms 0.986 ± 0.69
saxpy/static workgroup=(1024,)/Float16/2048 12.3 ± 4.5 μs 11.6 ± 2.4 μs 1.06 ± 0.45
saxpy/static workgroup=(1024,)/Float16/256 10.6 ± 2.2 μs 9.73 ± 2.3 μs 1.09 ± 0.34
saxpy/static workgroup=(1024,)/Float16/262144 0.0992 ± 0.015 ms 0.101 ± 0.019 ms 0.983 ± 0.24
saxpy/static workgroup=(1024,)/Float16/32768 0.0454 ± 0.015 ms 0.0419 ± 0.015 ms 1.08 ± 0.53
saxpy/static workgroup=(1024,)/Float16/4096 14.6 ± 6.3 μs 12.5 ± 1.8 μs 1.17 ± 0.53
saxpy/static workgroup=(1024,)/Float16/512 11.5 ± 2.4 μs 11.9 ± 0.52 μs 0.964 ± 0.21
saxpy/static workgroup=(1024,)/Float16/64 11.3 ± 2.2 μs 11.8 ± 1.1 μs 0.958 ± 0.21
saxpy/static workgroup=(1024,)/Float16/65536 0.0523 ± 0.014 ms 0.051 ± 0.013 ms 1.03 ± 0.38
saxpy/static workgroup=(1024,)/Float32/1024 11.3 ± 0.69 μs 10.5 ± 2.1 μs 1.08 ± 0.23
saxpy/static workgroup=(1024,)/Float32/1048576 0.222 ± 0.021 ms 0.222 ± 0.022 ms 0.997 ± 0.13
saxpy/static workgroup=(1024,)/Float32/16384 16.9 ± 7.5 μs 0.037 ± 0.028 ms 0.457 ± 0.4
saxpy/static workgroup=(1024,)/Float32/2048 11.5 ± 1.4 μs 9.99 ± 1.8 μs 1.15 ± 0.25
saxpy/static workgroup=(1024,)/Float32/256 11.6 ± 0.42 μs 9.56 ± 0.44 μs 1.21 ± 0.071
saxpy/static workgroup=(1024,)/Float32/262144 0.091 ± 0.018 ms 0.0884 ± 0.016 ms 1.03 ± 0.27
saxpy/static workgroup=(1024,)/Float32/32768 0.0435 ± 0.014 ms 0.0434 ± 0.012 ms 1 ± 0.43
saxpy/static workgroup=(1024,)/Float32/4096 10.6 ± 7.2 μs 10.2 ± 0.34 μs 1.03 ± 0.7
saxpy/static workgroup=(1024,)/Float32/512 11.8 ± 0.26 μs 10 ± 2.6 μs 1.18 ± 0.3
saxpy/static workgroup=(1024,)/Float32/64 9.34 ± 1.7 μs 9.54 ± 1.6 μs 0.979 ± 0.24
saxpy/static workgroup=(1024,)/Float32/65536 0.0539 ± 0.017 ms 0.0525 ± 0.014 ms 1.03 ± 0.42
saxpy/static workgroup=(1024,)/Float64/1024 11.7 ± 4.1 μs 11.9 ± 1.3 μs 0.979 ± 0.36
saxpy/static workgroup=(1024,)/Float64/1048576 0.495 ± 0.042 ms 0.5 ± 0.05 ms 0.991 ± 0.13
saxpy/static workgroup=(1024,)/Float64/16384 0.044 ± 0.017 ms 0.0441 ± 0.017 ms 0.996 ± 0.54
saxpy/static workgroup=(1024,)/Float64/2048 11.7 ± 1.9 μs 12.1 ± 2.9 μs 0.966 ± 0.28
saxpy/static workgroup=(1024,)/Float64/256 11.9 ± 3.4 μs 14.9 ± 14 μs 0.801 ± 0.76
saxpy/static workgroup=(1024,)/Float64/262144 0.128 ± 0.02 ms 0.13 ± 0.018 ms 0.987 ± 0.21
saxpy/static workgroup=(1024,)/Float64/32768 0.0523 ± 0.012 ms 0.058 ± 0.02 ms 0.903 ± 0.38
saxpy/static workgroup=(1024,)/Float64/4096 12.2 ± 1 μs 13.9 ± 4.3 μs 0.879 ± 0.28
saxpy/static workgroup=(1024,)/Float64/512 12.2 ± 8.1 μs 20.4 ± 19 μs 0.597 ± 0.69
saxpy/static workgroup=(1024,)/Float64/64 9.5 ± 1.6 μs 11.7 ± 2.3 μs 0.813 ± 0.21
saxpy/static workgroup=(1024,)/Float64/65536 0.0671 ± 0.014 ms 0.0702 ± 0.019 ms 0.956 ± 0.33
time_to_load 0.407 ± 0.0062 s 0.411 ± 0.0019 s 0.992 ± 0.016
main f3c60b0... main / f3c60b0...
const/@Const/Float32/262144 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/@Const/Float32/65536 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/@Const/Float64/262144 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/@Const/Float64/65536 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/unmarked/Float32/262144 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/unmarked/Float32/65536 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/unmarked/Float64/262144 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/unmarked/Float64/65536 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
launch/3D static workgroup, dynamic ndrange 9 allocs: 0.219 kB 9 allocs: 0.219 kB 1
launch/3D static workgroup, static ndrange 9 allocs: 0.219 kB 9 allocs: 0.219 kB 1
launch/dynamic workgroup, dynamic ndrange 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
launch/static workgroup, dynamic ndrange 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
launch/static workgroup, static ndrange 5 allocs: 0.0938 kB 5 allocs: 0.0938 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 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float16/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float16/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float16/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float16/65536 8 allocs: 0.141 kB 12 allocs: 0.25 kB 0.562
saxpy/default/Float32/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float32/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float32/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float32/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float32/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float64/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float64/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float64/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float64/65536 12 allocs: 0.25 kB 8 allocs: 0.141 kB 1.78
saxpy/static workgroup=(1024,)/Float16/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float16/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float16/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float16/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float16/65536 8 allocs: 0.141 kB 12 allocs: 0.25 kB 0.562
saxpy/static workgroup=(1024,)/Float32/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float32/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float32/262144 12 allocs: 0.25 kB 8 allocs: 0.141 kB 1.78
saxpy/static workgroup=(1024,)/Float32/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float32/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float64/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float64/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float64/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float64/65536 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
time_to_load 0.204 k allocs: 11.9 kB 0.2 k allocs: 11.8 kB 1.02

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

The spawned task's work is ordered after its parent's on the device, but code
in the task that touches the parent's results without going through the
backend, e.g., an MPI call on a GPU buffer, needs to synchronize first. Some
backends currently happen to do so implicitly, which is not something to rely
on.
Backends that synchronize arrays when another queue uses them should take the
order established by wait_event into account. Otherwise the spawned task's
first use of an array shared with its parent waits for all of the parent's
work, including what it queued after @Spawn (#817).
@maleadt
maleadt force-pushed the tb/spawn-host-access branch from 5571d1f to f3c60b0 Compare October 4, 2026 08:26

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.

KernelAbstractions.@spawn runs into CUDA.jl's implicit cross-stream synchronization

1 participant