Как правило, нужно было бы определить новый тип и зарегистрировать его в MPI, чтобы использовать его. Мне интересно, если использовать protobuf для сериализации объекта и отправить его с использованием MPI в качестве потока байтов. У меня есть два вопроса:
(1) вы предвидите какие-либо проблемы с этим подходом?
(2) мне нужно отправить информацию о длине через отдельный MPI_Send()
, или я могу исследовать и использовать MPI_Get_count(&status, MPI_BYTE, &count)
?
Примером может быть:
// sender
MyObj myobj;
...
size_t size = myobj.ByteSizeLong();
void *buf = malloc(size);
myobj.SerializePartialToArray(buf, size);
MPI_Isend(buf, size, MPI_BYTE, ... )
...
// receiver
MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status);
if (flag) {
MPI_Get_count(&status, MPI_BYTE, &size);
MPI_Recv(buf, size, MPI_BYTE, ... , &status);
MyObject obj;
obj.ParseFromArray(buf, size);
...
}