Fast Barrier for x86 Platforms

by syoyo

自動最適化で Spiral の資料をあさることが多くなっていますが、
ひとつ面白そうなネタを見つけました。

x86 での最速なバリア同期処理は何か?というもの。

Fast Barrier for x86 Platforms
http://www.spiral.net/software/barrier.html

まず、驚きだったのが、pthread のバリア同期関数の遅さ。
2×2 cores では 27000 cycles もかかっている
これは CPU の周波数が 2.7 GHz なら、0.1 msec かかるということになる。ひょえ〜〜

lock + アトミック加算でのバリア同期だと、数千サイクル程度に減る。

どれもそうだけど、2×2 cores(2 dies) では、FSB をまたぐ必要があるわけで 2 cores(1 die)
より遅くなるのは当然。

以外と健闘しているのが、Icc + OpenMP によるバリア同期。
ただこれはコンパイラ次第によって変わるだろうから、あまり参考にはならなそう。

で、最後に一番早いと提案されているのが、なんか独自の?配列を使った方法。
lock + アトミック加算より 2 倍くらい早くて、アセンブラを使わなくてよいという利点がある。
2 cores の時で 200 サイクルくらいなので、一回メインメモリにアクセスするのと同じくらいの
コストで同期がとれるということになる。

いずれにせよ、ここらへんで最適化するよりは、
まずは同期の回数が少ない並列プログラムを書くようにするほうがよいでしょうね。

Advertisements