coo*_*lsv 4 multithreading iterator for-loop enumerate julia
为什么这段非常简单的代码会在 Julia 1.1 中导致错误?
Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
println(value^index)
end
Run Code Online (Sandbox Code Playgroud)
显示的错误是:
Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
Run Code Online (Sandbox Code Playgroud)
我想在使用迭代器的Threads.@threads地方使用更复杂的代码enumerate。
的Threads.@threads马可预计的阵列,以仅遍历。在这里,您可以找到有关 Discourse 的主题的链接。
因此,目前您必须仅使用 egaxes或 eg迭代索引collect eachindex(这并不理想)。
所以在你的情况下,这将是:
vec = [0.1,0.2,0.3]
Threads.@threads for index in axes(vec, 1)
println(vec[index]^index)
end
Run Code Online (Sandbox Code Playgroud)
或者
Threads.@threads for (index,value) in collect(enumerate([0.1,0.2,0.3]))
println(value^index)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |