JuliaGPU / GPUArrays.jl

Reusable array functionality for Julia's various GPU backends.
MIT License
321 stars 79 forks source link

Better support in StructArrays #518

Open aplavin opened 7 months ago

aplavin commented 7 months ago

Functions like map work on GPU arrays directly, but not on StructArrays-of-GPUArrays:

using Metal

A = StructArray(a=MtlArray(rand(Float32, 10^3)), b=MtlArray(rand(Int8, 10^3)))

map(exp, A.a)  # works

map(x -> exp(x.a), A) # throws "Scalar indexing is disallowed" because `map` falls back to iteration

Would be great to make it work! How do you think could be implemented? I'm not very experienced with GPU arrays and their inner workings.

Ref https://github.com/JuliaArrays/StructArrays.jl/issues/300