Intel CPUのスレッド並列のスケーラビリティがAMD CPUより悪い件について
なぜかIntelのCPUのスレッド並列でのスケーリングが悪いんですよね。なぜなのかわかる人いたら教えてほしいです。
- OpenMPでのスレッド並列
- イテレーション一回当たり160[us]程度の処理
- それぞれのメモリアクセスはほぼ独立で、コンフリクトもしない。
- IntelのCPUだとものすごくスケールできないが、AMDだとすごくきれいにスケールする。最適化をかけても同じ。
- gcc 8.3.1&OpenMP
- 全てCentOS 8
比較マシンのCPUはこんな感じです。 * AMD Ryzen 3900(12C) * AMD EPYC 7352 (24C) x2 socket * Intel Xeon Gold 6238 (22C) x2 socket
で、結果です。IntelマシンとAMD Ryzenのマシンの比較ですが、EPYCでもきれいにスケールします。
は?
いやいや、おかしいでしょ、裏で何か動いているのかと思いきや何も動いてないし、Intelは全然スケールしないし。 AMD EPYCのほうも似たような結果になりました。なぜかIntelだとスケールしないです。メモリ帯域は、Ryzenでも飽和しなかったので、Intelだともっと余裕があるはずだし、チップ内部のトポロジーの問題なのでしょうか??
スレッド並列が不得意だとしても、さすがにこの結果はひどいと思いました。 ちなみに、EPYCでは20C並列を2つ動かしても性能低下は特にみられませんでした。(おそらくメモリアクセスはそこまで頻繁ではなさそう) Intelのほうでも、1Cのみのプロセスを2つ動かした際、性能低下はなかったのでおそらくOpenMPのスレッド並列がうまくいってないと思われます。 同じような不具合の方いたら教えてもらえればと思います。
2021/01/07補足
intelコンパイラでやっても、Intelマシンで性能が出ませんでした。AMDが爆速でしたね。
また、スレッド並列化はだめですが、同じプログラムを繰り返したり、問題のサイズを大きくするとまぁまぁうまくスケールするみたいです。が、AMDと同じくらいのサイズでスケールしてもらいたいものです。