Opteron 6380を利用するシステムで、姫野ベンチマークによる計測を行ったところ、
ジョブの割り当て方によって、スコアが大きく変わりましたので、その結果を紹介します。
【環境】
- Opteron 6380 (16 Core/2.5GHz/16MB/115W) x 4個 で64コア
- 4GB DDR3-1866 ECC Registered x 16枚
- Supermicro H8QGi+-F
- OS:CentOS7.1 x86_64
- GNUコンパイラ:GCC 4.8.5
- OpenMPI:1.8.5
- 姫野ベンチ:himenoBMTxp_l size L
- 姫野ベンチMPIバージョン:cc_himenobmt_mpi size L
検証した環境では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ノードへジョブを分散させて実行する方がパフォーマンスが良いことが分かります。