MPI_Isend / MPI_Recv в многопоточной программе

у меня есть Проблема MPI_Isend / MPI_Recv в многопотоковый программа.

В программе:

Первая машина имеет один поток делает некоторые вычисления и вызывает MPI_Isend отправить буфер на второй компьютер, а другой поток всегда пытается MPI_Recv данные со второй машины. И первая нить будет MPI_Wait его последний MPI_Isend завершить до вызова MPI_Isend снова.

Вторая машина делает то же самое.

Тогда я получил результат, который:

Первая машина:

Нить 0: MPI_Isend Данные на второй машине успешно. но заблокирован в MPI_Wait потому что последний MPI_Isend не завершено.

Нить 1: пробовать MPI_Recv Данные со второй машины, но нет данных и она заблокирована.

Вторая машина:

Нить 0: MPI_Isend Данные к первой машине успешно. но заблокирован в MPI_Wait потому что последний MPI_Isend не завершено.

Нить 1: пробовать MPI_Recv данные с первой машины, но нет данных и она заблокирована.

У кого-нибудь есть какие-либо идеи? Я очень ценил это, потому что я отслеживал проблему в течение двух дней, но никакого прогресса.

2

Решение

Чтобы иметь возможность выполнять вызовы MPI одновременно, вы должны инициализировать библиотеку MPI с поддержкой потоков на уровне MPI_THREAD_MULTIPLE, Для этого вы должны заменить звонок на MPI_Init с:

int provided;

MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided);
if (provided != MPI_THREAD_MULTIPLE)
{
printf("Sorry, this MPI implementation does not support multiple threads\n");
MPI_Abort(MPI_COMM_WORLD, 1);
}

Некоторые библиотеки MPI должны быть скомпилированы определенным (не по умолчанию) способом для поддержки вызовов из нескольких потоков. Например, Open MPI должен быть настроен во время сборки библиотеки. Другие поставщики предоставляют две версии своих библиотек — одну с поддержкой потоков, а другую без, и вам нужно выбрать правильную версию, когда вы связываете свой код. Это связано с тем, что добавление поддержки потоков увеличивает задержку многих вызовов MPI, и никто не хочет этого, если его программа не использует потоки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]