Это действительно продолжение этого вопроса., так как я думаю, что решил проблему, заданную в исходном вопросе, но теперь есть некоторые другие проблемы.
У меня есть код MPI, который выполняет транспонирование матрицы. Это делается через неблокирующую связь точка-точка с использованием MPI_Isend и MPI_Irecv. Я работаю с двойниками, и весь мой код 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
Я могу предположить, что каким-то образом возникает проблема с памятью — я читаю часть памяти как двойную, когда это не так, или записываю в память как двойную, когда это не так. Любая идея, как я могу отладить это?
Код доступен здесь, но я не ожидаю детального анализа кода, дополнительных советов по как такого рода ошибки могут возникнуть при использовании связи MPI, и что я мог бы сделать, чтобы отследить ошибку.
Просто чтобы подтвердить несколько вещей, которые я пробовал: это не проблема с инициализацией массива. Я попытался инициализировать массив известным значением (999), но оно не появляется в конце массива, поэтому очевидно, что все новые значения (включая сумасшедшие) поступают из сообщений MPI.
Любые идеи?