0
効率的な方法で、42の32ビット連続したメモリロケーションをコピーする方法を検討しています。
注:スナップショットアレイはログアレイにコピーされます。ARM LDMとSTMのwrtデータキャッシュとデータバス
私はLDMIAとSTMIAペア(命令当たり10レジスタ)を使用しています:
LDMIA R0!, {R2-R12} ; Read 10 array slots\n
STMIA R1!, {R2-R12} ; Write 10 array slots\n
私の質問:
- はどのようにこれらの命令は、データキャッシュに影響を与えていますか?
- データバスはロード/ストア全体でロックされているか、32ビットロード/ストアごとにロックされていますか?
つまり、LDM
命令の場合、ARMはデータバスをロックしてすべてのデータをレジスタにロードしますか、または32ビット転送ごとにロックされたデータバスのみですか?
コードはARM Cortex A8(Texas Instruments am3358)で実行されています。
私はあなたがARMからCortex-A series programming guideをチェックアウトする必要がありますARM Architecture Reference Manual
amba/axiのドキュメントを見ると、あらゆる種類のバスがロックされていると想像できません。ロードアドレスの要求はIDで出て、後でそのアドレスを受け入れ、後であなたのデータです。バスは一度に多くの転送が行われるように設計されており、このように整列され、64ビットのマルチペルであり、それぞれ1つのトランザクションである可能性があります。私は、たとえ長さフィールドがより多くのものを許しても、ストアが別々の64ビット転送に変わるかもしれないと信じる理由がある。 –
と多分ロードが8ワードに分割されていることを知っている人2.キャッシュラインのサイズを知りません。できるだけ多くのldm/stmレジスタで実行できる最大のトランザクションを作っていますが、私はそれが助けになるとも思います。あなたはsystickタイマーを使用することができ、理想的には他に何も起こらない(ベアメタル)と8つのレジスタが整列しているかどうかを調べるためのスピード実験を行い、10よりも良く動く、テストのみを読む、書き込み専用など –
trmコアの場合はl2キャッシュ用のtrm、バス情報(amba/axi)はおそらくあなたが見つけようとしているすべての公開ドキュメントです。 –