GPUifyLoops.jl icon indicating copy to clipboard operation
GPUifyLoops.jl copied to clipboard

Possible fabs float range issue?

Open ChrisRackauckas opened this issue 6 years ago • 2 comments

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

ChrisRackauckas avatar Jun 06 '19 16:06 ChrisRackauckas

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)

ChrisRackauckas avatar Jun 06 '19 16:06 ChrisRackauckas

Yeah it looks like you are running into an inference corner case again.

vchuravy avatar Jun 06 '19 19:06 vchuravy