それはいくつかのプリフェッチ技術に関連していますか? それともDDRアクセスのタイミング特性?
3 に答える
ARMv5TE 以降の IIRC は、LDRD/STRD 命令に対応するために、書き込みバッファと L1 キャッシュへのパスが 64 ビット幅です。これにより、STM はサイクルごとに 2 つのレジスタを書き込むことができます。
また、L1 命令キャッシュを少し節約し、デュアル発行コアでパイプラインを 1 つだけ使用することもできます。これも追加のメリットです。
より多くの命令、より多くのフェッチ サイクル、より多くの命令を実行すると、時間がかかります。バスは 64 ビット幅であるか、または 64 ビット幅である可能性があります。1 つのレジスタ stm の場合、ゲインはありませんが、複数のレジスタを使用すると、データを移動するためのバス サイクル数が減少し、メモリ システムによっては、 64ビット幅では、読み取り-変更-書き込みも低速です。通常はライトスルーであるはずのキャッシュに読み取り、変更、書き込みを行う必要がある場合、読み取りのコストだけでなく、キャッシュ領域も失います。キャッシュでヒットした場合でも、読み取り-変更書き込みによりコストがかかる可能性があります。
arm サイトにアクセスして amba/axi 仕様をダウンロードし、バス トランザクションがどのように機能するかを確認できます。オーバーヘッドを乗り越えたら、トランザクションごとに多数のクロック サイクルが関係します (一度に複数のトランザクションを実行できます)。これは 64 ビット分のデータあたりのクロックであるため、128 ビットは転送に 64 ビットよりも 1 クロック多くかかります。32 ビットと 64 ビットでは、転送に同じ量のクロックが必要です (アライメントされている場合)。
すべてのアーキテクチャについて話すことはできませんが、少なくとも 1 つのアーキテクチャでは、読み取りのみが実際には 1 回の転送で 64 ビット以上を実行すると信じています。書き込みは、個別の 64 ビット転送に分割されました。私はそれを間違って覚えている可能性があります。
4 ワード相当のデータを読み取りまたは書き込み、アライメントなしで移動すると、奇数ワードごとに 1 つと、中央のアライメントされた 64 ビットに 1 つずつ、合計 4 つの個別の転送になると思います。したがって、アライメントが重要になる可能性があります。
それはいつですか?
この便利な表によると、STM
命令は 1 つのレジスタを格納するのに 2 サイクル、またはn > 1の場合、 n個のレジスタを格納するのに n サイクルかかります。
一方、 はSTR
常に 1 サイクルかかります。
STM
よりも速いのはSTR
いつですか?
- 1 つのレジスタの場合、
STM
速度が遅くなります。 - n個のレジスタ ( n > 1) の場合、それらは同じです。
一方、上記のリファレンスは ARM9TDMI アーキテクチャ用であり、多くの ARM があります。