이것은 실제로 원래 질문에서 제기 한 문제를 해결했지만 지금은 다른 문제가 있다고 생각하여 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 통신에서 나옵니다.
아이디어가 있으십니까?
완전히 수정하십시오. 고맙습니다! 배열의 숫자가 잘못되었습니다 (행 우선 순위를 사용하여 색인을 생성하는 방법에 대해 혼란스러워했습니다). – robintw