使用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

上一篇: Using OpenMP with llvm

下一篇: Python3 urllib.request will not close connections immediately