Извините, я не могу опубликовать исходный код ...
У меня есть код, выполняющий алгоритм мастер / слейв красно-черный для решателя 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
Заранее спасибо за помощь