clang OpenMP不支持omp_set_num_threads?

时间:2014-11-17 19:57:15

标签: c multithreading clang openmp

我有以下程序:

#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());
}

我用clang -fopenmp编译了它,我得到了输出

Hello from thread 0, nthreads 1

显然,未调用设定的线程数功能。有没有人对这可能发生的原因有所了解?

clang版本(与apt-get一起安装):

Ubuntu clang version 3.5.0-4ubuntu2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: x86_64-pc-linux-gnu
Thread model: posix

编辑:我也尝试将环境变量OMP_NUM_THREADS设置为4。

EDIT2:我还为OpenMP安装了英特尔运行时。

2 个答案:

答案 0 :(得分:0)

正如迈克所建议的,问题是运行时库被链接到错误的位置。在我的系统(Fedora)上,它与gcc运行时libgomp相关联,而不是与intel的libiomp相关联。

通过在可执行文件上运行ldd来检查这一点。它应该指向您按照指示here构建运行时库时获得的库。

答案 1 :(得分:0)

至少需要clang 3.7.0才能使用OpenMP。版本&lt; 3.7.0不支持OpenMP