Я пытаюсь отправить некоторые данные от рабочих хозяину (ранжированному 0) в программе MPI в C++. Цель состоит в том, чтобы передать 2 строки и целое число. Для этого я создал структуру.Отправить struct с char [] в MPI
структура
Это называется слово и определяется следующим образом:
struct word
{
char word_name[str_size];
char url[str_size];
int counter;
};
/* Some important variables to the question */
MPI_Datatype mpi_word_type;
const int str_size = 200;
Ранее я пытался это через char *
, но он не работает, так как процессы не использовать одно и то же пространство памяти.
К настоящему моменту я могу отправить структуру, если я изменил переменные от char[]
до простого char
и попробую на примере. С этим, как это выше, я не могу избавиться от Ошибка сегментации ошибок.
Отправка часть - Рабочие
я начала путем создания и заполнения пример-структуру, а затем отправка размер структуры первого и самого-структуру, во-вторых. Как это:
word word_col;
std::string tmp = "somename";
strcpy(word_col.word_name, tmp.c_str());
std::string tmp2 = "someurl";
strcpy(word_col.url, tmp2.c_str());
word_col.counter = 10;
int size = sizeof(word_col);
MPI::COMM_WORLD.Send(&size, 1, MPI::INT, 0, 1);
MPI::COMM_WORLD.Send(&word_col, size, mpi_word_type, 0, 1);
принимающую часть - Master
const int nitems = 3;
int blocklengths[3] = { str_size, str_size, 1 };
MPI_Datatype types[3] = { MPI::CHAR, MPI::CHAR, MPI::INT };
MPI_Aint offsets[3];
offsets[0] = (MPI_Aint) offsetof(struct word, word_name);
offsets[1] = (MPI_Aint) offsetof(struct word, url);
offsets[2] = (MPI_Aint) offsetof(struct word, counter);
MPI_Type_create_struct(nitems, blocklengths, offsets, types, &mpi_word_type);
MPI_Type_commit(&mpi_word_type);
...
for(...)
{
word word_col;
int size;
MPI::COMM_WORLD.Recv(&size, 1, MPI::INT, MPI::ANY_TAG, 1, status);
MPI::COMM_WORLD.Recv(&word_col, size, mpi_word_type, MPI::ANY_TAG, 1, status);
}
Я боролся с этим в течение нескольких часов, и я видел много примеров и еще вопросы по этому поводу, но я не мог выяснить, в чем проблема.
У моей предыдущей структуры в вопросе возникла ошибка. Я пытался кое-что попробовать, и в этом причина. Я исправил его, чтобы иметь '[str_size]'. Но это не так. –
@ gd.silva, поэтому одна часть, которую вы уже исправили, проверьте, если вы передаете правильный размер при приеме, проверьте мои измененные и –
Да, я передаю правильный размер. Переменная 'size' такая же, как' sizeof (word_col) ', потому что я делаю это' sizeof' перед отправкой. –