Parallel processing 如何在julia中执行并行mapreduce?

Parallel processing 如何在julia中执行并行mapreduce?,parallel-processing,mapreduce,julia,distributed-computing,Parallel Processing,Mapreduce,Julia,Distributed Computing,如何在julia中执行并行mapreduce? 我见过mapreduce函数,但它不是并行/分布式的 假设我想要3333333 1除以一个数字的最大余数是多少≤ 16666665 这可以通过以下方式实现: julia> mapreduce(x-> rem(33333331, x), max, 1:16666665) 11111109 在这个精心设计的示例中,它运行良好,没有并行性。 但我对并行处理很感兴趣可以通过@parallel for完成 : 分布式。@parallel-Mac

如何在julia中执行并行mapreduce? 我见过mapreduce函数,但它不是并行/分布式的

假设我想要3333333 1除以一个数字的最大余数是多少≤ 16666665

这可以通过以下方式实现:

julia> mapreduce(x-> rem(33333331, x), max, 1:16666665)
11111109
在这个精心设计的示例中,它运行良好,没有并行性。 但我对并行处理很感兴趣

可以通过@parallel for完成

:

分布式。@parallel-Macro。 指定的范围已分区,并在所有工作区中本地执行。如果指定了可选的reducer函数,@parallel将对每个辅助进程执行本地缩减,并在调用进程上执行最终缩减

所以你的代码变成了

julia> @parallel max for x in 1:16666665
              rem(33333331, x)
       end
11111109
我不喜欢并行for循环,但它确实起到了作用 这是一个有问题的语法,因为for循环通常没有有意义的返回值,而这个循环有,它使用It循环内容的返回值

你可以用一些东西来隐藏它,如果我没有搞砸的话,这些东西可以匹配Base.mapreduce的工作方式

这可以通过@parallel for完成

:

分布式。@parallel-Macro。 指定的范围已分区,并在所有工作区中本地执行。如果指定了可选的reducer函数,@parallel将对每个辅助进程执行本地缩减,并在调用进程上执行最终缩减

所以你的代码变成了

julia> @parallel max for x in 1:16666665
              rem(33333331, x)
       end
11111109
我不喜欢并行for循环,但它确实起到了作用 这是一个有问题的语法,因为for循环通常没有有意义的返回值,而这个循环有,它使用It循环内容的返回值

你可以用一些东西来隐藏它,如果我没有搞砸的话,这些东西可以匹配Base.mapreduce的工作方式


可能有点晚,但有一个包提供了mapreduce的并行实现。

可能有点晚,但有一个包提供了mapreduce的并行实现

julia> function pmapreduce(mapfun, redfun, iters...)
           @parallel redfun for arg in collect(zip(iters...))
                  mapfun(arg...)
           end
       end
pmapreduce (generic function with 1 method)

julia> pmapreduce(x-> rem(33333331, x), max, 1:16666665)
11111109