Есть ли проблема в C с malloc и MPI? - PullRequest
0 голосов
/ 04 марта 2010

Извините, я не могу опубликовать исходный код ...

У меня есть код, выполняющий алгоритм мастер / слейв красно-черный для решателя G.S. В простом случае матрица разбивается на 4 вычислительных элемента равномерного размера. Изображения 1-3 выполняют свою часть вычислений и отправляют обратно буферы с результатами на изображение 0. Проблема заключается в следующем:

У меня есть malloc достаточно большой массив, чтобы вместить все части, чтобы я мог отобразить отдельные результаты обратно в одну сетку. Проблема, похоже, заключается в том, что на изображении 0 после вызова MPI_Recv этот процесс больше не знает, что сетка была malloc’d для хранения всего объекта. Я получаю ошибку каждый раз, когда пытаюсь что-то поместить в эту сетку. Единственный обходной путь, который я нашел, который работает, состоит в том, чтобы выполнить malloc для всех процессов и снова malloc для нулевого процесса прямо перед MPI_Recv.

Есть идеи, почему он, по-видимому, теряет ссылку на ранее выделенную память?

В псевдокоде:

Malloc whole[][] Have to have this allocated
Malloc partial[]
Perform compute on whole[]

If(image!= 0) MPI_Send(whole[])
Else (if image==0) 
  Malloc whole[][] again!  and this allocated otherwise the problem happens
  Loop over other images
  MPI_Recv(partial)
  Put partial[] into whole[][] Here is where the problem occurs
Endif

Заранее спасибо за помощь

1 Ответ

2 голосов
/ 04 марта 2010

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

...