GPUifyLoops.jl
GPUifyLoops.jl copied to clipboard
Possible fabs float range issue?
using GPUifyLoops, CuArrays, StaticArrays
ps = CuArray([@SVector [10,28,8/3] for i in 1:10])
function loop(u, p, t)
σ = p[1]; ρ = p[2]; β = p[3]
du1 = σ*(u[2]-u[1])
du2 = u[1]*(ρ-u[3]) - u[2]
du3 = u[1]*u[2] - β*u[3]
@SVector [du1, du2, du3]
end
function ff8(p)
u0 = @SVector [10.0, 10.0, 10.0]
tspan = (0.0, 100.0)
dt = 0.1
tf = tspan[2]
ts = tspan[1]:dt:tspan[2]
u = u0
k7 = loop(u, p, ts[1])
uprev = u; k1 = k7
tmp = uprev.+dt*0.161.*k7
end
_ff8 = GPUifyLoops.contextualize(ff8)
map(_ff8,ps)
julia> map(_ff8,ps)
ERROR: LLVM error: Program used external function '__nv_fabs' which could not be resolved!
Stacktrace:
[1] handle_error(::Cstring) at C:\Users\accou\.julia\packages\LLVM\ViliQ\src\core\context.jl:103
[2] map(::Function, ::CuArray{SArray{Tuple{3},Float64,1,3},1}) at C:\Users\accou\.julia\packages\GPUArrays\pJw1Y\src\base.jl:9
[3] top-level scope at REPL[6]:1
Low priority. Seems just related to Float64 typing as this works:
using GPUifyLoops, CuArrays, StaticArrays
ps = CuArray([@SVector [10,28,8/3] for i in 1:10])
function loop(u, p, t)
σ = p[1]; ρ = p[2]; β = p[3]
du1 = σ*(u[2]-u[1])
du2 = u[1]*(ρ-u[3]) - u[2]
du3 = u[1]*u[2] - β*u[3]
@SVector [du1, du2, du3]
end
function ff8(p)
u0 = @SVector [10.0f0, 10.0f0, 10.0f0]
tspan = (0.0f0, 100.0f0)
dt = 0.1f0
tf = tspan[2]
ts = tspan[1]:dt:tspan[2]
u = u0
k7 = loop(u, p, ts[1])
uprev = u; k1 = k7
tmp = uprev.+dt*0.161f0.*k7
end
_ff8 = GPUifyLoops.contextualize(ff8)
map(_ff8,ps)
Yeah it looks like you are running into an inference corner case again.