web-dev-qa-db-ja.com

clangを使用してOpenMPプログラムをコンパイルする方法は?

私のgccはうまくコンパイルされますが、clangは次のメッセージで失敗します:

clang -fopenmp=libomp -o main main.c
main.c:5:10: fatal error: 'omp.h' file not found

私もlibomp5パッケージをインストールし、フラグを-fopenmp=libomp5に変更しましたが、どちらも助けにはなりませんでした:

clang -fopenmp=libomp5 -o main main.c
clang: error: unsupported argument 'libomp5' to option 'fopenmp='
clang: error: unsupported argument 'libomp5' to option 'fopenmp='

これら 推奨事項は機能しませんでした。

必要な16.04特定のパッケージをインストールし、対応するフラグを渡すためのヒントに感謝します。

8
Bulat M.

同じ問題がありました。

Sudo apt install libomp-dev

Ubuntu 16.10で修正

//test.c
#include "omp.h"
#include <stdio.h>

int main(void) {
  #pragma omp parallel
  printf("thread %d\n", omp_get_thread_num());
}

それから

clang test.c -fopenmp
./a.out
thread 0
thread 5
thread 2
thread 1
thread 7
thread 3
thread 4
thread 6

また

clant-3.9 test.c -fopenmp

動作します。


GCCとClangは、異なるOpenMPランタイムライブラリを使用します:libgompとlibompを尊重します。

Clangのランタイムは、 LLVM OpenMP ランタイムであり、Intel OpenMPランタイム(オープンソース)に基づいています。 https://www.openmprtl.org/

システムにGCCがomp.hをインストールしました

/usr/lib/gcc/x86_64-linux-gnu/6/include/omp.h

およびlibomp-dev insalled omp.h at

/usr/include/omp.h

これらは、異なる関数定義を含む異なるヘッダーファイルです。たとえば、どちらのヘッダーファイルを使用してもかまいません。 omp_get_wtime()しかし、一般的には、リンク先のランタイムに対応するヘッダーファイルを使用する方が良いと思います。

14
Z boson

omp.hファイルがシステムに存在しないようですPATH。最初にomp.hファイルがどこにあるかわからない場合は、それを見つけようとします。

find / -name 'omp.h' -type f

次に、このコマンドを実行してコードをコンパイルします。

clang -o main main.c -I/path/to/omp/folder
2
Ghasem Pahlavan