【发布时间】:2016-05-22 11:24:08
【问题描述】:
我正在我的 Macbook Pro 上测试一个混合了 OpenMP 和 MPI 的 HelloWorld C 程序。
使用mpicc -fopenmp helloworld.c -o helloworld 或mpicc -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