2012-05-16 14 views
7

OpenMPでコードをコンパイルして(OpenMPをプレーンCに変換して)、OpenMPでどのようなコードが生成されているかを知る方法はありますか?私はgcc 4.4コンパイラを使用しています。OpenMPコードをCコードにコンパイル

+2

私は、gccコンパイラがOpenMP呼び出しをC言語に変換すると仮定しています。むしろ、OpenMP対応のコンパイラのほとんどは、ソースをアセンブラに変換してシステム関数の呼び出しを含むと考えています。あなたのコンパイラがアセンブラリストを生成することは間違いありません。それはあなたが仕事をする必要があるかもしれません。私は、私の期待が間違っていることを証明する答えに興味を持っています。 –

+0

Afaikでは、ソースコードをgccコンパイラから見ることができます。 omp.hとライブラリ(libgomp)のそれぞれのソースファイルを参照して、これらのプラグマの動作を確認してください。しかし、cコンパイラを呼び出す前に、置換ルーチンはありません。 [ここ](http://gcc.gnu.org/onlinedocs/libgomp/Implementing-FOR-construct.html#Implementing-FOR-construct)を参照してください。 – Bort

答えて

3

は、他のプラットフォーム上のネイティブコンパイラによってコンパイルされてもよいCまたはFortran 77のコードを最適化された放射することができる(もhttp://openmp.org/wp/openmp-compilers/に記載されている)は、少なくともhttp://www2.cs.uh.edu/~openuh/ OpenUHがあります。

もある:http://www.cs.uoi.gr/~ompi/ OMPi:

はOMPiコンパイラは、OpenMPの#pragmaとCのソースコードを取得し、システムのネイティブコンパイラによってコンパイルされる準備ができ、形質転換されたマルチスレッドのCコードを生成します。

とOdinMP:

OdinMP/CCPは 移植性の理由から、Javaで書かれたとのOpenMP ディレクティブとC-プログラムを取り、POSIXスレッドのCプログラムを生成しました。

openmpコードをプレーンCに変換することはほとんど不可能だと言います。古いプレーンCはスレッドをサポートしていないので、OpenMPのソースからソースへのトランスレータはまだC11を認識していないと思います。 OpenMPプログラムは、POSIXスレッドを使用してCに変換することも、ランタイムライブラリ(libgompなど)を呼び出してCに変換することもできます。たとえば、OpenUHにはpthreads自体を使用する独自のライブラリがあります。他のコメンターと同様

6

はgccが、プレーンC.

にOpenMPディレクティブを翻訳していません。しかし、あなたがgccがあなたのディレクティブで何をするかのアイデアを取得したい場合、あなたが -fdump-tree-optimizedオプションでコンパイルすることができ指摘しました。これにより、少なくともCのようなプログラムの中間表現が生成されます。

最適化 段階でOpenMPディレクティブはGOMPランタイムライブラリへの呼び出しに置き換えられている、ダンプすることができ、いくつかの段階(GCCのmanページを確認してください)があります。 その表現を見ることで、何が起こっているのかを知ることができます。

関連する問題