在MPI中广播std :: string最优雅的方式是什么?

时间:2017-09-20 21:05:41

标签: c++11 mpi

在我的MPI计划中,我目前正在播放std::string如下。代码有效,但我找不到比这更优雅的解决方案(在其他SO问题中都没有)。有没有更好的方法(不使用Boost.MPI)?特别是const_cast让我感到紧张。

std::string line
// Variable line receives a value on mpiid == 0.

int line_size = line.size();
MPI_Bcast(&line_size, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (mpiid != 0)
    line.resize(line_size);
MPI_Bcast(const_cast<char*>(line.data()), line_size, MPI_CHAR, 0, MPI_COMM_WORLD);

1 个答案:

答案 0 :(得分:0)

如果字符串的最大大小可以在构建时知道(与运行时间相比)并且是合理的,那么您可能需要考虑MPI_Bcast固定大小的字符串。

这是否更优雅是值得商榷的,但我相信从性能的角度来看这更有效。基本原理是,只要字符串的最大大小合理,具有一些额外(和无用)字节的单个MPI_Bcast()比具有恰当字节数的两个MPI_Bcast()更有效< / p>