Ошибка при отправке / получении многопоточностью в гибридном коде openMP / MPI

Я использую OpenMP и MPI в следующем коде. Я тестирую на одном многоядерном компьютере с Windows.

Я получил эти две ошибки:

[0] фатальная ошибка
Неустранимая ошибка в MPI_Send: Другая ошибка MPI, стек ошибок:
Ошибка MPI_Send (buf = 0x00007FF67497F33C, count = 1, MPI_INT, dest = 2, tag = 1, MPI_COMM_WORLD)
Отсутствует имя хоста или неверное описание хоста / порта в визитной карточке

[1] фатальная ошибка
Неустранимая ошибка в MPI_Recv: Другая ошибка MPI, стек ошибок:
MPI_Recv (buf = 0x00007FF67497F33C, count = 1, MPI_INT, src = 0, tag = 1, MPI_COMM_WORLD, status = 0x00007FF67497F348) не удалось
нет места для имени очереди общей памяти

Затем в другом запуске я получил эту ошибку:

[0] фатальная ошибка
Неустранимая ошибка в MPI_Send: Другая ошибка MPI, стек ошибок:
Ошибка MPI_Send (buf = 0x000000172E31FCC4, count = 1, MPI_INT, dest = 2, tag = 1, MPI_COMM_WORLD)
Не удалось связаться с 2 при предыдущих попытках

#include<iostream>
#include "mpi.h"#include <omp.h>

using namespace std;

int numOfProc, id, array_size, portion;
int *arr = NULL;
MPI_Status status;
const static int tag = 1;int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProc);
MPI_Comm_rank(MPI_COMM_WORLD, &id);

cout << "Hello from Process # " << id << '\n';

int data;

omp_set_num_threads(2);
#pragma omp parallel for
for (int i = 1; i < 20; i++)
{
if (id == 0)//master
{
for (int p = 1; p < numOfProc; p++)
{
data = i*p;
MPI_Send(&data, 1, MPI_INT, p, tag, MPI_COMM_WORLD);
}
}
else // slaves
{
MPI_Recv(&data, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);
cout << "Process " << id << " recieved " << data << " by thread " << omp_get_thread_num() << endl;
}
}

MPI_Finalize();
}

0

Решение

Во-первых, вам нужно MPI_Init_thread() с MPI_THREAD_MULTIPLE и убедитесь, что ваша библиотека обеспечивает это.

1

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

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

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