将OpenMP与llvm-clang一起使用

时间:2014-11-06 23:26:04

标签: c openmp llvm-clang

所以我尝试将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());}

3 个答案:

答案 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运行时库;现在它确实有效。