使用OpenMP和llvm
所以我试着用最新版本的叮当声clang version 3.4.2 (tags/RELEASE_34/dot2-final)
来使用OpenMP。 遵循该过程编译并添加omp.h
,然后使用以下命令编译我的hello.c:
clang -fopenmp hello.c
然后运行它,仍然不能使用超过1个线程:
Bash-4.1$ ./a.out
Hello from thread 0, nthreads 1
PS:我试图手动导出export OMP_NUM_THREADS=8
但这并没有解决任何问题。 有任何想法吗?
更新:这是hello.c:
#include <omp.h>
#include <stdio.h>
int main() {
#pragma omp parallel
printf("Hello from thread %d, nthreads %dn", omp_get_thread_num(), omp_get_num_threads());}
尽管事实上我的原始问题的时间还晚,但我想在这里提到答案,至少可以节省人们面临类似问题的时间。
LLVM本身当前不支持Openmp
。 您可以使用英特尔®运行时支持编译和运行带有omp
标签的代码。 但是,如果你想拥有一个支持OpenMP的干净的clang
,那么你可以克隆和构建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
Intel® OpenMP* Runtime Library
,因为您需要omp.h
和/path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so
尝试使用omp_set_num_thread()函数设置线程数。 如果不起作用,请尝试再次设置铛声。
#include <omp.h>
#include <stdio.h>
int main() {
omp_set_num_threads(4);
#pragma omp parallel
{
printf("Hello from thread %d, nthreads %dn", omp_get_thread_num(), omp_get_num_threads());
}
}
也可以尝试在并行和串行区域中调用mp_get_max_threads(),并查看获得的内容
我只看到一个线程,铿锵声3.8.0版(主干252425)。 然后我通过https://clang-omp.github.io阅读了一些最近的新闻:
2015年11月27日 - 在clang / llvm编译器中进一步开发OpenMP支持转移到www.llvm.org。 本网站仅用于存档目的。 感谢所有这些年贡献的人!
...所以我从trunk中编译了LLVM / Clang; 使用这里的优秀指令编译OpenMP运行时库; 现在它工作。
链接地址: http://www.djcxy.com/p/82451.html下一篇: Python3 urllib.request will not close connections immediately