2014-04-14 1 views
0

병렬 dijkstra 알고리즘을 스칼라로 구현하려고합니다. 나는 커다란 인접성 매트릭스를 가지고 있으며, 각 배우에게 100 개의 인덱스라고하는 작업을 나누고 싶습니다.스칼라로드 균형 조정 및 검색

우리가 (MPI_Scatter를 사용하여 MPI에서처럼 다른 배우들에 대한 작업 부하를 분할 할 수있는 방법이 있나요()

는 MPI (MPI_AllReduce/MPI_Broadcast)에서와 같은 결과를 방송 줄일 수있는 방법이 /가 있습니다.

내가 생각할 수있는 한 가지 짐승 한 방법은 전체 매트릭스를 전달하고 각 액터에 색인을 전달하는 것입니다. 그러나 이는 액터 사용의 목적을 무효화 할 것입니다. 게다가 내가 이렇게하면 좋은 생각이 아닙니다. 배우가 원격 위치에 있습니다.

어떤 제안이라도 도움이 될 것입니다.

감사

그것은 Akka 라우팅 같은 소리

답변

0

당신이 찾고있는 무엇 : http://doc.akka.io/docs/akka/snapshot/scala/routing.html

방송 또는 분산/아마 당신이 당신의 '짐승'을 수행하는 찾고있는 것이다 기반 라우터를 수집 병렬 알고리즘을 강제로 .

그러나 귀하는 옳습니다. 이 '짐승 같은'시도는 배우를 사용하는 목적을 부분적으로 무효로 만듭니다. 이미 Dijkstra 알고리즘의 병렬화 된 버전이 존재합니다. 간략하게 살펴보면, 주로 그래프를 나누기 및 정복 기반 알고리즘으로 간주하여 그래프가 교차 액터 통신 및 방송이 핵심 인 하위 그래프 작업으로 분할됩니다. 이것은 분명 Akka가 구축 한 문제와 비슷합니다.

+1

Akka 라우팅은 메시지를 액터로 라우팅합니다. 페이로드를 액터로 나눌 수있는 옵션을 제공하지 않거나 무언가를 놓친 것일 수 있습니다. – jigsaw

+0

아니요, 정확합니다. 라우팅이 페이로드 분할을 처리하지 않습니다. 이것은 다른 누군가 (예 : 부모 배우)를위한 구현 작업입니다. 페이로드가 나뉘어지면 각 하위 페이로드를 라우터에 n 번 보낼 수 있습니다. 라우터를 하나의 액터로 취급하지만 그 뒤에는 라우트 된 액터가 있습니다. 서브 액티브마다 똑같은 계산을 수행 할 수 있습니다 (즉, MapReduce의 나누기 및 정복 또는 매퍼). – kdrakon