2012-02-24 15 views
0

私はコンパイラを使用していますが、実際にコードを遅くする最適化を書いていました。それを調べると、私は、コード生成プログラムが私の最適化がオフになっているときにHandle(私たちのコンパイラの場合は二重引用符)を使用することに決めたことを知りました。この結果、配列にアクセスするたびに、2番目のケースでもう1つの参照解除命令が発生しました。命令パイプライニング - アーキテクチャシミュレータとパイプラインビジュアライザ

しかし、この1つの命令は、コードの実行時間が驚くほど32%遅くなりました。私はこれが命令パイプライニングと関係があると思っています。この余分な参照解除は、減速を説明する3つの依存命令を引き起こします。

私は同じことを実証する必要があり、パイプライニングに関する詳細情報を得ようとしています。誰かが命令パイプライニング、有用なアーキテクチャシミュレータ、およびパイプラインビジュアライザーについていくつかの優れた資料を提案できれば素晴らしいでしょう。

答えて

0

ポインタを間接参照する必要がある場合は、まずポインタをメモリからロードしてから、ポインタが指す値をロードする必要があります。値へのポインターへのポインターがある場合、連続する3つの読み込みを行う必要があります。これをポインター追跡と呼びます。これらのポインタがキャッシュにない場合、パフォーマンスへの影響は非常に大きくなる可能性があります。パイプライン処理はあまり役に立ちません。コンピュータ・アーキテクチャーに関する標準的な本はhennessy & pattersonです。そこにはいくつかのアーキテクチャシミュレータがあります。 http://gem5.orgはかなり普及しています(完全公開、私はコミッターです)。しかし、彼らはほとんど常に急な学習曲線を持っています。