NEONの12個のクワッドレジスタをロードする単純なasmコードがあり、ロード命令とともにペアワイズ加算命令を並列化しました(デュアル発行機能を利用するため)。ここでコードを確認しました:
http://pulsar.webshaker.net/ccc/sample-d3a7fe78
ご覧のとおり、コードは約 13 サイクルかかります。しかし、ボードにコードをロードすると、ロード命令はロードごとに 1 サイクル以上かかるようです。確認したところ、前述のように VPADAL は 1 サイクルかかりますが、VLD1 は 1 サイクル以上かかることがわかりました。何故ですか?
私は次の世話をしました:
- アドレスは 16 バイトでアラインされています。
- 説明書に位置合わせのヒントを提供している
vld1.64 {d0, d1} [r0,:128]!
- プリロード命令
pld [r0, #192]
をいくつかの場所で試してみましたが、実際に待ち時間を短縮するのではなく、サイクルを追加しているようです。
誰かが私が間違っていることを教えてもらえますか?なぜこの遅延が発生するのですか?
その他の詳細:
- cortex-a8を参考に
- arm-2009q1 クロス コンパイラ ツール チェーン
- アセンブリでのコーディング