Julia 多线程 a 嵌套 for 循环,用于 i 和 j 的组合



我有一个关于Julia中多线程的问题,以及如何有效地并行化for循环。

假设您有一个嵌套的for循环和一台有4个核心的计算机。一个简单的方法是在for循环前面添加Threads.@threads。假设核心可以在没有干扰的情况下运行它们需要做的事情。

正如我所理解的,只有嵌套for循环的最外层是并行的。假设N=15和M=14,那么具有4个核心的计算机将是一个瓶颈。

然而,如果你有一台32核的电脑,那么32-15=17核就什么都不做了。然而,总共将有210个组合需要计算。

这是正确的吗?Threads.@threads就是这样工作的吗?有没有一种方法可以并行化i和j的组合。也许可以使用FLoops?我试着阅读了文件,但是,我需要知道我是否走错了方向。

Threads.@threads for i in 1:N
for j in 1:M
# Do stuff
end
end

与。

using FLoops
@floops for i in 1:N
for j in 1:M
# Do stuff
end
end

提前感谢

您可能有第三个变量,可以将其划分为两个变量。

Threads.@threads for k in 1:(N*M)
j = k % M
i = k ÷ M

或者,使用itertools.product将同时分配i和j,而不需要额外的两行。

@floop for (i,j) in product(1:N,1:M)

最新更新