Linux 上的 Clang + OpenMP 仅使用 1 个 CPU 核心

Clang + OpenMP on Linux uses only 1 CPU core

我有以下代码:

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;
}

如果我用 g++ 编译它,那么在运行时代码使用 4 个内核:

g++ -fopenmp -std=c++11 main.cpp

如果我用 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

那么,知道为什么 clang 只使用一个核心吗?提前致谢。

参见this

OpenMP 3.1 is fully supported, but disabled by default. To enable it, please use the -fopenmp=libomp command line option.

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