2011-04-09 5 views
1

이것은 실제로 원래 질문에서 제기 한 문제를 해결했지만 지금은 다른 문제가 있다고 생각하여 this question의 후속 조치입니다.MPI 통신에서 나타나는 이상한 이중 값 - 메모리 문제?

행렬 조인을 수행하는 일부 MPI 코드가 있습니다. 이것은 MPI_Isend와 MPI_Irecv를 사용하는 point-to-point non-blocking 통신을 통해이를 수행합니다. 나는 double과 함께 작업하고 있으며, 모든 MPI 코드는 MPI_DOUBLE을 타입으로 사용합니다. 그러나, 나는 이상한 기억 문제를 겪고있는 것 같다. 그 중 핵심은 내 말에 '말도 안되는'숫자를 넣는 것이다. 예를 들면 :

Test Process (2, 1): 68.000000 78.000000 
Test Process (2, 1): 387323398486945739062068424931898425134839058804189460794109462554519403357109477747039490936107027309191462010675537134594564349232145421118587860238537662203953149049188364045280831238661272720084252520359127715290869606638545797120.000000 881150864511763756676254370742733018389256944202962553716402946507192139671624750374865205489904045881646541419557063427368973644261533211221769931916194052019466643963904.000000 
Test Process (2, 1): 78.000000 88.000000 

어떻게 든 메모리 문제가 있음을 추측 할 수 - 내가 그렇지 않은 경우 이중 일부 메모리를 읽거나 그렇지 않은 경우 이중으로 메모리에 쓰고 있어요. 이 디버깅에 대해 어떻게 생각하세요?

코드는 here을 사용할 수 있지만 코드의 자세한 분석, MPI 통신을 사용하여 이러한 종류의 오류가 발생할 수있는 방법에 대한 자세한 팁을 기대하지 않으며 오류를 추적하기 위해 수행 할 수있는 작업 .

몇 가지 사항을 확인해 보았습니다. 배열을 초기화해도 문제가되지 않습니다. 나는 알려진 값 (999)로 배열 초기화를 시도했는데 결국 어레이에 나타나지 않으므로 모든 새로운 값 (미친 것들 포함)은 MPI 통신에서 나옵니다.

아이디어가 있으십니까?

답변

1

잠재적 인 문제는 일치하지 않는 색인 생성이 array 인 것입니다. 223 행에서, i와 j는 뒤로 향하는 것처럼 보입니다. (나는이 iPod Touch에서 행 번호가 일치하는지 확인하지 못합니다. "Calculate the offsets"주석이있는 루프입니다.) j와 i는 다른 루프와 비교하여 열의 행을 바꿔 놓았습니다. 그것은 의견에 몇 가지 다른 방법을 조정했습니다 ... 그래서 어쩌면 그것은 예상됩니다. 현재 제한된보기로 iPod touch를 사용하고 있기 때문에 전체 코드를 잘 볼 수 없습니다. 그러나 그 부분은 틀린 것처럼 보입니다.

마지막 루프도 올바르지 않은 것처럼 보입니다. 그 중 하나는 j와 i도 다른 루프와 비교하여 반전됩니다.

+0

완전히 수정하십시오. 고맙습니다! 배열의 숫자가 잘못되었습니다 (행 우선 순위를 사용하여 색인을 생성하는 방법에 대해 혼란스러워했습니다). – robintw