6

最新のC++コンパイラ(MSVC、GCC、ICCを含む)を使用しているときに、次のように言うことができます。

  1. コードを並列化
  2. ループをベクトル化(または他の特定のプロセッサ命令を使用)
  3. ループを展開しました
  4. 末尾再帰が検出されました
  5. RVO(戻り値の最適化)を実行
  6. または他の方法で最適化

コンパイラが生成するアセンブラコードに飛び込むことなく?

4

4 に答える 4

18

実際にわかる唯一の方法は、アセンブラーの出力(割引されているように見える)を調べるかどうかです。それ以外に、ドコを読んで、コンパイラの各レベルが提供する最適化のタイプを確認することができます。

しかし、正直なところ、コンパイラの最適化レベルがその仕事をしていると信じていないのなら、おそらくドコを信用しないでしょう:-)

私はアセンブラーを自分で見るでしょう、それはあなたが本当に確信できる唯一の方法です。

于 2009-11-29T08:27:10.563 に答える
3

Intel コンパイラには適切なレポート機能があります。リファレンス ドキュメントまたはマニュアル ページで -vec-report および -par-report を参照してください。

g++ にはベクトル レポートもあります。「ベクトル」のマニュアル ページを参照してください。g++ には並列自動コード生成があるとは思いません。

最後の 3 つのことに関しては、コンパイラがそれを報告しているとは思わないので、おそらくその情報を取得するにはアセンブリに移動する必要があります

于 2009-11-29T08:58:47.250 に答える
0

RVO やその他の copy-elision については、クラスの copy-ctor と dtor にロギング (printf) を入れるだけです。最適化が機能している場合、コピーされるオブジェクトが少なくなるはずです。

于 2009-11-29T10:04:25.383 に答える
0

コンパイラーで最も深い最適化を使用すると、コードが並列化され、ループがベクトル化され、他の多くのベクトル化手法も機能すると確信しています。

その深さを使用するには、コードを実行するときに -O3 コマンドを使用します。

于 2014-03-09T07:53:39.693 に答える