在我的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);
答案 0 :(得分:0)
如果字符串的最大大小可以在构建时知道(与运行时间相比)并且是合理的,那么您可能需要考虑MPI_Bcast
固定大小的字符串。
这是否更优雅是值得商榷的,但我相信从性能的角度来看这更有效。基本原理是,只要字符串的最大大小合理,具有一些额外(和无用)字节的单个MPI_Bcast()
比具有恰当字节数的两个MPI_Bcast()
更有效< / p>