Как правильно использовать MPI с потоком - PullRequest
1 голос
/ 20 мая 2011

У меня есть такой код, работающий на 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

Пожалуйста, просветитемне, какую часть я делаю неправильно Спасибо

1 Ответ

0 голосов
/ 20 мая 2011

Используйте MPI_Init_thread: http://www.mpi -forum.org / docs / mpi-20-html / node165.htm

и проверьте статус возврата: Доступный уровень поддержки потоков

Cheerz.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...