0

SSE および AVX SIMD 命令を使用してトップ K フィルタリング アルゴリズムを高速化しようとするプログラムを作成しています。フラグ -o3、-msse3、および -lrt を指定して icc を使用してプログラムをコンパイルしていますが、実行時間は約 30ms です。ただし、最後に -g フラグを付けて vtune または gdb を使用すると、プログラムの実行にかかる時間が ~100ms に跳ね上がります。

誰かがなぜこれが起こっているのか説明できますか? -g がプログラムのコンパイルを変更する理由について、私は非常に混乱しています。

4

1 に答える 1

1

-g-O3(デフォルトの とは対照的に)などの他の最適化フラグを使用-O0すると、通常、実行可能ファイルのサイズが増加し、シンボル名、型情報、行番号などが保持されますが、最適化されたコードには必ずしも影響しません。このようなコードサイズの増加、およびプログラムのシンボル/ロード時間が増加する可能性があります。

この余分なデバッグ データは、 で取り除くことができますstrip [options] program

-gより高い最適化値を使用すると、デバッガーが存在しない変数をステップスルーしようとする可能性があることに注意してください。紛らわしい結果をもたらします。この機能が役に立たないと言っているわけではありません。多くのコード (パッケージ) はデフォルトで でコンパイルされ、最適化された実行可能ファイル/ライブラリが必要な場合に、デバッグやストリッピングの可能性-g -O2がユーザーに与えられます。

于 2014-05-22T13:58:10.230 に答える