所以我尝试将OpenMP与最新版本的clang clang version 3.4.2 (tags/RELEASE_34/dot2-final)
一起使用。按照以下过程编译并添加omp.h
的PATH,然后使用以下命令编译我的hello.c
clang -fopenmp hello.c
然后运行它,仍然不能使用超过1个线程:
Bash-4.1$ ./a.out
Hello from thread 0, nthreads 1
P.S:我试图手动导出export OMP_NUM_THREADS=8
,但这也没有解决任何问题。有什么想法吗?
更新:这是hello.c:
#include <omp.h>
#include <stdio.h>
int main() {
#pragma omp parallel
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());}
答案 0 :(得分:4)
尽管我对原始问题的时间戳有点迟了,但我想在此提及答案,至少可以节省人们面对类似问题的时间。
LLVM本身目前不支持Openmp
开箱即用。您可以使用Intel Runtime Support编译并运行omp
标记的代码。但是,如果您想要一个干净的clang
支持OpenMP,那么可以在OpenMP-Clang处创建一个项目主干,您可以克隆和构建它。目前的支持是OpenMP 3.1规范,它们很快就会支持OpenMP 4.0规范:
$ git clone https://github.com/clang-omp/llvm_trunk llvm
$ git clone https://github.com/clang-omp/compiler-rt_trunk llvm/projects/compiler-rt
$ git clone https://github.com/clang-omp/clang_trunk llvm/tools/clang
请勿忘记在此之后构建Intel® OpenMP* Runtime Library
,因为您需要omp.h
和/path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so
答案 1 :(得分:0)
尝试使用omp_set_num_thread()函数设置线程数。如果它不起作用,请尝试再次设置clang。
#include <omp.h>
#include <stdio.h>
int main() {
omp_set_num_threads(4);
#pragma omp parallel
{
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
}
同时尝试在并行和串行区域调用mp_get_max_threads(),看看你得到了什么
答案 2 :(得分:0)
我只看到一个线程,clang版本3.8.0(主干252425)。然后我在https://clang-omp.github.io阅读了一些最新消息:
2015年11月27日 - 进一步开发OpenMP支持 clang / llvm编译器移至www.llvm.org。本网站维护 仅限档案用途。感谢所有贡献所有人 这些年来!
...所以我从trunk编译了LLVM / Clang;使用优秀的指令here编译了OpenMP运行时库;现在它确实有效。