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


9

私の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固有のパッケージをインストールし、対応するフラグを渡すためのヒントに感謝します。


どのバージョンのClangを使用していますか?Ubuntu 16.10でclang-3.8とclang-3.9を使用すると、同じ問題が発生します。
Zボソン

1
sudo apt install libomp-dev
Zボソン

最後に、UbuntuのClangでOpenMPを使用できます!ずっと欲しかった!
Zボソン

回答:


16

私も同じ問題を抱えていました。

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/

私のシステムにインストールさomp.hれているGCC

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

そしてlibomp-devinsalled omp.h

/usr/include/omp.h

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


1
バニラ16.04でリポジトリのストッククランを使用して作業しました。
Bulat M.17年

1
デフォルトでClang 4.0に設定されているUbuntu 17.04をインストールしました。私はまだ使用する必要がありましたsudo apt install libomp.dev
Zボソン

誤ってclang 6からlibgompをリンクした場合、コードは黙ってシリアル化されます。
Andrew Wagner

2

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

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

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

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

それは問題を解決しません。まだ見つかりませんomp.h
Zボソン

システムでomp.hを見つけましたか?これらのコマンドの出力を質問に追加できますか?
Ghasem Pahlavan

*.hヘッダーファイルであるのに、なぜ彼は自分のパスにそれらを追加したいのでしょうか?彼らは/usr/include例えばする必要があります。
Ravexina

1
ありがとうGhasem、16.04でのlibomp-devインストールは解決しました。
Bulat M.17年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.