Это действительно продолжение этого вопроса , так как я думаю, что я решил проблему, которую задал первоначальный вопрос, но теперь у меня есть некоторые другие проблемы.
У меня естьнекоторый код 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.
Есть идеи?