前回は、SSE2をON/OFFした時に浮動小数点演算の関数が高速化されているかどうかを比較してみましたが、今回は、OpenMPでマルチスレッド化(マルチコアCPU対応)を行った時に関数が高速されているかどうか、同様にクロック数を測定して比較してみます。
Math Performance
前回のMath PerformanceにOpenMPを使ったマルチスレッド化コードをさらに追加して測定を行った(OpenMP使用時にスレッドが無尽蔵に増える問題にも対応している)。
Pentium-M
Pentium-M 1.3GHz、Windows XP ProfessionalのPCの測定結果
Pentium-Mの場合、ハイパースレッディングやマルチコアではないためマルチスレッド化の恩恵は特にない。若干性能が改善されているものはあるが、これはCPUのパイプラインのスループットが若干改善された影響かもしれない。ただし、増えているものもありこれはマルチスレッド化のコストが単に積み重なっただけのものであろう。
Core 2 Duo
Core 2 Duo 2.4GHz(E6600)、Windows XP ProfessionalのPCの測定結果
他のCPUに比べ改善率が非常に(1.52倍)よい。また、クロック数を単に比較しても一番小さいことがわかる。さすが、本家マルチコアCPUといったところだろうか。
Xeon
Xeon 2.4GHz、Windows 2008 ServerのPCの測定結果
ハイパースレッディングに対応しているとのことだったが特に高速化されることはなく、マルチスレッド化によってそのコストが単に積み重なってしまっているようだった。もしくは、Windows 2008 ServerとOpenMPとの相性が悪いのかもしれない。
Athlon 64 x2
Athlon 64 x2 2.2GHz(4200+)、Windowx XP x64のPCの測定結果
Core 2 Duoにはかなわないが、マルチコアCPUらしく多少(1.28倍)改善されているようである。関数の元々のクロック数が大きいものほど改善率がよいことがわかる。
以上のようにマルチコアCPUでマルチスレッド化の恩恵が非常に大きいことがわかる。
次回はデータ数の違いでの高速化を見てみたいと思う。