0

私は高性能のマージを必要としており、出会いました:マルチコアSIMD CPUアーキテクチャでのソートの効率的な実装Jatin Chhugani et al。

彼らの目的は、1 つの CPU から最大限のパフォーマンスを引き出すことです。解決策の 1 つは、SIMD レベルでビットニック ソーティング ネットワークを使用することです。最小/最大およびシャッフル操作のレイテンシを隠すために、4 つの並べ替えネットワークを同時に実行します (ただし、インターリーブを意味していると思います)。これにより、パフォーマンスが 3.25 倍向上すると主張されています。

私の問題はやや緩和されています。処理する必要がある (読み取りに依存しない) 配列の複数のペアがあるため、複数のプロセスを実行するだけで、簡単に高いスループットを得ることができます。

プロセスの量を利用可能なコアにオーバーサブスクライブすると、レイテンシも隠蔽されますか? しかし、より高いレベルで誘導されますか?それとも、ハイパースレッディングの領域に足を踏み入れていて、CPU コアで同じ機能ユニットを共有する 2 つのプロセスの制限を超えることはないのでしょうか?

もちろん試してみることもできますが、既存のコードを変更することはかなり複雑であり、最初に理論を聞きたいと思います。

4

2 に答える 2

2

私はこれを使っていくつかの実験を行いましたが、HT の利点はごくわずかであるように思われます。一方ではレイテンシを隠すことでいくつかの小さな改善が見られますが、他方ではキャッシュの使用と FSB 帯域幅へのプレッシャーが 2 倍になります (そして 2 倍になります)。メモリ競合も)。場合によっては、パフォーマンスがわずかに向上することもあれば、パフォーマンスがわずかに低下することもあります。すべては、メモリ アクセス パターンとキャッシュのフットプリントに依存しますが、HT は全体的にはあまり役に立ちません。

そうは言っても、メモリアクセスパターンに関する限り、特に最適化されていないコードの場合があるかもしれません.HTが何かを買うかもしれませんが、キャッシュ/メモリ階層の使用を最適化していない場合はSSE.とにかく最適化はおそらく時期尚早です。

于 2014-11-19T13:53:12.093 に答える
1

いいえ、スレッド化はパイプライン バブルに対する効果的な解決策ではありません。粒度が適合しません。コンテキストの切り替えには数百サイクルかかりますが、ビットニックソートの単純な実装によって引き起こされる一種の失速は 2 ~ 4 サイクル単位です。

そうは言っても、ユースケースが何であるか、またはボトルネックがどこにあるのかが明確ではないため、マルチプロセッシングが役立つ可能性があります. 調べる方法はただ一つ。

于 2014-11-19T10:15:01.520 に答える