Skip to content

Error mapreducing over a 0 dimensional array #1141

Closed
@GiggleLiu

Description

@GiggleLiu

MWE,

julia> using CUDA

julia> sum(CUDA.CuArray(fill(randn(), ())))
ERROR: MethodError: no method matching ndims(::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{0}, Nothing, typeof(identity), Tuple{CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}}})
Closest candidates are:
  ndims(::CUDA.CUSPARSE.CuSparseMatrix) at /home/leo/.julia/packages/CUDA/9T5Sq/lib/cusparse/array.jl:166
  ndims(::AbstractFFTs.Plan) at /home/leo/.julia/packages/AbstractFFTs/JebmH/src/definitions.jl:15
  ndims(::Base.Iterators.ProductIterator) at iterators.jl:983
  ...
Stacktrace:
  [1] check_reducedims(R::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}, A::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{0}, Nothing, typeof(identity), Tuple{CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}}})
    @ Base ./reducedim.jl:209
  [2] mapreducedim!(f::typeof(identity), op::typeof(Base.add_sum), R::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}, A::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{0}, Nothing, typeof(identity), Tuple{CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}}}; init::Float64)
    @ CUDA ~/.julia/packages/CUDA/9T5Sq/src/mapreduce.jl:168
  [3] _mapreduce(f::typeof(identity), op::typeof(Base.add_sum), As::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}; dims::Colon, init::Nothing)
    @ GPUArrays ~/.julia/packages/GPUArrays/UBzTm/src/host/mapreduce.jl:62
  [4] mapreduce(::Function, ::Function, ::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}; dims::Function, init::Nothing)
    @ GPUArrays ~/.julia/packages/GPUArrays/UBzTm/src/host/mapreduce.jl:28
  [5] mapreduce(::Function, ::Function, ::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer})
    @ GPUArrays ~/.julia/packages/GPUArrays/UBzTm/src/host/mapreduce.jl:28
  [6] _sum(f::Function, a::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}, ::Colon; kw::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./reducedim.jl:894
  [7] _sum(f::Function, a::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}, ::Colon)
    @ Base ./reducedim.jl:894
  [8] _sum(a::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}, ::Colon; kw::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./reducedim.jl:893
  [9] _sum(a::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}, ::Colon)
    @ Base ./reducedim.jl:893
 [10] #sum#722
    @ ./reducedim.jl:889 [inlined]
 [11] sum(a::CuArray{Float64, 0, CUDA.Mem.DeviceBuffer})
    @ Base ./reducedim.jl:889
 [12] top-level scope
    @ REPL[78]:1

CUDA version 3.4.2, Julia version 1.7.0-beta3, OS: Ubuntu 20.04

I guess it is better to fix the method defined in: CUDA ~/.julia/packages/CUDA/9T5Sq/src/mapreduce.jl:168 ?

Edit: defining the following function would fix the problem

Base.ndims(::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{0}, Nothing, typeof(identity), Tuple{CuArray{Float64, 0, CUDA.Mem.DeviceBuffer}}}) = 0

Where are other related functions defined?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions