SSE命令の使用 質問する

SSE命令の使用 質問する

C++ で記述したループがあり、これは大きな整数配列の各要素に対して実行されます。ループ内では、整数の一部のビットをマスクし、最小値と最大値を見つけます。これらの操作に SSE 命令を使用すると、ビット単位の AND と if-else 条件を使用して記述された通常のループに比べて、はるかに高速に実行されると聞きました。私の質問は、これらの SSE 命令を使用する必要があるかどうかです。また、コードを別のプロセッサで実行した場合はどうなりますか? それでも機能しますか、それともこれらの命令はプロセッサ固有ですか?

ベストアンサー1

  1. SSE 命令はプロセッサ固有です。どのプロセッサがどの SSE バージョンをサポートしているかは、Wikipedia で調べることができます。
  2. SSE コードが高速化されるかどうかは、多くの要因によって決まります。まず、問題がメモリ依存か CPU 依存かという点です。メモリ バスがボトルネックになっている場合、SSE はあまり役に立ちません。整数計算を単純化してみてください。コードが高速化する場合は、おそらく CPU 依存であり、高速化できる可能性が高くなります。
  3. SIMD コードの記述は C++ コードの記述よりもはるかに難しく、結果として得られるコードを変更するのもはるかに難しいことに注意してください。C++ コードを常に最新の状態に保ってください。コメントとして使用したり、アセンブラ コードの正確性を確認したりするために必要です。
  4. さまざまなプロセッサ向けに最適化された一般的な低レベル SIMD 操作を実装する IPP などのライブラリの使用を検討してください。

おすすめ記事