PPGPLASMA benchmark
Razvita programska koda je za namene primerjave različnih superračunalnikov služila tudi za izbor arhitekture HPCFS. Ker je koda predvsem računsko intenzivna se je izkazalo, da vključeno nitkanje z navideznimi jedri (hyperthreading) na procesorjih Intel bistveno pomaga k hitrosti izračunavanja. Pospešek zaradi hyerthreadinga je lahko tudi do 50%. Teste smo izvajali tudi na naslednjih evropskih sestavih:
- EFDA-ITM Gateway - AMD 2352 (Barcelona) - http://www.efda-itm.eu/
- Mellanox inc. Cluster - Vesta - AMD AMD 6136 (Magny cours) - http://www.hpcadvisorycouncil.com/cluster_center.php
- Juelich supercomputing centre - Cluster HPC-FF- Intel X5570 (Nehalem-EP) - http://www.fz-juelich.de/jsc/juropa/
- Univerza v Innsbrucku - LEO1 - AMD 6172 (Opteron)- http://www.uibk.ac.at/zid/systeme/hpc-systeme/leo1/
ppgplasma je OpenMP program z dobrim izkoristkom jeder. Sam program ne potrebuje velike količine spomina. Test s 1000 iteracijami se je izvajal na Intel(R) Xeon(R) CPU E5530 @ 2.40GHz. Naslednji rezultati kaže, da hyperthreading pomaga, saj je kar 20 minut hitrejši.
L5520 @2.4GHz
16 core hyperthreaded
real 38m22.848s = 1.57 simulacij/uro
user 527m41.671s
sys 0m17.905s
--------------------
Brez hyperthreadinga
real 59m10.142s = 1.01 simulacij/uro
user 392m20.983s
sys 0m21.797s
--------------------
AMD opteron 6172 2.1GHz 24 jeder ICC 11.0.64
real 24m32.034s = 2.45 simulacij/uro
user 586m53.318s
sys 0m24.423s
AMD opteron 6172 2.1GHz 24 jeder GCC 4.1.2
real 30m26.910s = 1.97 simulacij/uro
user 727m19.618s
sys 0m15.256s
OMP_NUM_THREADS=12
real 49m22.439s = 1.21 simulacij/uro
user 591m5.875s
sys 0m9.801s
[test03@g34001 benchmark]$ time numactl --physcpubind=0-11 ../ppgplasma
real 50m42.918s
user 600m12.083s
sys 0m20.121s
OMP_NUM_THREADS=8
real 74m9.189s = 0.80 simulacij/uro
user 591m54.043s
sys 0m7.667s
[test03@g34001 benchmark]$ time numactl --physcpubind=0-11 ../ppgplasma
real 73m48.885s
user 589m7.458s
sys 0m8.365s
OMP_NUM_THREADS=8 GCC 4.1.2
real 113m37.603s = 0.52 simulacij/uro
user 741m40.096s
sys 0m1.954s
----------------------
X5570 z 8 jedri @2.93GHz JUROPA-FF ICC 11.1
resources_used.cput=04:28:57
resources_used.mem=6020kb
resources_used.vmem=561268kb
resources_used.walltime=00:34:01 = 1.76 simulacij/uro
X5570 z 8 jedri @2.93GHz JUROPA-FF GCC 4.3.2
real 38m12.247s = 1.57 simulacij/uro
user 302m13.517s
sys 0m0.300s
----------------------
Quad-Core AMD Opteron(tm) Processor 2352 @2.1GHz 8 jeder
ICC 11.0
real 81m44.290s
user 652m11.059s
sys 0m12.867s
GCC 4.1.2
real 93m22.213s
user 742m11.883s
sys 0m5.561s
AMD Opteron(tm) Processor 2354 @2.2GHz Open64 4.2.3.1 8 jeder (front node)
real 88m47.011s
user 663m35.465s
sys 0m14.707s
Primerjava Open64 4.2.3.1 in Icc 11.1 prevajalnika
Za te teste je potrebno izklopiti long double integracijo
//#define GSL_INTEG_LONG_DOUBLE
Intel(R) Xeon(R) CPU X5570 @ 2.93GHz - 8 core ICC 11.1 -O2
real 32m39.925s
AMD Opteron(tm) Processor 6172 - 24 core Open64 4.2.3.1 -O3
real 28m31.815s
user 676m47.334s
sys 0m5.577s
AMD Opteron(tm) Processor 6172 - 24 core Open64 4.2.3.1 -O3 OMP_NUM_THREADS=8
real 86m11.561s
user 684m9.541s
sys 0m2.107s
čas v minutah za 100 iteracij/ simulacij na uro
CPU |
AMD 6172 @2.1GHz Open64 -O3 |
AMD 6172 @2.1GHz ICC 11.1 -O2 |
AMD 2352 @2.1GHz ICC 11.0 -O3
|
AMD 2352 @2.1GHz GCC 4.1.2 -O3 |
AMD 2352 @2.1GHz Open64 4.2.3 -O3 |
Intel X5570 @2.93GHz ICC 11.1 -O2 |
Intel X5570 @2.93GHz GCC 4.3.2 -O3 |
AMD 6176SE @2.3GHz /skalirano *1.095
|
AMD 6136 @2.4HGHz /skalirano *1.142 |
1 |
67.1 / 0.89 |
53.7 / 1.11 |
64.5 / 0.93 |
69.5 / 0.86 |
68.1 / 0.88 |
25.7 / 2.33 |
28.9 / 2.07 |
/ 1.21 |
47.6 / 1.26 |
2 |
33.92 / 1.76 |
27.4 / 2.19 |
38.4 / 1.56 |
41.7 / 1.44 |
40.1 / 1.50 |
13.13 / 4.57 |
14.7 / 4.08 |
|
|
3 |
22.83 / 2.62 |
18.5 / 3.24 |
26.4 / 2.27 |
28.0 / 2.14 |
27.3 / 2.20 |
8.71 / 6.89 |
9.76 / 6.15 |
|
|
4 |
17.23 / 3.48 |
13.9 / 4.31 |
18.4 / 3.26 |
19.9 / 3.01 |
19.0 / 3.16 |
6.51 / 9.22 |
7.33 / 8.19 |
|
|
6 |
11.46 / 5.23 |
9.25 / 6.49 |
11.9 / 5.04 |
12.5 / 4.80 |
12.4 / 4.83 |
4.36 / 13.8 |
4.88 / 12.3 |
|
|
8 |
8.70 / 6.90 |
6.98 / 8.60 |
8.21 / 7.30 |
8.86 / 6.77 |
8.69 / 6.90 |
3.25 / 18.5 |
3.72 / 16.1 |
6.37/ 9.41 |
6.12 / 9.8 |
12 |
5.75 / 10.43 |
4.62 / 12.98 |
|
|
|
~2.16 / ~27.8 (1)
|
|
|
|
16 |
4.37 / 13.72 |
3.48 / 17.24 |
|
|
|
|
|
|
3.04 / 19.7 |
24 |
2.85 / 21.05 |
2.31 / 25.97 |
|
|
|
~1.37 / ~43.6 (2) |
|
2.1 / 28.44 |
|
32 |
|
|
|
|
|
|
|
|
~1.5 / ~39.4 |
48 |
|
~1.15/~51.94 |
|
|
|
|
|
1.05 / 56.9 |
|
(1) Projekcija za X5670 - skalirano z 12/8
(2) Projekcija s hyperthreadingom *1.57
Zaključek
Iz zgornjih testov lahko izpeljemo naslednje ugotovitve:
- Med -O2 in -O3 za Intel 11.1 prevajalnik ni nikakršne razlike.
- Na Xeon procesorjih je ICC okoli 15% hitrejši od GCC
- Na AMD procesorjih je ICC okoli 8% hitrejši od GCC
- Na AMD procesorjih je Open64 okoli 2% hitrejši od GCC
- AMD Magny-Cour je pri isti frekvenci 20% hitrejši od Barcelone
- 12 Xeon jeder s HT je približno isto zmogljivo kot 32 Opteron jeder
- Uporaba HyperThreadinga je primerna nastavitev če je možno pripenjanje procesov