I am feeding a CuVector
to an interpolator created with Interpolations.jl
and wanting to get the output as a CuVector
, but I am not sure how to achieve this.
Here is what I did. I create an interpolator using sampling points:
using Interpolations
xsample = 0:0.1:1
ysample = rand(length(xsample))
itp = CubicSplineInterpolation(xsample, ysample)
Then I create a CuVector
that contains the x-values where I would like to evaluate the interpolator, and perform the interpolation:
using CUDA
cx = cu(rand(100))
y = itp(cx)
The type of y
is Vector
, not CuVector
. I tried to use CuVector
as ysample
when creating itp
, but the result was the same.
I also tried to preallocate y
as a CuVector
and use the dot syntax for element-wise assignment:
cy = similar(cx)
cy .= itp.(cx)
but this generates an error:
ERROR: GPU compilation of kernel broadcast_kernel(CUDA.CuKernelContext, CuDeviceVector{Float32, 1}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, Interpolations.Extrapolation{Float32, 1, ScaledInterpolation{Float32, 1, Interpolations.BSplineInterpolation{Float32, 1, OffsetArrays.OffsetVector{Float32, Vector{Float32}}, BSpline{Cubic{Line{OnGrid}}}, Tuple{Base.OneTo{Int64}}}, BSpline{Cubic{Line{OnGrid}}}, Tuple{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}}, BSpline{Cubic{Line{OnGrid}}}, Throw{Nothing}}, Tuple{Base.Broadcast.Extruded{CuDeviceVector{Float32, 1}, Tuple{Bool}, Tuple{Int64}}}}, Int64) failed
KernelError: passing and using non-bitstype argument
I will appreciate any help!