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

Errors with loggers

Open Arkoniak opened this issue 4 years ago • 1 comments
trafficstars

This is probably intended, but I get strange errors, when trying to use loggers inside @floop

This code

using FLoops

function foo(ex = ThreadedEx())
    @floop ex for i in 1:10
        @info "" i Threads.threadid()
    end
end

produces error (during compilation, I didn't even had a chance to execute the code

ERROR: LoadError: deepcopy of Modules not supported
Stacktrace:
[1]  FLoops ~/.julia/packages/FLoops/yli1G/src/macro.jl:51
  var"@floop"(__source__::LineNumberNode, __module__::Module, executor::Any, ex::Any)
[2]  FLoops ~/.julia/packages/FLoops/yli1G/src/reduce.jl:269
  floop_parallel(ctx::FLoops.MacroContext, ex::Expr, simd::Bool, executor::Symbol)
[3]  FLoops ~/.julia/packages/FLoops/yli1G/src/reduce.jl:385
  as_parallel_loop(ctx::FLoops.MacroContext, rf_arg::Symbol, coll::Expr, body0::Expr, simd::Bool
, executor::Symbol)
[4]  ./deepcopy.jl:26 [inlined]
  deepcopy
[5]  Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[6]  Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[7]  Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[8]  Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[9]  Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[10] Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[11] Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[12] Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[13] Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[14] Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[15] Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[16] Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[17] Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[18] Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[19] Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[20] Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[21] Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[22] Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[23] Base ./deepcopy.jl:65
  deepcopy_internal(x::Any, stackdict::IdDict{Any, Any})
[24] Base ./deepcopy.jl:92
  deepcopy_internal(x::Vector{Any}, stackdict::IdDict{Any, Any})
[25] Base ./deepcopy.jl:105
  _deepcopy_array_t(x::Array, T::Type, stackdict::IdDict{Any, Any})
[26] Base ./deepcopy.jl:33
  deepcopy_internal(x::Module, stackdict::IdDict{Any, Any})
[27] Base ./error.jl:33
  error(s::String)

N.B.: ThreadsX do not have this problem

using ThreadsX

julia> ThreadsX.foreach(1:10) do i
           @info "" i Threads.threadid()
       end
[2021-08-07 22:53:35] Info: i = 1, Threads.threadid() = 2
[2021-08-07 22:53:35] Info: i = 2, Threads.threadid() = 3
[2021-08-07 22:53:35] Info: i = 9, Threads.threadid() = 4
[2021-08-07 22:53:35] Info: i = 3, Threads.threadid() = 1
[2021-08-07 22:53:35] Info: i = 5, Threads.threadid() = 4
[2021-08-07 22:53:35] Info: i = 4, Threads.threadid() = 3
[2021-08-07 22:53:35] Info: i = 6, Threads.threadid() = 1
[2021-08-07 22:53:35] Info: i = 10, Threads.threadid() = 2
[2021-08-07 22:53:35] Info: i = 7, Threads.threadid() = 4
[2021-08-07 22:53:35] Info: i = 8, Threads.threadid() = 3

Arkoniak avatar Aug 07 '21 19:08 Arkoniak

+1 I would also like to know if @info etc should be supported inside @floop or what the recommended pattern is. Thanks!

jeffpollock9 avatar Nov 08 '22 17:11 jeffpollock9