mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
query mpi pack size
This commit is contained in:
parent
828c3c7949
commit
f61e55995a
@ -106,18 +106,32 @@ namespace Opm
|
|||||||
/// combine (per-process) messages
|
/// combine (per-process) messages
|
||||||
Opm::DeferredLogger gatherDeferredLogger(const Opm::DeferredLogger& local_deferredlogger)
|
Opm::DeferredLogger gatherDeferredLogger(const Opm::DeferredLogger& local_deferredlogger)
|
||||||
{
|
{
|
||||||
// Pack local messages.
|
|
||||||
int message_size = sizeof(unsigned int);// to store the number of messages
|
int num_messages = local_deferredlogger.messages_.size();
|
||||||
|
|
||||||
|
int int64_mpi_pack_size;
|
||||||
|
MPI_Pack_size(1, MPI_INT64_T, MPI_COMM_WORLD, &int64_mpi_pack_size);
|
||||||
|
int unsigned_int_mpi_pack_size;
|
||||||
|
MPI_Pack_size(1, MPI_UNSIGNED, MPI_COMM_WORLD, &unsigned_int_mpi_pack_size);
|
||||||
|
|
||||||
|
// store number of messages;
|
||||||
|
int message_size = unsigned_int_mpi_pack_size;
|
||||||
|
// store 1 unsigned int for number of messages
|
||||||
|
message_size += num_messages*int64_mpi_pack_size;
|
||||||
|
// store 2 unsigned ints per message for length of tag and length of text
|
||||||
|
message_size += num_messages*2*unsigned_int_mpi_pack_size;
|
||||||
|
|
||||||
|
int string_mpi_pack_size;
|
||||||
for (const auto lm : local_deferredlogger.messages_) {
|
for (const auto lm : local_deferredlogger.messages_) {
|
||||||
message_size += sizeof(lm.flag);
|
MPI_Pack_size(lm.tag.size(), MPI_CHAR, MPI_COMM_WORLD, &string_mpi_pack_size);
|
||||||
message_size += sizeof(unsigned int);// to store the length of tag
|
message_size += string_mpi_pack_size;
|
||||||
message_size += lm.tag.size();
|
MPI_Pack_size(lm.text.size(), MPI_CHAR, MPI_COMM_WORLD, &string_mpi_pack_size);
|
||||||
message_size += sizeof(unsigned int);// to store the length of text
|
message_size += string_mpi_pack_size;
|
||||||
message_size += lm.text.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////int message_size = local_messages.size()
|
// Pack local messages.
|
||||||
std::vector<char> buffer(message_size);
|
std::vector<char> buffer(message_size);
|
||||||
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
packMessages(local_deferredlogger.messages_, buffer, offset);
|
packMessages(local_deferredlogger.messages_, buffer, offset);
|
||||||
assert(offset == message_size);
|
assert(offset == message_size);
|
||||||
|
Loading…
Reference in New Issue
Block a user