Scala负载平衡与检索
我试图在scala中实现并行dijkstra算法。我有一个大的邻接矩阵,我想把100个索引的工作分配给每个参与者 是否有任何方法可以像我们在MPI中那样将工作负载分配给不同的参与者(使用MPI_Scatter() 是否有任何方法可以像MPI(MPI_AllReduce/MPI_broadcast)那样减少/广播结果 我能想到的一个残忍的方法是将整个矩阵传递给每个参与者,但这会破坏使用参与者的目的。此外,如果我这样做,那么如果参与者位于远程位置将不是一个好主意 任何建议都会大有帮助Scala负载平衡与检索,scala,mpi,akka,actor,Scala,Mpi,Akka,Actor,我试图在scala中实现并行dijkstra算法。我有一个大的邻接矩阵,我想把100个索引的工作分配给每个参与者 是否有任何方法可以像我们在MPI中那样将工作负载分配给不同的参与者(使用MPI_Scatter() 是否有任何方法可以像MPI(MPI_AllReduce/MPI_broadcast)那样减少/广播结果 我能想到的一个残忍的方法是将整个矩阵传递给每个参与者,但这会破坏使用参与者的目的。此外,如果我这样做,那么如果参与者位于远程位置将不是一个好主意 任何建议都会大有帮助 谢谢听起来您正
谢谢听起来您正在寻找的是Akka路由: 基于广播或分散/聚集的路由器可能是您正在寻找的用于执行“蛮力”并行算法的路由器
然而,你是对的;这种“野蛮”的尝试部分地挫败了使用参与者的目的。Dijkstra的算法已经存在并行版本。快速看一眼,它看起来主要是基于分而治之的算法,其中图形被划分为子图任务,其中跨参与者通信和广播是关键。这听起来确实像是Akka为之构建的问题。Akka路由只将消息路由到参与者。它不提供将负载分配给参与者的选项,或者可能我遗漏了一些内容。不,您是对的,路由不负责分配负载。这是som的一项实现任务eone else(如父参与者)。当有效负载被划分时,您可以将每个子有效负载发送到路由器n次。您将路由器视为单个参与者,但在它后面是m个路由参与者,它们可能会对每个子有效负载执行相同的计算(即“分而治之”或MapReduce中的映射器)。