2014-05-01 2 views
0

MPI를 사용하여 병렬 블록 행렬 계산 (Element By Wise)을 프로그래밍해야합니다. 계산을 위해 노드에 행 현명한 할당 전에 프로그래밍했습니다. 현재 문제는 내가 결과 매트릭스의 요소에 따라 작업을 나눌 필요합니다.병렬 행렬 곱셈 MPI (요소 현명한 계산)

데이터를 노드로 배포하는 방법을 계속 시도했지만 해결되지 않았습니다. 어떻게 할 수 있는지에 대한 논리를 이해하도록 도와 주시겠습니까?

답변

0

이렇게 거꾸로 작업 해 보겠습니다. 나의 표기법은 A * B = C에서 올 것이다. C의 각 요소는 A의 해당 행과 B의 열에서 만들어집니다. A (i, 0 : n) * B (0 : n, j) = C (i, j). 따라서 C의 각 요소에 대해 A 행과 B 열이 필요합니다. 각 블록을 C 블록으로 풀려면 A의 해당 행과 B의 모든 해당 행이 필요합니다. C를 블록으로 나누고 각 블록에 필요한 범위를 얻습니다. C (i1 : i2, j1 : j2)에는 A (i1 : i2,0 : n) 및 B (0 : n, j1 : j2)가 필요합니다. 이 데이터를 배포하려면 MPI_Scatter 및/또는 MPI_Scatterv (사용해야 할 메모리 레이아웃에 따라 다름)를 사용하는 것이 좋습니다.

+0

지금 데이터를 전송하는 데 어려움을 겪고 있습니다. 데이터를 2 차원 배열로 저장합니다. 서브 행렬은 작업자 노드로 보내야합니다. 지금까지 MPI_Type_vector 솔루션을 제안한 다음 MPI_send를 통해 전송해야합니다. 하지만 작동하지 않습니다. 문제는 newdata 형식을 만드는 것입니다. 형식 벡터를 사용하여 서브 행렬을 보내고 전화를 보내는 방법에 대한 몇 가지 예를 들려 주시겠습니까? – user3319128

+0

MPI_Type_commit을 사용하여 새 유형을 커밋했는지 기억해 봤습니까? – JamesTullos

+0

문제 완료, 감사합니다. – user3319128