使用 mingw64 编译一个 mpi 项目

标签 c mingw mpi

我正在尝试使用“mpiexec -n 4 myprogram”命令运行以下代码。

#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();
}

我正在使用 win7 x64、mpich2 x64、eclipse x64 和 mingw64(rubenvb 构建)。它编译得很好,也可以在 eclipse 环境中运行(但只有一个进程),但在命令行上它会立即关闭而没有结果或错误。如果我将它编译为 x86 exe,它会按预期运行。所以怎么了? mpi和mingw64编译的程序不兼容吗?

最佳答案

如果您将其构建为控制台程序,该程序将运行、完成然后立即关闭,因为该程序可能没有发送任何命令来保持控制台打开。

如果你再次运行它,这次首先进入控制台并从命令行运行它,控制台将保持打开状态,因为它作为一个单独的进程运行,而不是绑定(bind)到你的程序(就像这种情况一样)当双击运行程序时)。

至于不并行运行,请确保在编译和链接阶段都有标志 -fopenmp。

关于使用 mingw64 编译一个 mpi 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470525/

相关文章:

c - 在C中递增指向多维数组的指针

c - 在 Linux + Intel 驱动程序上启用合成时,OpenGL 应用程序会产生奇怪的效果

c++ - MinGW 错误 : No such file or directory exists

c++ - FFMPEG、Netbeans 和 C++

c - MPI_Init 只能由一个线程调用

c++ - _stricmp 在字符串匹配时返回错误值。该怎么办?

c - 二叉树前序遍历只打印 NULL

c++ - 尽管在参数中提供了所有需要的库,但为什么编译器会抛出 "undefined reference to ..."

python - 在 mpi4py 中接收腌制项目的非阻塞方式

C - 将行和列插入二维数组