我试图让openmp在我的程序中运行Mavericks,但是当我尝试使用标志进行编译时,-fopenmp我得到以下错误:
ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我正在运行的命令是:
gcc myProgram.cpp -fopenmp -o myProgram
Run Code Online (Sandbox Code Playgroud)
此外,当我运行gcc时,我得到了Clang警告,我觉得这很奇怪.并且查看/ usr/bin/gcc它似乎没有链接到Clang.
有关如何修复我的Clang错误并获得openmp编译的任何建议?
$ gcc 12.c -fopenmp
12.c:9:9: fatal error: 'omp.h' file not found
#include<omp.h>
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
在编译openMP程序时,我得到了上述错误.我正在使用OS X Yosemite.我首先尝试通过在终端中键入gcc来安装本机gcc编译器,后来又下载了Xcode,我得到了同样的错误.然后我下载了gcc:
$ brew install gcc
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误.我确实尝试更改编译器路径,它仍显示:
$ which gcc
/usr/bin/gcc
Run Code Online (Sandbox Code Playgroud)
那么如何用gcc编译程序呢?
我正在尝试一个简单的 Open MP 示例来并行化 for 循环,但我看不到 for 循环正在多个内核上执行。
这是C程序:
#include </usr/local/Cellar/gcc/5.1.0/lib/gcc/5/gcc/x86_64-apple-darwin14.5.0/5.1.0/include/omp.h>
#include <stdio.h>
#include <unistd.h>
int main() {
int n;
#pragma omp parallel
{
#pragma omp for
for(n = 0; n < 10; n++)
printf(" Thread %d: %d\n", omp_get_thread_num(), n);
printf("Number of threads: %d\n", omp_get_num_threads());
}
printf("Total number of cores in the CPU: %ld\n", sysconf(_SC_NPROCESSORS_ONLN));
}
Run Code Online (Sandbox Code Playgroud)
上面的代码与这个例子非常相似。
当我执行这个程序并打印出它正在使用的线程总数(默认情况下它应该是 CPU 内核总数)时,我找到了结果1。这是输出:
10:pavithran$ gcc -fopenmp openMPExample.c -o openMPExample.o
10:pavithran$ ./openMPExample.o
Thread 0: 0
Thread 0: 1
Thread 0: …Run Code Online (Sandbox Code Playgroud)