OpenMP を使用してコードを C コード (OpenMP 部分をプレーン C に変換) にコンパイルして、OpenMP によって生成されているコードの種類を知る方法はありますか? gcc 4.4 コンパイラを使用しています。
2 に答える
他のコメンターが指摘したように、gcc は OpenMP ディレクティブをプレーンな C に変換しません。
ただし、gcc がディレクティブで何をするかを知りたい場合は、
-fdump-tree-optimized
オプションを使用してコンパイルできます。これにより、少なくとも C に似たプログラムの中間表現が生成されます。
ダンプできるステージがいくつかあります (gcc のマニュアル ページを確認してください)。最適化された ステージでは、OpenMP ディレクティブが GOMP ランタイム ライブラリの呼び出しに置き換えられています。その表現を見ると、何が起こっているのかについての洞察が得られるかもしれません。
少なくともhttp://www2.cs.uh.edu/~openuh/OpenUH(http://openmp.org/wp/openmp-compilers/にリストされている場合でも)があります。
他のプラットフォームのネイティブコンパイラによってコンパイルされる可能性のある最適化されたCまたはFortran77コードを発行します。
http://www.cs.uoi.gr/~ompi/ OMPi :
OMPiコンパイラは、OpenMP #pragmasを使用してCソースコードを取得し、システムのネイティブコンパイラでコンパイルできるように変換されたマルチスレッドCコードを生成します。
およびOdinMP:
OdinMP / CCpは、移植性の理由からJavaで記述されており、OpenMPディレクティブを使用してCプログラムを取得し、POSIXスレッド用のCプログラムを生成します。
openmpコードをPlainCに変換することはほとんど不可能だと言わなければなりません。古いプレーンCはスレッドをサポートしておらず、OpenMPのソース間トランスレータはまだC11を認識していないと思います。OpenMPプログラムは、POSIXスレッドを使用してCに変換することも、ランタイムライブラリ(libgompなど)を使用してCに変換することもできます。たとえば、OpenUHには、pthread自体を使用する独自のライブラリがあります。