clang OpenMP不支持omp_set_num_threads吗?

4
我来翻译此段内容:

我有以下程序:

#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。

编辑2:我还安装了Intel运行时以支持OpenMP。


你正在使用gcc吗?如果是的话,你传递了什么标志?必须传递-fopenmp才能使用OpenMP。 - Mike
你在这里的 Using 部分中指定的环境变量已经导出了吗?http://clang-omp.github.io/ - Mike
2个回答

0

您需要至少使用clang 3.7.0才能使用OpenMP。版本< 3.7.0不支持OpenMP。


0

正如Mike所建议的那样,问题在于运行时库链接到了错误的位置。在我的系统(Fedora)上,它链接到了gcc运行时库libgomp,而不是英特尔的libiomp。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接