c - 如何在 OS X 上编译 OpenMP 和 MPI 混合 C 程序

标签 c multithreading macos parallel-processing

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

mpicc -fopenmp helloworld.c -o helloworldmpicc -openmp helloworld.c -o helloworld 编译都给我一个错误信息 fatal error:找不到“omp.h”文件

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

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

简单的 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();
}

最佳答案

我只是用:

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

并编译

mpicc -openmp main.c

关于c - 如何在 OS X 上编译 OpenMP 和 MPI 混合 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35343498/

相关文章:

c - 简单的 c malloc

c++ - 如何在 Mac OS X 上用 C++ 扫描 Wifi 接入点

linux - 如何清除 Mac/Linux 机器上的 Visual Studio Code 缓存?

c++ - 在 C/C++ 中计算 32 位 CRC 查找表

c - AVR C 中字符数组的按位移位

c - 如何防止 Visual C 编译器优化掉 "unused"全局变量

c# - 与使用 Interlocked 类相比,使用 volatile 关键字有什么优势吗?

DB写操作中的Java并发

java - 无法在消费者线程中使用 JNI 的生产者消费者程序中捕获 SIGINT 信号

macos - OSX SSH 通过 SOCKS5 代理服务器