我有以下程序:
#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安装了英特尔运行时。
答案 0 :(得分:0)
正如迈克所建议的,问题是运行时库被链接到错误的位置。在我的系统(Fedora)上,它与gcc运行时libgomp相关联,而不是与intel的libiomp相关联。
通过在可执行文件上运行ldd来检查这一点。它应该指向您按照指示here构建运行时库时获得的库。
答案 1 :(得分:0)
至少需要clang 3.7.0才能使用OpenMP。版本&lt; 3.7.0不支持OpenMP