Отправить c ++ std :: vector <bool>через mpi - PullRequest
4 голосов
/ 22 января 2020

Я знаю, что хранилище std::vector<bool> не обязательно является массивом bools .

. Если я хочу отправлять, получать данные int, хранящиеся в std::vector<int>, я бы используйте MPI_Send(vect.data(),num_of_ints,MPI_INT,dest_rk,tag,comm).

Как мне использовать MPI_Send для отправки std::vector<bool>? В частности:

  • Можно / нужно ли использовать vect.data() в качестве указателя на буфер?
  • Какой тип MPI мне следует указать? Почему-то я чувствую, что MPI_CXX_BOOL не относится (см. Этот вопрос )
  • Какое количество элементов я должен дать? (относится к предыдущему пункту)

1 Ответ

4 голосов
/ 22 января 2020

std::vector<bool> специализация не имеет функции-члена data(). Базовая схема хранения не указана стандартом:

Нет необходимости хранить данные в виде непрерывного распределения значений bool. Вместо этого рекомендуется оптимизированное для пространства представление битов.

Единственный разумный вариант для отправки std::vector<bool> - это скопировать его в вектор char (или в некоторый подобный тип, такой как std::int8_t) , а затем отправить этот вектор. Лучшим вариантом было бы избежать std::vector<bool> в вашем коде с самого начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...