C 用mingw64编译mpi项目
我正在尝试使用“mpiexec-n4myprogram”命令运行以下代码C 用mingw64编译mpi项目,c,mingw,mpi,C,Mingw,Mpi,我正在尝试使用“mpiexec-n4myprogram”命令运行以下代码 #include <stdio.h> #include "mpi.h" #include <omp.h> int main(int argc, char *argv[]) { int numprocs, rank, namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; int iam = 0, np = 1; MPI_Ini
#include <stdio.h>
#include "mpi.h"
#include <omp.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
int iam = 0, np = 1;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
#pragma omp parallel default(shared) private(iam, np)
{
np = omp_get_num_threads();
iam = omp_get_thread_num();
printf("Hello from thread %d out of %d from process %d out of %d on %s\n",
iam, np, rank, numprocs, processor_name);
}
MPI_Finalize();
}
#包括
#包括“mpi.h”
#包括
int main(int argc,char*argv[]){
国际货币、等级、名称;
字符处理器名称[最大处理器名称];
int iam=0,np=1;
MPI_Init(&argc,&argv);
MPI通信大小(MPI通信世界和numprocs);
MPI通信等级(MPI通信世界和等级);
MPI获取处理器名称(处理器名称和名称);
#pragma omp并行默认(共享)专用(iam,np)
{
np=omp_get_num_threads();
iam=omp_get_thread_num();
printf(“Hello来自线程%d,共%d个,来自进程%d,共%d个,位于%s上”\n”,
iam、np、等级、numprocs、处理器名称);
}
MPI_Finalize();
}
我使用的是Win7x64、MPICH2x64、Eclipsex64和mingw64(rubenvb构建)。它编译得很好,也可以在eclipse环境中运行(但只有一个进程),但在命令行上它会立即关闭,不会出现结果或错误。如果我将其编译为x86 exe,它将按预期运行。那么出了什么问题?mpi是否与mingw64编译的程序不兼容?如果将其构建为控制台程序,该程序将运行、完成,然后立即关闭,因为该程序可能没有发送命令来保持控制台打开 如果您再次运行它,这一次首先进入控制台并从命令行运行它,控制台将保持打开状态,因为它作为一个单独的进程运行,而不是绑定到您的程序(双击以运行程序时就是这种情况)
至于不并行运行,请确保在编译和链接阶段都有-fopenmp标志。如果将其构建为控制台程序,程序将运行、完成,然后立即关闭,因为程序可能不会发送命令来保持控制台打开 如果您再次运行它,这一次首先进入控制台并从命令行运行它,控制台将保持打开状态,因为它作为一个单独的进程运行,而不是绑定到您的程序(双击以运行程序时就是这种情况)
至于不并行运行,请确保在编译和链接阶段都有-fopenmp标志。控制台没有问题。正如我所说的,该程序可以像x86一样完美地运行,但像x64一样,它什么也不做。我也可以在没有mpiexec的情况下运行x64 exe。示例:“mpiexec-n4myprogram”(x86)和“myprogram”(x64)正在工作,但“mpiexec-n4myprogram”(x64)正在工作not@Chris不知何故,我完全忽略了这一点;在这种情况下,我很遗憾没有合适的答案。控制台不是问题。正如我所说的,该程序可以像x86一样完美地运行,但像x64一样,它什么也不做。我也可以在没有mpiexec的情况下运行x64 exe。示例:“mpiexec-n4myprogram”(x86)和“myprogram”(x64)正在工作,但“mpiexec-n4myprogram”(x64)正在工作not@Chris不知何故,我完全忽略了这一点;不幸的是,在这种情况下,我没有一个合适的答案。