Soon after llvm 3.7.0 reached the Gentoo tree, Jeremi Piotrowski opened two bugs to fix OpenMP support in our ebuilds. sys-devel/llvm-3.7.0-r1 (a revision bump that also now installs LLVM utilities) now has a post-install message with a short recap, but here is the blog version.
As detailed in upstream release notes, OpenMP in clang is disabled by default (and I kept this default in the Gentoo package), and the runtime is a separate package. So:
- emerge sys-libs/libomp
- add “-fopenmp=libomp” in your CFLAGS
- check with a sample program like:
#include <stdio.h> #include <omp.h> int main() { #pragma omp parallel printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads()); }
- You should get multiple lines on STDOUT (default threads count is one per CPU):
% clang -fopenmp=libomp test_omp.c -o test_omp % OMP_NUM_THREADS=6 ./test_omp Hello from thread 4, nthreads 6 Hello from thread 5, nthreads 6 Hello from thread 1, nthreads 6 Hello from thread 3, nthreads 6 Hello from thread 0, nthreads 6 Hello from thread 2, nthreads 6
Some additional reading:
- the original LLVM blog post on OpenMP 3.1 support: http://blog.llvm.org/2015/05/openmp-support_22.html
- the LLVM subsite on OpenMP support: http://openmp.llvm.org/