Из документов OpenMPI: синтаксис C++
Request Comm::Irecv(void* buf, int count, const Datatype&
datatype, int source, int tag) const
Итак, я представляю, что делаю что-то вроде:
MPI::Request req;
req = MPI_Irecv(&ballChallenges[i], 2, MPI_INT, i, TAG_AT_BALL, MPI_COMM_WORLD);
Но жалуется:
error: too few arguments to function ‘int MPI_Irecv(void*, int, MPI_Datatype, int, int, MPI_Comm, ompi_request_t**)’
Кажется, мне не хватает ompi_request_t**
, но это не задокументировано? Пытался
MPI_Irecv(&ballChallenges[i], 2, MPI_INT, i, TAG_AT_BALL, MPI_COMM_WORLD, &req);
Но не с
error: cannot convert ‘MPI::Request*’ to ‘ompi_request_t**’ for argument ‘7’ to ‘int MPI_Irecv(void*, int, MPI_Datatype, int, int, MPI_Comm, ompi_request_t**)’
Так что с частью ompi_request_t
?
MPI_Irecv
взято из привязки C. Он не возвращает запрос, а передает его в последнем аргументе. Все функции в привязках C с очень небольшим набором исключений возвращают код состояния MPI. Обратите внимание, что привязки C++ были удалены из стандарта MPI-3.0 и ранее считались устаревшими в MPI-2.2. Вы должны использовать привязки C в приложениях C++. - person Hristo Iliev   schedule 13.11.2012MPI_Request
? Что такое простоint
? Как я могу отменить это тогда? - person Jiew Meng   schedule 13.11.2012Request Comm::Irecv(void* buf,...
который возвращает MPI::Request, или вы можете использовать синтаксис C,MPI_Irecv(&ballChallenges[i], 2, MPI_INT, i, TAG_AT_BALL, MPI_COMM_WORLD, &req);
который принимает переменную типаMPI_Request
как последняя переменная. Вы используете запрос (каким бы образом вы его ни получили) для отмены либо через (синтаксис C++)Request::Cancel()
, либо (синтаксис C)MPI_Cancel(&req);
- person Jonathan Dursi   schedule 13.11.2012