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

时间:2015-09-21 13:04:10

标签: 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[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只使用一个核心的任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:5)

请参阅this

  

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

看起来你错过了编译标志中的-fopenmp=libomp