使用 MPI 时,parallel eclipse 无法识别处理器的真实数量
parallel eclipse does not recognize true number of processors when using MPI
我有以下代码,当使用 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
转到项目并:
- 用第二个鼠标按钮单击
- select
Run As
> Run Configurations
- select 并行应用程序
- 用第二个鼠标按钮单击
- 点击新配置
- 点击新建配置
- 点击资源
- 来自“目标系统配置”下拉菜单select 例如“通用远程交互”
- 在连接类型 select 本地(因为您将 运行 在本地运行 eclipse)
- 切换到点击应用程序
- 在应用程序中输入你mpi的路径运行 例如
/usr/bin/mpirun
- 终于切换到 Arguments
- 在
application argument
中传递参数“-np 4”
- 点击运行
从并行应用程序模板创建新的 运行 配置。在 Resources 选项卡上,将 Target System Configuration 设置为 Generic OpenMPI Interactive 或 Generic MPICH2 Interactive 取决于您的 MPI 实现是源自 Open MPI 还是 MPICH。将 连接类型 设置为 本地 。然后在基本选项选项卡中设置进程数。
切换到应用程序选项卡并将可执行文件的路径放入应用程序。只需单击它旁边的 Browse 按钮并导航到 Debug 或 Release 目录和 select 那里的可执行文件。
运行 按钮现在应该变成蓝色,您可以按下它了。
我有以下代码,当使用 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
转到项目并:
- 用第二个鼠标按钮单击
- select
Run As
>Run Configurations
- select 并行应用程序
- 用第二个鼠标按钮单击
- 点击新配置
- 点击新建配置
- 点击资源
- 来自“目标系统配置”下拉菜单select 例如“通用远程交互”
- 在连接类型 select 本地(因为您将 运行 在本地运行 eclipse)
- 切换到点击应用程序
- 在应用程序中输入你mpi的路径运行 例如
/usr/bin/mpirun
- 终于切换到 Arguments
- 在
application argument
中传递参数“-np 4”
- 点击运行
从并行应用程序模板创建新的 运行 配置。在 Resources 选项卡上,将 Target System Configuration 设置为 Generic OpenMPI Interactive 或 Generic MPICH2 Interactive 取决于您的 MPI 实现是源自 Open MPI 还是 MPICH。将 连接类型 设置为 本地 。然后在基本选项选项卡中设置进程数。
切换到应用程序选项卡并将可执行文件的路径放入应用程序。只需单击它旁边的 Browse 按钮并导航到 Debug 或 Release 目录和 select 那里的可执行文件。
运行 按钮现在应该变成蓝色,您可以按下它了。