У меня есть такой код, работающий на 4 MPI-процессах.
for (i=0;i<niter;i++){
//.. do something with temprs
memcpy(rs, temprs,..) // copy temprs content to rs
MPI_Gather(rs,...0...); //gather result to 0
if (mpiRank == 0) writeToDisk(rs);
}
Я хочу поместить 2 последние строки кода в функцию comm_and_save , а затем обработать его такчто он может работать параллельно с оставшимся кодом, как показано ниже:
boost::thread t1;
for (i=0;i<niter;i++){
//.. do something with temprs
t1.join(); // make sure previous comm_and_save done
memcpy(rs, temprs,..) // copy temprs content to rs
t1 = boost::thread( comm_and_save, rs );
}
Однако, когда-нибудь код запускается, иногда зависает, иногда выдает ошибку:
local QP operation err (QPN 5a0407, WQE @ 00000f02, CQN 280084, index 100677)
[ 0] 005a0407
[ 4] 00000000
[ 8] 00000000
[ c] 00000000
[10] 0270c84f
[14] 00000000
[18] 00000f02
[1c] ff100000
Пожалуйста, просветитемне, какую часть я делаю неправильно Спасибо