2010-03-22 2 views
4

행 대신 열로 Fortran 90 행렬을 분산시키는 가장 좋은 방법은 무엇입니까? 즉, 행렬이 (4,50)이고 MPI_SCATTER를 사용하여 각 부분이 alocal (2,50) 인 두 프로세스에 매핑하려고합니다. 여기서 rank 0은 행 1과 2가 있고 순위 1은 3과 3입니다. 4. 이제는 C에서 배열이 행 메이저이기 때문에 이것은 간단하지만 Fortran 90에서는 행렬입니다.MPI_SCATTER 행에 의한 Fortran 행렬

나는 산란 전에 (즉, 메모리 사용을 두 배로) 뒤집기 위해 TRANSPOSE을 사용하지 않으려 고합니다. 그리고 이것을 수행하는 방법이 MPI에 있어야한다고 생각합니다. 그것은 MPI_TYPE_VECTOR일까요? MPI_TYPE_CREATE_SUBARRAY?

마찬가지로, 3d 배열 b (4,50,3)이 있고 위와 같이 배포 된 blocal (2,50,3)의 두 분산 된 행렬을 원한다면 어떻게해야합니까?

+0

하! 그걸 알아 채지 못 했어. –

답변

1

예, MPI_TYPE_VECTOR 및 MPI_TYPE_CREATE_SUBARRAY는 원하는 것입니다. 첫번째 문제는 전자, 두 번째 문제는 후자. 내가 당신을 위해 전화를 쓰기를 원하면 해설!

+0

나는 일하기가 어려워서 당신의 기술을 알고 싶습니다. VECTOR 하나가 쓰레기를 계속 보내고 SUBARRAY 호출이 SCATTER와 작동하지 않는 것처럼 보입니다. 그것은 0으로 등급이 매겨 지지만, 1로 등급이 매겨지지 않습니다. SUBARRAY를 할 때 모든 사람들이 볼 수 있도록 큰 배열을 방송해야합니까? 그렇다면 BCAST를 사용하기 쉽고 어레이 슬라이스 만 사용하면됩니다. 아니면 SCATTERV를 사용해야합니까? –

+0

미안 해요 @ 포트란, 걸어서 갔다. 이걸 정리 했니? 그렇지 않다면, 나는 내일 대답하려고 노력할 것이다. –

0

대부분의 MPI 데이터 전송 호출에 stride 인수가 없었습니까? 데이터 유형의 크기와 행렬의 높이를 곱한 값으로 설정하십시오.

나는 MPI reference을 살펴 봤지만 명시 적 인수는 없었지만 이동하면 예제 5.12에서 그들은 MPI_ScattervMPI_Gatherv으로 스트라이드 된 int를 보내는 법을 보여줍니다.