Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 混合openMP/MPI代码中的多线程发送/接收错误_C++_Mpi_Openmp_Ms Mpi - Fatal编程技术网

C++ 混合openMP/MPI代码中的多线程发送/接收错误

C++ 混合openMP/MPI代码中的多线程发送/接收错误,c++,mpi,openmp,ms-mpi,C++,Mpi,Openmp,Ms Mpi,我在下面的代码中使用OpenMP和MPI。我正在一台多核Windows机器上测试 我有两个错误: [0]致命错误 MPI_发送中的致命错误:其他MPI错误,错误堆栈: MPI_Sendbuf=0x00007FF67497F33C,计数=1,MPI_INT,目标=2,标记=1,MPI_通信世界失败 名片中缺少主机名或主机/端口描述无效 [1] 致命错误 MPI_Recv中的致命错误:其他MPI错误,错误堆栈: MPI_Recvbuf=0x00007FF67497F33C,计数=1,MPI_INT,

我在下面的代码中使用OpenMP和MPI。我正在一台多核Windows机器上测试

我有两个错误:

[0]致命错误 MPI_发送中的致命错误:其他MPI错误,错误堆栈: MPI_Sendbuf=0x00007FF67497F33C,计数=1,MPI_INT,目标=2,标记=1,MPI_通信世界失败 名片中缺少主机名或主机/端口描述无效

[1] 致命错误 MPI_Recv中的致命错误:其他MPI错误,错误堆栈: MPI_Recvbuf=0x00007FF67497F33C,计数=1,MPI_INT,src=0,标记=1,MPI_COMM_WORLD,状态=0x00007FF67497F348失败 共享内存队列名称没有空间

然后在另一次运行中,我遇到了以下错误:

[0]致命错误 MPI_发送中的致命错误:其他MPI错误,错误堆栈: MPI_Sendbuf=0x000000172E31FCC4,计数=1,MPI_INT,目标=2,标记=1,MPI_通信世界失败 在以前的尝试中未能与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();
}

首先,您需要使用多个MPI\U线程MPI\U Init\U thread,并确保您的库确实提供了此功能。

非常感谢!我正在使用MS-MPI,它确实有效。