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

C++11 在MPI中广播std::string最优雅的方式是什么?,c++11,mpi,C++11,Mpi,在我的MPI程序中,我当前正在广播一个std::string,如下所示。代码可以工作,但我找不到比这更优雅的解决方案(在其他问题上也是如此)。有没有更好的方法(不使用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, M

在我的MPI程序中,我当前正在广播一个
std::string
,如下所示。代码可以工作,但我找不到比这更优雅的解决方案(在其他问题上也是如此)。有没有更好的方法(不使用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);
std::字符串行
//变量行接收MPID==0的值。
int line_size=line.size();
MPI_Bcast(&line_size,1,MPI_INT,0,MPI_COMM_WORLD);
如果(MPID!=0)
行。调整大小(行大小);
MPI\u Bcast(const\u cast(line.data()),line\u大小,MPI\u字符,0,MPI\u COMM\u WORLD);

< /代码> 如果字符串的最大大小可以在生成时间(VS运行时)知道并且是合理的,那么您可能需要考虑<代码> MPIYBCAS> /CODECING一个固定大小的字符串。< /P>
这是否更优雅还有争议,但我相信从性能的角度来看,这更有效。其基本原理是,只要字符串的最大大小是合理的,如果在构建时(相对于运行时)可以知道字符串的最大大小并且是合理的,那么一个带有几个额外(且无用)字节的
MPI\u Bcast()
比两个带有恰好正确字节数的
MPI\u Bcast()

更有效,然后,您可能需要考虑<代码> MPIIBCAST
这是否更优雅还有争议,但我相信从性能的角度来看,这更有效。其基本原理是,只要字符串的最大大小合理,一个带有几个额外(且无用)字节的单个
MPI_Bcast()
比两个带有恰好正确字节数的
MPI_Bcast()
更有效

这不是性能关键型代码,而是在初始化中,其中,在一个进程上读取带有设置的输入文件,并将其广播给其他进程。我不喜欢固定字符串大小。在这种情况下,原始代码在我看来很好,从
MPI
的角度来看(我真的不是
C++
guy),这不是在性能关键代码中,而是在初始化中,在初始化中,在一个进程上读取带有设置的输入文件,并将其广播给其他进程。我更喜欢不固定字符串大小。在这种情况下,从
MPI
的角度来看,原始代码看起来很好(我真的不是
C++
guy)