4

ARM cortex-a8 プロセッサで実行されている画像処理プロジェクトを改善しようとしています。

メモリから 8 ビットのグレースケール イメージ データにアクセスしていました。私の関数では、現在、個々のピクセル値にバイト単位でアクセスしています。

NEONを利用することで、メモリから128/8 = 16バイトにワンショットでアクセスし、関数でそれらを利用することでこれを改善できると考えました。しかし、変更されたバージョンを実行すると、実際にはバイト単位のアクセスよりも時間がかかっていることがわかります。NEON を使用したフェッチがボトルネックになり、計算時間よりも時間がかかっていると思います。

ARM Cortex-A8 のデータ バス サイズは? 1 回のメモリ フェッチでメモリからアクセスされるバイト数は?

4

2 に答える 2

3

Cortex A8 TRM から:

「システム設計に柔軟性を提供する64ビットまたは128ビットのAXIインターコネクトに接続するようにプロセッサを構成できます」

リンゴとオレンジを比較しているのかもしれませんが、NEON は必要ですか? ldrb/strb の代わりに、ldrd/strd または ldm/stm を使用して 64 ビット転送を取得できます。ARM/AXI は、先を見越して小さな転送を大きな転送にグループ化するのに十分スマートです。たとえば、2 つの 32 ビット転送を 1 つの 64 ビットにまとめることができます。しかし、私はそれに頼りません。ldr/str または ldrd/strd に変更してもパフォーマンスが向上しないことがわかった場合にのみ言及します。

読み取りまたは書き込みループを分離 (データ処理なし) し、バイト対ワード対ダブルワードを試しましたか? 単語からバイトを抽出するコードが、バスの節約を圧倒している可能性があります。

これはどのような種類のメモリですか? これはオンチップなのかオフチップなのか、AXI (ARM) クロック速度に対するこのメモリの速度は?

このリージョンでデータ キャッシュを有効にしていますか? それがミュート ポイントである可能性がある場合、最初のバイト読み取りは最適なデータ バス サイズを使用してキャッシュ ライン フィルを実行し、そのキャッシュ ライン内の後続の読み取りは AXI バスに到達せず、ましてやターゲット メモリに到達しません。同様に、書き込みはキャッシュまでしか行わず、後で最適化された幅の広いバスでターゲットに送信する必要があります。キャッシュ/書き込みバッファの構成方法によって異なります。

于 2010-11-27T07:33:42.457 に答える
0

パイプラインの失速が発生している可能性があります。Neon を介して読み取りたい場合、CPU コアでそのデータを使用する前に、ある程度の待ち時間が発生します。

于 2010-11-27T08:04:37.677 に答える