4

新しい ARM プロセッサには、PLD および PLI 命令が含まれています。

非順次メモリ アクセス パターンを持つタイトな内部ループ (C++ で) を作成していますが、コードが自然に完全に理解できるパターンです。現在のメモリ位置を処理しながら次の位置をプリフェッチできれば、大幅な高速化が期待できます。これは、実験に値するように試すのに十分な速さであると期待できます!

私はARMの新しい高価なコンパイラを使用していますが、気になるこの特定のループは言うまでもなく、どこにもPLD命令が含まれていないようです。

C++ コードに明示的なプリフェッチ命令を含めるにはどうすればよいですか?

4

4 に答える 4

5

コンパイラ固有の機能がいくつかあるはずです。C/C++ でこれを行う標準的な方法はありません。コンパイラ コンパイラ リファレンス ガイドを確認してください。RealView Compiler については、こちらまたはこちらを参照してください。

于 2008-09-17T12:23:37.870 に答える
1

これらのループから真に最大のパフォーマンスを引き出そうとする場合は、アセンブラーでループ構造全体を作成することをお勧めします。ループに含まれるデータ構造に応じて、インライン アセンブリを使用できるはずです。ループの一部を展開できればさらに良いでしょう (アクセスをノンシーケンシャルにすることに関係する部分など)。

于 2008-09-17T12:26:51.107 に答える
0

明らかな質問をするリスクがあります:コンパイラのターゲットアーキテクチャを検証しましたか?たとえば(ユーモアを交えて)、デフォルトでコンパイラがARM7をターゲットにしている場合、PLD命令は表示されません。

于 2008-10-28T13:52:40.330 に答える
0

ソフトウェアのパイプライン処理ループのアンローリングなどの他の最適化が、プリフェッチのアイデア (有用な計算とオーバーラップさせることでロードのレイテンシを隠す) と同じ効果を達成する可能性はありますが、余分な命令キャッシュの圧力が発生することはありません。余分な指示によって。命令がほとんどなく、制御フローがほとんどない傾向があるタイトな内部ループの場合、これはほとんどの場合に当てはまります。コンパイラは、代わりにこれらのタイプの従来の最適化を行っていますか? その場合、パイプライン ダイアグラムを調べて、プロセッサの動作に関するより詳細なコスト モデルを作成し、プリフェッチが役立つかどうかをより定量的に評価することをお勧めします。

于 2009-04-29T06:06:37.643 に答える