0

x86 アーキテクチャでのバルク メモリ コピーの最適な方法を知りたいです。これはマシン固有の特性に依存することを認識しています。主なターゲットは、ここ 4 ~ 5 年間に製造された典型的なデスクトップ マシンです。

昔は MOVSD with REPE が一度に 4 バイトを移動できるため名目上最速のアプローチだったことは知っていますが、最近では MOVSB の方が同じくらい高速で書き込みが簡単であることを読んだことがあります。移動して、4 バイトの移動の複雑さを忘れてください。

周囲の問題は、MOVxx 命令がまったく価値があるかどうかです。CPU がメモリ バスよりもはるかに高速に実行できる場合、CISC 移動を使用するのは無意味であり、通常の MOV を使用することもできます。これは、ARM などの他のプロセッサ アーキテクチャで同じアルゴリズムを使用できるため、非常に魅力的です。これは、ARM のバルク メモリ移動用の特殊な命令 (Intel とはまったく異なる) に価値があるかどうかという類似の問題を提起します。


注: Intel Optimization Reference Manual のセクション 3.7.6 を読んだので、基本は理解しています。このマニュアルに記載されている内容を超えて、誰かがこの分野での実際の経験を語ってくれることを願っています。

4

1 に答える 1

5

最新の Intel および AMD プロセッサでは、REP MOVSB が最適化されており、可能な場合は一度にキャッシュ ライン全体をコピーするため、一括データをコピーする最良の (最速ではないかもしれませんが、かなり近い) 方法になっています。

ARM に関しては、アーキテクチャのバージョンによって異なりますが、一般的には展開されたループを使用するのが最も効率的です。

于 2012-12-10T00:12:43.350 に答える