Skip to content

permutedims errors on high dimensional tensors #333

@GiggleLiu

Description

@GiggleLiu

The line errors

function LinearAlgebra.permutedims!(dest::AbstractGPUArray, src::AbstractGPUArray, perm) where N

julia> CUDA.permutedims(CuArray(randn(fill(2, 20)...)), randperm(20));
ERROR: InvalidIRError: compiling kernel #41(CUDA.CuKernelContext, CuDeviceArray{Float64,20,1}, CuDeviceArray{Float64,20,1}, NTuple{20,Int64}) resulted in invalid LLVM IR
Reason: unsupported dynamic function invocation (call to getindex)
Stacktrace:
 [1] macro expansion at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/device/indexing.jl:81
 [2] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:203
Reason: unsupported dynamic function invocation (call to getindex)
Stacktrace:
 [1] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:204
Reason: unsupported dynamic function invocation (call to genperm)
Stacktrace:
 [1] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:204
Reason: unsupported dynamic function invocation (call to setindex!(A::AbstractArray, v, I...) in Base at abstractarray.jl:1150)
Stacktrace:
 [1] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:204
Reason: unsupported dynamic function invocation (call to setindex!)
Stacktrace:
 [1] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:204
Reason: unsupported call through a literal pointer (call to jl_alloc_array_1d)
Stacktrace:
 [1] Array at boot.jl:406
 [2] map at tuple.jl:168
 [3] axes at abstractarray.jl:75
 [4] CartesianIndices at multidimensional.jl:264
 [5] macro expansion at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/device/indexing.jl:81
 [6] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:203
Reason: unsupported call to the Julia runtime (call to jl_f__apply_iterate)
Stacktrace:
 [1] map at tuple.jl:172
 [2] axes at abstractarray.jl:75
 [3] CartesianIndices at multidimensional.jl:264
 [4] macro expansion at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/device/indexing.jl:81
 [5] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:203
Reason: unsupported dynamic function invocation (call to CartesianIndices)
Stacktrace:
 [1] CartesianIndices at multidimensional.jl:264
 [2] macro expansion at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/device/indexing.jl:81
 [3] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:203
Stacktrace:
 [1] check_ir(::GPUCompiler.CompilerJob{GPUCompiler.PTXCompilerTarget,CUDA.CUDACompilerParams}, ::LLVM.Module) at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/validation.jl:123
 [2] macro expansion at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/driver.jl:239 [inlined]
 [3] macro expansion at /home/jgliu/.julia/packages/TimerOutputs/ZmKD7/src/TimerOutput.jl:206 [inlined]
 [4] codegen(::Symbol, ::GPUCompiler.CompilerJob; libraries::Bool, deferred_codegen::Bool, optimize::Bool, strip::Bool, validate::Bool, only_entry::Bool) at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/driver.jl:237
 [5] compile(::Symbol, ::GPUCompiler.CompilerJob; libraries::Bool, deferred_codegen::Bool, optimize::Bool, strip::Bool, validate::Bool, only_entry::Bool) at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/driver.jl:39
 [6] compile at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/driver.jl:35 [inlined]
 [7] cufunction_compile(::GPUCompiler.FunctionSpec; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /home/jgliu/.julia/packages/CUDA/0p5fn/src/compiler/execution.jl:310
 [8] cufunction_compile(::GPUCompiler.FunctionSpec) at /home/jgliu/.julia/packages/CUDA/0p5fn/src/compiler/execution.jl:305
 [9] check_cache(::Dict{UInt64,Any}, ::Any, ::Any, ::GPUCompiler.FunctionSpec{GPUArrays.var"#41#42",Tuple{CUDA.CuKernelContext,CuDeviceArray{Float64,20,1},CuDeviceArray{Float64,20,1},NTuple{20,Int64}}}, ::UInt64; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/cache.jl:40
 [10] #41 at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:203 [inlined]
 [11] cached_compilation at /home/jgliu/.julia/packages/GPUCompiler/uTpNx/src/cache.jl:65 [inlined]
 [12] cufunction(::GPUArrays.var"#41#42", ::Type{Tuple{CUDA.CuKernelContext,CuDeviceArray{Float64,20,1},CuDeviceArray{Float64,20,1},NTuple{20,Int64}}}; name::Nothing, kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /home/jgliu/.julia/packages/CUDA/0p5fn/src/compiler/execution.jl:297
 [13] cufunction(::GPUArrays.var"#41#42", ::Type{Tuple{CUDA.CuKernelContext,CuDeviceArray{Float64,20,1},CuDeviceArray{Float64,20,1},NTuple{20,Int64}}}) at /home/jgliu/.julia/packages/CUDA/0p5fn/src/compiler/execution.jl:294
 [14] #launch_heuristic#852 at /home/jgliu/.julia/packages/CUDA/0p5fn/src/gpuarrays.jl:19 [inlined]
 [15] launch_heuristic at /home/jgliu/.julia/packages/CUDA/0p5fn/src/gpuarrays.jl:17 [inlined]
 [16] gpu_call(::GPUArrays.var"#41#42", ::CuArray{Float64,20}, ::CuArray{Float64,20}, ::NTuple{20,Int64}; target::CuArray{Float64,20}, total_threads::Nothing, threads::Nothing, blocks::Nothing, name::String) at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/device/execution.jl:61
 [17] permutedims!(::CuArray{Float64,20}, ::CuArray{Float64,20}, ::Array{Int64,1}) at /home/jgliu/.julia/packages/GPUArrays/ZxsKE/src/host/linalg.jl:202
 [18] permutedims(::CuArray{Float64,20}, ::Array{Int64,1}) at ./multidimensional.jl:1381
 [19] top-level scope at REPL[12]:1

I think this is the 16 size tuple issue. Is there some easy approach to circumvent this error?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions