저는 MPI를 사용하여 분산 이미지 (그레이 스케일) 컨볼 루션을 구현하고 있습니다. 내 기존 패턴은 루트 프로세스에서 이미지를 1D 병합 된 배열로 읽은 다음 루트 프로세스에서 MPI_Gather
을 수행 한 다음 이미지를 다시 1D로 평평하게 써야합니다 (행 분해). 정렬. 이미지 컨볼 루션 (image convolution)으로 인해 상황이 경계에서 까다로워지기 때문에 이것은 분명히 예상 된 결과를 제공하지 못합니다.MPI의 고스트 셀 교환 패턴
if (rank == 0) {
src = null
dest = rank + 1
}
if (rank == size - 1) {
src = rank - 1
dest = null
} else {
src = rank - 1
dest = rank + 1
}
MPI_SendRecv(&sendbuf[offset], slen, dest..
&recvbuf[offset], rlen, src);
가 어떻게이 "유령 메모리를 할당 않습니다
따라서, 상기 패턴을 개선하기 위해, 나는 과정이 의사에서 ghost rows.
에서 자신의 행을 교환하는 것을 특징으로 소위 ghost cell exchange
패턴을 구현하려면 행 "? 메모리를 미리 할당 한 다음 분산시켜야합니까? 내가 고려하고있는 문제의 범위를 과도하게 다루기 때문에 "custom-datatype"솔루션을 사용하고 싶지 않습니다.
답변을 작성해 주셔서 감사합니다. 의사 소통 비용에 대해 언급했습니다. 이제 이미지 크기가 커지면서이 모델을 테스트하면 성능이 떨어집니다. –
기본적으로 1D 분해의 통신 비용은 2D 분해 *보다 나쁩니다. 통신 오버 헤드는 이미지 크기 (더 큰 = 더 낳음), 순위 (덜 = 더 좋음) 및 반복마다 계산 (더 좋음)의 균형에 따라 다릅니다. – Zulan
나는 그 부분에 동의한다. 1d 통신은 많은 교류를 필요로 할 것이다. 모든 도움에 감사드립니다. 빨리 답변을 수락하겠습니다. –