Nested @threads
works in Julia 1.3 and later in the sense it doesn’t crash (before, it sometimes did, IIRC). But parallelization only happens at the outer-most for
loop. So, if you want load-balance across multiple levels of for
loops, I don’t think @threads
is a good option.
FWIW, I think we need a better tooling for threading in Julia. @spawn
is too much of a foot-gun for high-level programming and @threads
is too limited for nested case. FYI, I’m packaging up a high-level threading API as ThreadsX.jl which includes ThreadsX.foreach
that supports (possibly nested) parallel loops. I requested registration a few days ago so hopefully this will be registered soon.