Извините, я не могу опубликовать исходный код...
У меня есть код, выполняющий красно-черный алгоритм ведущий/ведомый для решателя GS. В простом случае матрица разбивается на 4 вычислительные части одинакового размера. Изображения 1-3 выполняют свою часть вычислений и отправляют обратно буферы с результатами на изображение 0. Проблема заключается в следующем:
Я создал malloc массив, достаточно большой, чтобы вместить все части, чтобы я мог отобразить отдельные результаты обратно в единую сетку. Проблема, по-видимому, заключается в том, что на изображении 0 после вызова MPI_Recv этот процесс больше не знает, что сетка была выделена для хранения всего этого. Я получаю сообщение об ошибке каждый раз, когда пытаюсь что-то поместить в эту сетку. Единственный обходной путь, который я нашел, это выполнить 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
Спасибо за помощь в продвижении