【问题标题】:How to compile OpenMP and MPI hybrid C program on OS X如何在 OS X 上编译 OpenMP 和 MPI 混合 C 程序
【发布时间】:2016-05-22 11:24:08
【问题描述】:

我正在我的 Macbook Pro 上测试一个混合了 OpenMP 和 MPI 的 HelloWorld C 程序。

使用mpicc -fopenmp helloworld.c -o helloworldmpicc -openmp helloworld.c -o helloworld 编译都会给我一个错误消息fatal error: 'omp.h' file not found

如果我只用mpicc helloworld.c -o helloworld 编译MPI 部分,或者只用gcc -fopenmp helloworld.c -o helloworld 编译OpenMP 部分,它工作得很好。

我在 SO 中查找,我看到人们在 Linux 中成功编译,所以我想知道这是否仅适用于 OS X。除了-openmp-fopenmp,我应该为OS X 使用不同的标志吗?我将 OpenMPI-1.10.0 与 OS X El Capitan (10.11.1) 一起使用。

简单的HelloWorld程序代码如下,我遵循的步骤在this page

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

【问题讨论】:

  • 先编译openmp,后链接mpi
  • @user3528438 感谢您的回复。你能说得更具体点吗?
  • 由于在编译时没有找到omp.h文件,所以在编译语句中添加-IpathTo_omp.h_File
  • @user3629249 感谢您的帮助。在按照您的建议指定包含路径后,我能够编译并运行它。但是我不能直接用mpicc 编译它,而是使用-showme 标志和mpicc,它生成了一个编译命令行,带有gcc,后跟-lmpi。我只能用那个编译程序。

标签: c multithreading macos parallel-processing


【解决方案1】:

我只是使用:

#include "/usr/local/opt/llvm/lib/clang/3.8.1/include/omp.h"

并用

编译
mpicc -openmp main.c

【讨论】:

  • 不起作用。编译器将假定 -o 将输出文件名设置为 penmp
【解决方案2】:

使用

mpicc -qopenmp -o prog prog.c

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 2016-08-22
    • 2015-05-17
    • 2013-11-15
    • 2015-03-26
    • 1970-01-01
    • 2015-11-24
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多