元の質問で尋ねられた問題は解決したと思いますが、他の問題がいくつかあります。
行列の転置を行っている MPI コードがあります。これは、MPI_Isend と MPI_Irecv を使用したポイント ツー ポイントのノンブロッキング通信を介して行われます。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
どういうわけかメモリの問題があると推測できます-そうでない場合は一部のメモリをdoubleとして読み取り、そうでない場合はdoubleとしてメモリに書き込みます。これをデバッグする方法はありますか?
コードはこちらから入手できますが、コードの詳細な分析、MPI 通信を使用してこの種のエラーが発生する可能性に関するヒント、およびエラーを追跡するために何ができるかについての詳細は期待していません。
私が試したいくつかのことを確認するために、配列の初期化に問題はありません。配列を既知の値 (999) に初期化しようとしましたが、それは最後に配列に表示されないため、明らかにすべての新しい値 (クレイジーなものを含む) は MPI 通信からのものです。
何か案は?