Compiler: gcc 4.8.5
Benchmark: himenoBMTxp
Size: L
[TABLE=21]
Broadwell-EPアーキテクチャー・ワークステーション用CPU「 Xeon E5-1650v4」のベンチマーク記録を追加しました。コンパイラーは、gcc 4.8.5を利用しました。
Compiler: gcc 4.8.5
Benchmark: himenoBMTxp
Size: L
[TABLE=21]
Broadwell-EPアーキテクチャー・ワークステーション用CPU「 Xeon E5-1650v4」のベンチマーク記録を追加しました。コンパイラーは、gcc 4.8.5を利用しました。
1CPU当たり18コアを持つXeon E5-2695v4を2個と、256GB(32GB DDR4-2400 ECC REG x8枚)を搭載するシステムPOWER MASTER Vision S4382にて、姫野ベンチマークによる計測を行ってみました。
【環境】
NUMAノードを確認すると、node0には#0から#17コアが、node1には#18から#35コアが割り当てられていました。(Hyper-Threading分まで含めると、node0には#0から#17コアと#36から#53、node1には#18から#35コアと#54から#71まででした。)
スレッド数1、2,4,8,16,32,36,72での結果が以下の青色で示す棒グラフです。(スレッド数1ではhimenoBMTxp_l size Lの結果、スレッド数2,4,8,16,32,36,72ではcc_himenobmt_mpi size Lの結果です。)
ベンチマークを行う際、なるべくジョブを各NUMAノードに均等に配分する様に実行しました。例えば、8 threadsの場合、コマンドを表記すると、
$ taskset -c 0-3,18-21 mpirun -n 8 ./bmt |
などです。
また、4, 8, 16 threadsのみとなりますが、片方のNUMAノードにのみでジョブを実行した場合の結果もグラフに、マゼンタで示してあります。実行時のコマンドも表記すると、
$ taskset -c 0-7 mpirun -n 8 ./bmt |
などです。
特に面白い結果が4, 8, 16 threadsにおいて、各NUMAノードへ均等にジョブを割り当てた場合と、片側NUMAノードにのみジョブを実行した場合です。
片側NUMAノードへジョブを割り当てた場合には、各NUMAノードへ均等にジョブを割り当てた場合と比べて、分割数4では10%程度、分割数8では20%程度、分割数16では40%程度落ち込んでいます。
1つのNUMAノードへのジョブが集中しない様に、分配する方が良いパフォーマンスを得られることがわかります。
Opteron 6380を利用するシステムで、姫野ベンチマークによる計測を行ったところ、
ジョブの割り当て方によって、スコアが大きく変わりましたので、その結果を紹介します。
【環境】
検証した環境では64個ものCPUコアを搭載しています。
NUMAノードを確認すると、node0には#0から#7コアが、node1には#8から#15コア,…, node7には#56から#63コアが割り当たっていました。
$ cat /sys/devices/system/node/node0/cpulist 0-7 $ cat /sys/devices/system/node/node1/cpulist 8-15 .. .. $ cat /sys/devices/system/node/node7/cpulist 56-63 |
予め8個のコアを利用してベンチマークを実行するファイルbmt8.outを作成し、コア0−7を使った場合(1つのNUMAノードでジョブを実行させる場合)と、コア0,8,16,24,32,40,48,56を使った場合(8つのNUMAノードへジョブを均等に分割配分する場合)とで計測を実施しました。
$ taskset -c 0-7 mpirun -n 8 ./bmt8.out ←① $ taskset -c 0,8,16,24,32,40,48,56 mpirun -n 8 ./bmt8.out ←② |
①のスコアを1とするならば、②では3.3となりました。
また、16個のコアをベンチマークを実行するファイルbmt16.outを利用して計測も行いました。
$ mpirun -n 16 ./bmt16.out ←③ $ taskset -c 0-15 mpirun -n 16 ./bmt8.out ←④ $ taskset -c 0-1,8-9,16-17,24-25,32-33,40-41,48-19,56-57 mpirun -n 16 ./bmt16.out ←⑤ |
tasksetにより実行するコアを指定しない③のスコアを1とするならば、②では0.4、⑤では1.2となりました。
これらから複数のNUMAノードへジョブを分散させて実行する方がパフォーマンスが良いことが分かります。
1CPU当たり14コアを持つXeon E5-2680v4を2個と、64GB(8GB DDR4-2133 ECC REG x8枚)を搭載するシステムPOWER MASTER Vision S4394にて、姫野ベンチマークによる計測を行ってみました。
【環境】
スレッド数1、7、21、28での結果が以下のグラフです。(スレッド数1ではhimenoBMTxp_l size Lの結果、スレッド数7、21、28ではcc_himenobmt_mpi size Lの結果です。)
スレッド数7程度で、メモリ帯域を使い切ってしまうのかスコアが収束しているように見えますが、28スレッドでは42000 MFLOPS程度のスコアが出ました。
計測したシステムには、1CPU当りメモリ4枚が取り付けられ、 最適なメモリモジュール配置構成(quad-channelで動作)で計測を行いましたが、あえてメモリモジュールを各CPUから1枚づつ取り外して、計測した結果が、マゼンタで表示されている箇所です。
最適にメモリモジュールが配置されている場合には、42000 MFLOPS程度の性能が出ていますが、おおよそ半分程度までスコアが下がっています。メモリを適切に配置することは、重要と言えます。
Compiler: gcc 4.8.5
Benchmark: himenoBMTxp
Size: L
[TABLE=19]
Skylakeアーキテクチャー・ワークステーション用CPU「Xeon E3-1230v5」のベンチマーク記録を追加しました。コンパイラーは、gcc 4.8.5を利用しました。