1

我有以下代码,当使用 eclipse 2020.12 执行时,输出是这样的:“Hello from rank 0 out of 1”

#include <iostream>
#include <mpi.h>
using namespace std;

int main(int argc, char* argv[])
{

    MPI_Init(&argc, &argv);

    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    int size;
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    int data;

    if (rank > 0) {

        MPI_Recv(&data, 1, MPI_INT, rank-1, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);
                cout << "Rank "<< rank<< " has received message with data " << data
                        << " from rank " << rank-1
                        << endl;
    }

    cout << "Hello from rank " << rank<< " out of " << size<< endl;

    if (rank < size-1) {
        data = rank*rank;

        MPI_Send(&data, 1, MPI_INT, rank+1, 0, MPI_COMM_WORLD);
    }

    MPI_Finalize();
    return 0;
}

但是,当我通过命令行使用以下命令执行此操作时,它按预期工作

mpic++ -o name name.cpp
mpiexec -np 4 ./name

它显示 4 hello ,这是我的核心数。我想知道为什么 eclipse 无法识别,但是具有另一种执行方式的 sampe cpp 文件可以正常工作!输出将是:

Hello from rank 0 out of 4
Rank 1 has received message with data 0 from rank 0
Hello from rank 1 out of 4
Rank 2 has received message with data 1 from rank 1
Hello from rank 2 out of 4
Rank 3 has received message with data 4 from rank 2
Hello from rank 3 out of 4
4

2 回答 2

1

从并行应用程序模板创建一个新的运行配置。在Resources选项卡上,根据您的 MPI 实现是从 Open MPI 还是 MPICH 派生,将Target System Configuration 设置Generic OpenMPI InteractiveGeneric MPICH2 Interactive 。连接类型设置为本地然后在基本选项选项卡中设置进程数。

在此处输入图像描述

切换到Application选项卡并将可执行文件的路径放在Application program中。只需单击它旁边的Browse按钮​​并导航到DebugRelease目录并在那里选择可执行文件。

在此处输入图像描述

运行按钮现在应该变成蓝色,您可以按下它。

在此处输入图像描述

于 2021-02-16T08:25:26.897 回答
1

转到项目并:

  • 用第二个鼠标按钮单击
  • 选择Run As>Run Configurations
  • 选择并行应用程序
  • 用第二个鼠标按钮单击
  • 点击新配置
  • 点击新建配置
  • 点击资源
  • 从“目标系统配置”下拉菜单中选择例如“通用远程交互”
  • 在连接类型中选择本地(因为您将在本地运行 eclipse)

在此处输入图像描述

  • 切换到点击应用程序
  • 在应用程序中输入您 mpirun 的路径,例如, /usr/bin/mpirun

在此处输入图像描述

  • 最后切换到参数
  • 通过application argument参数“-np 4”

在此处输入图像描述

  • 点击运行
于 2021-02-15T19:15:28.243 回答