From 7b64ddab02f3880d5f6b1f3855e7b1a6b63520cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Wed, 6 May 2026 13:10:33 +0200 Subject: [PATCH 1/2] Make setscalar GPU-friendly --- src/sizes.jl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/sizes.jl b/src/sizes.jl index 1c76881..72170b3 100644 --- a/src/sizes.jl +++ b/src/sizes.jl @@ -46,7 +46,12 @@ function _getscalar(x, sizes::Sizes, k::Int) end function _setscalar!(x, value, sizes::Sizes, k::Int) - return x[sizes.storage_offset[k]+1] = value + # Use a 1-element view + broadcast so this works on GPU storage as well as + # `Vector{Float64}`. Direct `x[idx] = value` is a scalar setindex which + # GPUArrays disallows by default. + pos = sizes.storage_offset[k] + 1 + view(x, pos:pos) .= value + return value end """ From eca42313851234602c2e4fcca5551ea21c6c03da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Wed, 6 May 2026 13:23:24 +0200 Subject: [PATCH 2/2] 0-dim --- src/sizes.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sizes.jl b/src/sizes.jl index 72170b3..bb3d44f 100644 --- a/src/sizes.jl +++ b/src/sizes.jl @@ -49,8 +49,8 @@ function _setscalar!(x, value, sizes::Sizes, k::Int) # Use a 1-element view + broadcast so this works on GPU storage as well as # `Vector{Float64}`. Direct `x[idx] = value` is a scalar setindex which # GPUArrays disallows by default. - pos = sizes.storage_offset[k] + 1 - view(x, pos:pos) .= value + pos = _scalar_pos(sizes, k) + view(x, reshape(pos:pos, ())) .= value return value end