2017-11-28 1 views
0

나는 MPI 병렬 프로세스을 사용하는 데있어 매우 새로운 기술입니다.2D 배열이있는 MPI 마스터/슬레이브

MASTER/SLAVE 접근과 관련된 다음과 같은 문제를 다루고 있습니다.

은 내가 2D 제곱 배열 SIZE=500을 가지고, 나는 차원의 여러 블록으로 그것을 깰해야합니다

D < SIZE.

는 I가 마스터를 구현해야/각 프로세서가 수신하고, N 관여 프로세서의 수 및 서브 블록의 크기에 따라 D 여기서, 마스터 N 블록에 다시 송신 슬레이브 MPI.

원래 배열을 줄무늬로 나눠서 문제를 해결할 수 있었지만 사각형을 다루는 방법을 모르겠습니다!

답변

0

문제를 단순화하기 위해 D는 500의 나눗셈이되어야합니다. 이제 총 블록 수는 blocks = sqr(500/D)이어야합니다. N은 라인 n = blocks/cpus을 따라야합니다.

가장 간단한 방법은 배열에서 DxD 요소의 사각형을 만들고 그 데이터 덩어리를 클라이언트에 보내는 것입니다. 언어와 방법에 따라 작은 객체를 만들어 클라이언트에 보내거나 전체 행렬을 복제하고 청크에 대한 좌표를 보낼 수 있습니다.

0

다른 옵션은 배열의 주어진 (정사각형) 사각형에 대해 파생 데이터 형식을 만들기 위해 MPI_Type_create_subarray()을 사용하는 것입니다.

이 파생 데이터 형식은 MPI_Scatter[v]()MPI_Gather[v]()과 같이 일반적으로 데이터를 분산/다시 어셈블하는 "자연스러운"MPI 방식과 같은 집합 작업에는 사용할 수 없습니다.

+0

링크를 사용하면 어디에서 사용할 수 있습니까? 감사합니다. – rob