2015-09-21 12 views
6

を使用しています。私はグラムでそれをコンパイルする場合、コードを実行時に4つのコアを使用しています++Linux上でクラン+ OpenMPのは、私は次のコードを持っている唯一の1 CPUコア

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++ -fopenmp -std=c++11 main.cpp 

もし私が私が設定したいずれの場合も

clang++-3.7 -fopenmp -std=c++11 main.cpp 

コードは1つだけコアを使用して、実行時に、次に打ち鳴らす++ 3.7でコンパイル
OMP_NUM_THREADS=4 

両方のコンパイラは、Debianのテストリポジトリからインストールされています:

sudo apt-get install g++-5 
sudo apt-get install clang-3.7 

ので、打ち鳴らすには1つのコアだけを使用して、なぜ任意のアイデア?前もって感謝します。

答えて

5

thisを参照してください:

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

あなたのコンパイルフラグで-fopenmp=libompを逃したように見えます。

+0

こんにちは。このオプションを使うと、 '/ usr/bin/ld:-lompが見つかりません。 'というエラーが出ます。私も '-fopenmp = libgomp'を使ってみました。このフラグを使用すると、コードはコンパイルされますが、それでも1つのCPUコアが使用されます。 – AstrOne

+1

正直なところ、IDKは間違っていますが、私はソースからclangをインストールするか、パッケージ 'libiomp-dev'をインストールして '-fopenmp = libomp'または' -fopenmp = libiomp5'を使用しようとします。 – Gilles

+1

libompどういうわけかintel ompライブラリにバンドルされています。さらに、このパッケージは現在、Debianリポジトリで大きな変遷を遂げています。さらに悪化させるために、テストリポジトリから削除されています。 (しかしそれはsid上に存在します)。私は待っているか、単にsidバージョンを使用する必要があります。 :)助けてくれてありがとう私の友人! – AstrOne

関連する問題