2017-09-20 107 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++'傢伙) –

相關問題