Странные двойные значения, появляющиеся при обмене данными MPI - проблемы с памятью?

Это действительно продолжение этого вопроса., так как я думаю, что решил проблему, заданную в исходном вопросе, но теперь есть некоторые другие проблемы.

У меня есть код 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.

Любые идеи?


person robintw    schedule 09.04.2011    source источник


Ответы (1)


Одной из потенциальных проблем является непоследовательная индексация array. В строке 223 кажется, что i и j могут быть обратными. (Я не уверен, что при просмотре этого iPod Touch номера строк совпадают. Это цикл с комментарием «Вычислить смещения») j и i меняются местами строки для столбцов по сравнению с другими циклами. Похоже, вы по-разному настроили это в комментариях... так что, возможно, это ожидаемо. Я не очень хорошо вижу весь код, так как сейчас использую iPod touch с ограниченным обзором. Но эта часть кажется неправильной.

И последний цикл тоже кажется неправильным. В этом случае j и i также меняются местами по сравнению с другими петлями.

person Mark Wilkins    schedule 09.04.2011
comment
Совершенно правильно. Спасибо! Было несколько массивов в неправильном порядке (я все время путался в том, какой способ индексировать, чтобы убедиться, что он использует порядок строк). - person robintw; 11.04.2011