2017-09-20 70 views
0

在我的MPI程序中,我正在播放std::string,如下所示。代码起作用,但我找不到比这更优雅的解决方案(在其他SO问题中都没有)。有没有更好的方法(不使用Boost.MPI)?特别是const_cast让我感到紧张。在MPI中广播std :: string的最优雅方式是什么?

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

如果字符串的最大尺寸可以在编译的时候(与运行时间)被称为是合理的,那么你可能要考虑MPI_Bcast荷兰国际集团固定大小的字符串。

这是否优雅与否是值得商榷的,但我相信从效能的角度来看,这样更有效率。基本原理是,只要字符串的最大尺寸合理,带有一些额外(无用)字节的单个MPI_Bcast()比两个MPI_Bcast()效率更高,只有正确的字节数

+0

这不是性能关键代码,但是在初始化中,其中具有设置的输入文件在一个进程上被读取并被广播给其他进程。我宁愿不要固定字符串大小。 – Chiel

+0

在这种情况下,原始代码对我来说看起来很好,从'MPI'的角度来看(我真的不是'C++'家伙) –

相关问题