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

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

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

Есть идеи?

1 Ответ

1 голос
/ 10 апреля 2011

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

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

...