Cell ProcessorのSPEでSIMD拡張命令を使用して、多くの物理計算を行うCコードを最適化する必要があります。各ベクトル演算子は、4つのフロートを同時に処理できます。したがって、理想的には、最も楽観的なケースでは4倍のスピードアップが期待できます。
ベクトル演算子を使用すると、より高速化できると思いますか?
ありがとう
SIMD 命令は正確性に欠ける可能性があり (多くの問題を引き起こすほどではありません)、実行にかかるサイクルが少なくなるため、ストレート浮動小数点の 4 倍よりも高速になります。それは本当に依存します。
最善の計画は、最適化するプロセッサについてできるだけ多くを学ぶことです。4 倍以上の改善が得られる場合があります。できないことがわかるかもしれません。ただし、最適化しているアルゴリズムとターゲットにしている CPU について詳しく知らなければ、何とも言えません。
最良の最適化は、アルゴリズムを再考するときに発生します。不要な手順を削除します。同じ結果を達成する直接的な方法をもっと見つけてください。問題により関連性の高い領域で解を計算します。
たとえば、ベクトル配列がすべて同じ線上にあるn 個のリストである場合、端点のみを変換し、中間点を補間するだけで十分です。
それ自体では、いいえ。しかし、それらをサポートするためにアルゴリズムを書き直すプロセスがたまたまキャッシュの局所性や分岐動作を改善する場合、無関係な速度向上が見られる可能性があります。しかし、これはどんな書き直しにも当てはまります...
これは完全に可能です。
これはセルや PPC ではありませんが、私の単純な画像畳み込みフィルターは、Atom で 20 倍の速度向上 (C 対 SSE2) を達成しました。これは、並列性のレベル (一度に 16 ピクセル) よりも高くなっています。
それはアーキテクチャに依存します..当面は x86 アーキテクチャ (別名 SSE) を想定しています。
タイトなループでファクター 4 を簡単に得ることができます。既存の数学を SSE 命令に置き換えるだけで完了です。
SSE を使用すると、通常はコンパイラによって使用されないレジスタで計算を行うため、それ以上の結果を得ることができます。これにより、ループ制御やアドレス計算などの他のタスクのために汎用レジスタが解放されます。つまり、SSE 命令を囲むコードがよりコンパクトになり、実行速度が向上します。
そして、キャッシュをバイパスする方法でデータを保存するかどうかなど、メモリへのアクセス方法をメモリコントローラに通知するオプションがあります。それに加えて、帯域幅を大量に消費するアルゴリズムの場合、さらに速度が向上する可能性があります。