JuliaImages / ImageFiltering.jl

Julia implementations of multidimensional array convolution and nonlinear stencil operations
Other
99 stars 51 forks source link

TiledIteration 4.0 breaks tests #253

Closed zygmuntszpak closed 1 year ago

zygmuntszpak commented 1 year ago

The Project.toml file lists compatibility with TiledIteration 4.0 but the current implementation needs to be refactored to support it. At the moment using the latest version of TiledIteration makes several tests fail. For example:

1d: Error During Test at /home/zygmunt/.julia/dev/ImageFiltering/test/nd.jl:14
  Got exception outside of a @test
  TaskFailedException
  Stacktrace:
    [1] wait
      @ ./task.jl:345 [inlined]
    [2] threading_run(fun::ImageFiltering.var"#160#threadsfor_fun#51"{ImageFiltering.var"#160#threadsfor_fun#50#52"{CPU1{ImageFiltering.Algorithm.FIRTiled{1}}, Vector{Float64}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, NoPad{Pad{1}}, Vector{Tuple{UnitRange{Int64}}}, Vector{Tuple{Vector{Float64}, Vector{Float64}}}, UnitRange{Int64}}}, static::Bool)
      @ Base.Threads ./threadingconstructs.jl:38
    [3] macro expansion
      @ ./threadingconstructs.jl:89 [inlined]
    [4] _imfilter_tiled_threads!(r1::CPU1{ImageFiltering.Algorithm.FIRTiled{1}}, out::Vector{Float64}, A::OffsetVector{Float64, Vector{Float64}}, k1::OffsetVector{Float64, Vector{Float64}}, kt::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, border::NoPad{Pad{1}}, tileinds_all::Vector{Tuple{UnitRange{Int64}}}, tiles::Vector{Tuple{Vector{Float64}, Vector{Float64}}})
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:900
    [5] _imfilter_tiled!(r::CPUThreads{ImageFiltering.Algorithm.FIRTiled{1}}, out::Vector{Float64}, A::OffsetVector{Float64, Vector{Float64}}, kernel::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, border::NoPad{Pad{1}}, tiles::Vector{Tuple{Vector{Float64}, Vector{Float64}}}, indsout::Tuple{Base.OneTo{Int64}})
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:896
    [6] imfilter!(r::CPUThreads{ImageFiltering.Algorithm.FIRTiled{1}}, out::Vector{Float64}, A::OffsetVector{Float64, Vector{Float64}}, kernel::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, border::NoPad{Pad{1}}, inds::Tuple{Base.OneTo{Int64}})
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:778
    [7] imfilter!
      @ ~/.julia/dev/ImageFiltering/src/imfilter.jl:775 [inlined]
    [8] imfilter!
      @ ~/.julia/dev/ImageFiltering/src/imfilter.jl:716 [inlined]
    [9] imfilter!(r::CPUThreads{ImageFiltering.Algorithm.FIRTiled{1}}, out::Vector{Float64}, img::UnitRange{Int64}, kernel::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, border::Pad{0})
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:703
   [10] imfilter!(out::Vector{Float64}, img::UnitRange{Int64}, kernel::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, border::Pad{0}, alg::ImageFiltering.Algorithm.FIRTiled{1})
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:612
   [11] imfilter!
      @ ~/.julia/dev/ImageFiltering/src/imfilter.jl:606 [inlined]
   [12] imfilter
      @ ~/.julia/dev/ImageFiltering/src/imfilter.jl:27 [inlined]
   [13] imfilter(::Type{Float64}, ::UnitRange{Int64}, ::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, ::String)
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:22
   [14] imfilter
      @ ~/.julia/dev/ImageFiltering/src/imfilter.jl:18 [inlined]
   [15] imfilter(::UnitRange{Int64}, ::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}})
      @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:5
   [16] macro expansion
      @ ~/.julia/dev/ImageFiltering/test/nd.jl:61 [inlined]
   [17] macro expansion
      @ /media/zygmunt/big/Julia/share/julia/stdlib/v1.8/Test/src/Test.jl:1360 [inlined]
   [18] top-level scope
      @ ~/.julia/dev/ImageFiltering/test/nd.jl:15
   [19] include(fname::String)
      @ Base.MainInclude ./client.jl:476
   [20] top-level scope
      @ ~/.julia/dev/ImageFiltering/test/runtests.jl:37
   [21] include(fname::String)
      @ Base.MainInclude ./client.jl:476
   [22] top-level scope
      @ none:6
   [23] eval
      @ ./boot.jl:368 [inlined]
   [24] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:276
   [25] _start()
      @ Base ./client.jl:522

      nested task error: MethodError: no method matching _imfilter_tiled_swap!(::CPU1{ImageFiltering.Algorithm.FIRTiled{1}}, ::Vector{Float64}, ::Tuple{OffsetVector{Float64, Vector{Float64}}}, ::NoPad{Pad{1}}, ::Tuple{TiledIteration.TileBuffer{Float64, 1, 1}, OffsetVector{Float64, Vector{Float64}}})
      Closest candidates are:
        _imfilter_tiled_swap!(::Any, ::Any, ::Tuple{Any}, ::Any, ::Tuple{TiledIteration.TileBuffer, Array}) at ~/.julia/dev/ImageFiltering/src/imfilter.jl:925
        _imfilter_tiled_swap!(::Any, ::Any, ::Tuple{Any, Any, Vararg{Any}}, ::Any, ::Tuple{TiledIteration.TileBuffer, Array}) at ~/.julia/dev/ImageFiltering/src/imfilter.jl:914
      Stacktrace:
       [1] _imfilter_tiled_swap!(r::CPU1{ImageFiltering.Algorithm.FIRTiled{1}}, out::Vector{Float64}, kernel::Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, border::NoPad{Pad{1}}, tmp::Tuple{TiledIteration.TileBuffer{Float64, 1, 1}, Vector{Float64}})
         @ ImageFiltering ~/.julia/dev/ImageFiltering/src/imfilter.jl:921
       [2] macro expansion
         @ ~/.julia/dev/ImageFiltering/src/imfilter.jl:906 [inlined]
       [3] (::ImageFiltering.var"#160#threadsfor_fun#51"{ImageFiltering.var"#160#threadsfor_fun#50#52"{CPU1{ImageFiltering.Algorithm.FIRTiled{1}}, Vector{Float64}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, NoPad{Pad{1}}, Vector{Tuple{UnitRange{Int64}}}, Vector{Tuple{Vector{Float64}, Vector{Float64}}}, UnitRange{Int64}}})(tid::Int64; onethread::Bool)
         @ ImageFiltering ./threadingconstructs.jl:84
       [4] #160#threadsfor_fun
         @ ./threadingconstructs.jl:51 [inlined]
       [5] (::Base.Threads.var"#1#2"{ImageFiltering.var"#160#threadsfor_fun#51"{ImageFiltering.var"#160#threadsfor_fun#50#52"{CPU1{ImageFiltering.Algorithm.FIRTiled{1}}, Vector{Float64}, OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}, Tuple{OffsetVector{Float64, Vector{Float64}}, OffsetVector{Float64, Vector{Float64}}}, NoPad{Pad{1}}, Vector{Tuple{UnitRange{Int64}}}, Vector{Tuple{Vector{Float64}, Vector{Float64}}}, UnitRange{Int64}}}, Int64})()
         @ Base.Threads ./threadingconstructs.jl:30
johnnychen94 commented 1 year ago

closed by #255