0

私は8x8のデータを持っています。処理後、結果の 8x8 データを次の処理のためにしばらく保持したいと考えています。私の質問は、ループで保存するように 4 つの Q レジスタをプログラムできるかどうかです。しかし、次のコードはコンパイルされません。d12 の 12 を d13 にインクリメントするのも好きです。

mov r4, #7

1:
.
.
vmul.i16 d12, d12, d1[r4] 
subs r4, r4, #1
bge 1b

これらを処理する方法または効率的な方法はありますか?

4

1 に答える 1

0

レジスタを間接的に参照できるとは思えません。おそらく、これにはマクロを使用する必要があります。使用するマクロの種類の例については、私が送った行列乗算のページを参照してください。ループを使用するのではなく、計算ごとに 1 回呼び出します。これには、そもそもループを回避できるという利点もあります。メモリではなくレジスタを使用している場合は、パフォーマンスが心配であり、ブランチはパフォーマンスに悪いと思います。

そのページの「スケジュール」セクションにも注意してください。パフォーマンスが非常に気になる場合は、マクロでもいくつかの問題が発生します。同じレジスター (この場合は d12) をすばやく読み書きすると、パイプラインがストールする可能性があります。これを回避できるように、反復をインターリーブすることがよくあります。(...、d3 から読み取る、d2 に書き込む、d3 を使用して計算する、d4 から読み取る、d3 に書き込む、d4 を使用して計算する、...) これは、より多くの手書きコードを意味しますが、はるかに高速です。

于 2013-02-27T18:08:29.433 に答える