2

ループ内の C 構造体の巨大な配列で動作し、一部のデータを別の配列に格納する (アーム) インライン アセンブリ コードを書いています。

プロセッサは PLD プリフェッチ コマンドをサポートします。

連続した順序でデータにアクセスしている場合、現在の構造体の処理を開始する前に、プリフェッチ コマンドを使用して配列内の次の構造体の開始アドレスをロードすると、パフォーマンスが向上しますか? または、各反復で次のものをプリフェッチする必要がありますか? または、一定量のバイト先をプリフェッチしますか?

宛先配列のアドレスをプリフェッチすることも意味がありますか?

ありがとう!

4

1 に答える 1

1

これは、プロセッサの内部構造に大きく依存します。プリフェッチによってパフォーマンスが向上する場合もあれば、そうでない場合もあります。ドキュメントを確認する必要があります。

計算サブユニットと並行して動作するプロセッサにデータをロードするための別のサブユニットがあれば、パフォーマンスを向上させることができます。また、プリフェッチ命令は別の命令であるため、キャッシュラインのブロック長ごとに 1 回だけ発行することをお勧めします。それ以上頻繁に発行しないでください。そうしないと、プロセッサの負荷が増えて時間が無駄になります。データをロードするためのサブユニットが分離されておらず、それでもプリフェッチ命令を発行すると、パフォーマンスの低下に直面する可能性さえあります.同時作業がなく、プロセッサの負荷が大きくなり、時間の浪費につながるため、パフォーマンスが向上しません.

書き込むだけの配列からデータをプリフェッチしないでください。時間の無駄です。

于 2010-01-28T14:55:42.853 に答える