Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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 用mingw64编译mpi项目_C_Mingw_Mpi - Fatal编程技术网

C 用mingw64编译mpi项目

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

我正在尝试使用“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_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不知何故,我完全忽略了这一点;不幸的是,在这种情况下,我没有一个合适的答案。