Clang 铿锵+;Linux上的OpenMP仅使用1个CPU核

Clang 铿锵+;Linux上的OpenMP仅使用1个CPU核,clang,openmp,Clang,Openmp,我有以下代码: int main(int argc, char** argv) { const int64_t N = 10000000000; float* data = new float[N]; int64_t i; omp_set_dynamic(0); omp_set_num_threads(4); #pragma omp parallel for for(i = 0; i < N; ++i) data[

我有以下代码:

int main(int argc, char** argv)
{
    const int64_t N = 10000000000;
    float* data = new float[N];
    int64_t i;

    omp_set_dynamic(0);
    omp_set_num_threads(4);

    #pragma omp parallel for
    for(i = 0; i < N; ++i)
        data[i] = i*i;

    return 0;
}
如果我用clang++3.7编译它,那么在运行时代码只使用1个核心:

clang++-3.7 -fopenmp -std=c++11 main.cpp
在这两种情况下,我都设置了:

OMP_NUM_THREADS=4
这两个编译器都是从Debian测试存储库安装的:

sudo apt-get install g++-5
sudo apt-get install clang-3.7
那么,你知道为什么叮当声只使用一个核心吗?提前感谢。

请参阅:

OpenMP 3.1完全受支持,但默认情况下已禁用。要启用它,请使用-fopenmp=libomp命令行选项


您似乎错过了编译标志中的
-fopenmp=libomp

您好。通过使用此选项,我得到一个错误:
/usr/bin/ld:找不到-lomp
。我还尝试使用
-fopenmp=libgomp
。有了这个标志,代码可以编译,但它仍然使用1个CPU内核。老实说,IDK出了什么问题,但我会尝试从源代码处安装clang,或者安装“libiomp dev”包并使用
-fopenmp=libomp
-fopenmp=libiomp5
…结果是libomp以某种方式与英特尔omp库捆绑在一起。此外,该包目前正在Debian存储库中进行一些重大转换。更糟糕的是,它目前已从测试存储库中删除。(但它存在于sid上)。我想要么等待,要么使用sid版本。:)谢谢你的帮助,我的朋友!你能告诉我们你的进展吗?我一直在努力解决这个问题,我终于在这些评论的基础上建立了矿井,安装了intels-omp(
apt-get-install-libiomp-dev
),然后用
clang++-fopenmp=libiomp5/tmp/test.cpp
进行了构建。现在希望cmake能找到它。。
sudo apt-get install g++-5
sudo apt-get install clang-3.7