質問

セルプロセッサのSPEでSIMD拡張機能を使用して、多くの物理計算を行ういくつかのCコードを最適化する必要があります。各ベクトル演算子は、4つのフロートを同時に処理できます。理想的には、最も楽観的なケースでは4倍のスピードアップが期待されます。

ベクトル演算子の使用はより大きなスピードアップを与える可能性があると思いますか?

ありがとう

役に立ちましたか?

解決

最適化は、アルゴリズムの再考で発生します。不必要な手順を排除します。同じ結果を達成する直接的な方法をもっと見つけてください。問題により関連するドメインでソリューションを計算します。

たとえば、ベクトル配列が n これはすべて同じ行にあり、エンドポイントのみを変換し、中間点を補間するだけで十分です。

他のヒント

SIMDの命令は正確ではない可能性があるため(あまりにも多くの問題を与えるほどではない)、まっすぐな浮動ポイントよりも4倍の速度を上げることができます。それは本当に依存します。

最良の計画は、可能な限り最適化しているプロセッサについて多くを学ぶことです。 4倍の改善よりもはるかに優れていることがわかります。あなたはあなたができないことがわかるかもしれません。しかし、あなたが最適化しているアルゴリズムとあなたがターゲットにしているCPUについて詳しく知ることなく、私たちは言うことはできません。

単独では、いいえ。しかし、それらをサポートするようにアルゴリズムを書き直すプロセスも、たとえば局所性や分岐動作を改善し、たとえば改善している場合、無関係なスピードアップを見つけることができます。ただし、これはどんな再ライテにも当てはまります...

これは完全に可能です。

  • 自分が何をしているのかを知っている場合、コンパイラよりも巧妙な指導レベルのマイクロ最適化を行うことができます。
  • ほとんどのSIMD命令セットは、通常のスカラーFPU/ALUコード(SSE2のPAVG/PMINなど)では同等の強力な操作を提供します。これらがあなたの問題に正確に適合しなくても、多くの場合、これらの指示を組み合わせて大きな効果を得ることができます。
  • セルについてはわかりませんが、ほとんどのSIMD命令セットには、データをキャッシュにプリフェッチするなど、メモリアクセスを最適化する機能があります。これらで非常に良い結果が得られました。

これはセルやPPCではなく、私の単純な画像畳み込みフィルターでは、並列性のレベル(一度に16ピクセル)よりも高いAtomで20倍のスピードアップ(C対SSE2)を取得しました。

それはアーキテクチャに依存します。現時点では、X86アーキテクチャ(別名SSE)を想定しています。

タイトループで係数4を簡単に取得できます。既存の数学をSSE命令に置き換えるだけで完了です。

SSEを使用する場合、通常はコンパイラが使用していないレジスタで数学を行うため、それ以上のものを得ることができます。これにより、ループ制御やアドレス計算など、他のタスクの汎用登録が解放されます。要するに、SSE命令を囲むコードはよりコンパクトになり、より速く実行されます。

そして、メモリコントローラーにメモリにアクセスする方法を示唆するオプションがあります。たとえば、キャッシュをバイパスするかどうかにかかわらずデータを保存する場合。帯域幅の空腹のアルゴリズムについては、その追加の速度のオントップを提供する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top