2013-09-16 3 views
1

Я хотел бы послать определенный пользователем тип данных, как:MPI отправить производный тип данных с указателем в Fortran 90

TYPE CELL 
    INTEGER :: NUM 
    TYPE(CELL), POINTER :: NEXT => NULL() 
END TYPE CELL 

TYPE CELLLIST 
    INTEGER :: NBCELL 
    TYPE(CELL), POINTER :: BEGIN => NULL() 
END TYPE CELLLIST 

и переменной, подлежащей посланного MPI определяется как:

TYPE(CELLLIST) :: _CELLLIST 

В этой переменной _CELLIST% NBCELL обозначает длину списка, а указатель типа CELL указывает на начало списка.

Я бы хотел использовать MPI_send и MPI_recv для передачи списка сот через MPI. Как это сделать?

ответ

3

Отправка указателей от одного процесса MPI к другому бессмысленна.

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

Вам нужно будет разгадать цепочку указателей в _CELLLIST, отправить через CELLS, а затем перестроить цепочку указателей на целевых процессах.

Я полагаю, что вы можете упаковать CELLS в массив для передачи. Или вы можете отправить один CELL одновременно при том понимании, что процесс (ы) получения будет перестроить динамическую структуру данных в том порядке, в котором он получает сообщения, содержащие CELL.

+0

Большое спасибо за ваше предложение. Я создам массив, чтобы исследовать список сокетов и отправить массив вместо переменной _celllist пользовательского типа. – kaienfr

Смежные вопросы