2008-09-17 45 views
3

新しいARMプロセッサには、PLD命令とPLI命令が含まれています。ARMのプリフェッチ命令

私は、非シーケンシャルなメモリアクセスパターンを持つタイトな内部ループ(C++)を書いていますが、自然に自分のコードが完全に理解できるパターンです。私は、現在のメモリ位置を処理しながら次の場所を先読みすることができればかなりのスピードアップが予想されますが、これは実験の価値があることを試すのに十分速いと思います!

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

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

+0

最適化している特定のループの例が質問に含まれている場合、貢献者はPLD命令以外の最適化を見つけるのに役立ち、具体的な例を挙げることができます。 –

答えて

5

コンパイラ固有の機能がいくつかあります。 C/C++のための標準的な方法はありません。コンパイラ「コンパイラリファレンスガイド」を参照してください。 RealView Compilerの場合は、thisまたはthisを参照してください。

0

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

0

明らかに尋ねる危険性があります:コンパイラのターゲットアーキテクチャを確認しましたか?たとえば、ユーモアの場合、デフォルトでコンパイラがARM7をターゲットにしている場合は、になりません。はPLD命令を見ます。

0

software pipeliningloop unrollingのような他の最適化では、プリフェッチのアイデアと同じ効果が得られる可能性はありませんが(余計な命令キャッシュを重複させることによって負荷のレイテンシを隠す)余分な指示に起因する圧力。私は、命令がほとんどなく、制御フローがほとんどないタイトな内部ループのために、これがより頻繁にそうであると言っているところまで行っています。あなたのコンパイラは、代わりにこれらのタイプの従来の最適化を行っていますか?その場合は、パイプライン図を見て、プロセッサの仕組みのより詳細なコストモデルを作成し、プリフェッチが役立つかどうかをより定量的に評価する価値があります。