From 9aebde1f0f6406d2395bb6b9455c79675106bb56 Mon Sep 17 00:00:00 2001 From: Guillaume Raffy Date: Wed, 19 Mar 2025 09:23:44 +0100 Subject: [PATCH] added support for amd epyc cpus as a result, concho is now able to handle hpe's amd configurations - also added the l3 cache attribute on cpus (not used yet but I'm planning to show it in the graphs as l3cache per core affects the performance) - added the ability to output the figure in a file instead of the screen (will be useful for continuous integration) work related to [https://bugzilla.ipr.univ-rennes.fr/show_bug.cgi?id=4015] --- catalogs/cpu_table.tsv | 541 +++++++++++++++++++++------------------- concho/config.py | 140 ++++++----- concho/hpev2.py | 33 ++- concho/procs_chooser.py | 30 ++- tests/test1.py | 7 +- 5 files changed, 409 insertions(+), 342 deletions(-) diff --git a/catalogs/cpu_table.tsv b/catalogs/cpu_table.tsv index 91ef060..d757de6 100644 --- a/catalogs/cpu_table.tsv +++ b/catalogs/cpu_table.tsv @@ -1,267 +1,286 @@ -#id clock num_cores max_cpus tdp cpumark_1_cpu cpumark_2_cpu -intel-core-i7-8700k 3.7 6 1 95 0 0 -intel-xeon-5150 2.66 2 2 65 1746 3498 -intel-xeon-e5462 2.8 4 2 80 4038 7350 -intel-xeon-x5550 2.67 4 2 95 5416 9131 -intel-xeon-x5560 2.8 4 2 95 5426 9215 -intel-xeon-x5650 2.67 6 2 95 7601 11728 -intel-xeon-x5660 2.8 6 2 95 7954 11893 -intel-xeon-e5-2660 2.2 8 2 95 11535 17282 -intel-xeon-e5-2670 2.6 8 2 115 0 18509 -intel-xeon-e5-2680 2.7 8 2 130 0 18480 -intel-xeon-e5-2690 2.9 8 2 135 0 20699 -intel-xeon-e5-2620v2 2.1 6 2 95 8664 13474 -intel-xeon-e5-2630v2 2.6 6 2 80 10615 16256 -intel-xeon-e5-2640v2 2 8 2 95 10132 14792 -intel-xeon-e5-2650v2 2.6 8 2 95 13276 19333 -intel-xeon-e5-2660v2 2.2 10 2 95 13659 18670 -intel-xeon-e5-2670v2 2.5 10 2 115 14892 22062 -intel-xeon-e5-2680v2 2.8 10 2 115 16340 23263 -intel-xeon-e5-2690v2 3 10 2 130 17304 24189 -intel-xeon-e5-2695v2 2.4 12 2 130 17231 21980 -intel-xeon-e5-2697v2 2.7 12 2 130 17516 23910 -intel-xeon-e5-2603v3 1.6 6 2 85 4996 8358 -intel-xeon-e5-2609v3 1.9 6 2 85 5878 9885 -intel-xeon-e5-2620v3 2.4 6 2 85 9955 15400 -intel-xeon-e5-2623v3 3 6 2 105 9007 13914 -intel-xeon-e5-2630v3 2.4 8 2 85 12803 18699 -intel-xeon-e5-2630lv3 1.8 8 2 55 11201 0 -intel-xeon-e5-2637v3 3.5 4 2 135 10278 16823 -intel-xeon-e5-2640v3 2.6 8 2 90 14081 20824 -intel-xeon-e5-2643v3 3.4 6 2 135 13671 20574 -intel-xeon-e5-2650v3 2.3 10 2 105 15106 20602 -intel-xeon-e5-2650lv3 1.8 12 2 65 13132 0 -intel-xeon-e5-2660v3 2.6 10 2 105 16161 23388 -intel-xeon-e5-2667v3 3.2 8 2 135 16125 22935 -intel-xeon-e5-2670v3 2.3 12 2 120 16549 22330 -intel-xeon-e5-2680v3 2.5 12 2 120 18840 25352 -intel-xeon-e5-2683v3 2 14 2 120 17917 22704 -intel-xeon-e5-2687wv3 3.1 10 2 160 17785 24769 -intel-xeon-e5-2690v3 2.6 12 2 160 19567 26665 -intel-xeon-e5-2695v3 2.3 14 2 120 20742 26021 -intel-xeon-e5-2697v3 2.6 14 2 145 21667 29009 -intel-xeon-e5-2698v3 2.3 16 2 135 21794 30217 -intel-xeon-e5-2699v3 2.3 18 2 145 22520 24820 -intel-xeon-e5-2603v4 1.7 6 2 85 5247 8809 -intel-xeon-e5-2609v4 1.7 8 2 85 0 10835 -intel-xeon-e5-2620v4 2.1 8 2 85 11219 17063 -intel-xeon-e5-2623v4 2.6 4 2 85 0 10196 -intel-xeon-e5-2630v4 2.2 10 2 85 14221 18281 -intel-xeon-e5-2630lv4 1.8 10 2 55 0 0 -intel-xeon-e5-2637v4 3.5 4 2 135 9665 17398 -intel-xeon-e5-2640v4 2.4 10 2 90 15244 21556 -intel-xeon-e5-2643v4 3.4 6 2 135 14329 22063 -intel-xeon-e5-2650v4 2.2 12 2 105 16212 22619 -intel-xeon-e5-2650lv4 1.7 14 2 65 0 0 -intel-xeon-e5-2660v4 2.0 14 2 105 0 0 -intel-xeon-e5-2667v4 3.2 8 2 135 0 0 -intel-xeon-e5-2680v4 2.4 14 2 120 20489 0 -intel-xeon-e5-2683v4 2.1 16 2 120 0 0 -intel-xeon-e5-2687wv4 3.0 12 2 160 20340 27161 -intel-xeon-e5-2690v4 2.6 14 2 120 22843 28262 -intel-xeon-e5-2695v4 2.1 18 2 135 19351 20768 -intel-xeon-e5-2697v4 2.3 18 2 135 23070 0 -intel-xeon-e5-2697av4 2.6 16 2 145 0 24075 -intel-xeon-e5-2698v4 2.2 20 2 135 24615 32248 -intel-xeon-e5-2699v4 2.2 22 2 145 21277 38461 -intel-xeon-gold-5115 2.4 10 4 85 0 0 -intel-xeon-gold-5117 2.0 14 4 105 0 0 -intel-xeon-gold-5117f 2.0 14 4 113 0 0 -intel-xeon-gold-5117m 2.0 0 4 0 0 21250 -intel-xeon-gold-5118 2.3 12 4 105 0 0 -intel-xeon-gold-5119t 1.9 14 4 85 0 0 -intel-xeon-gold-5120 2.2 14 4 105 0 0 -intel-xeon-gold-5120t 2.2 14 4 105 0 0 -intel-xeon-gold-5122 3.6 4 4 105 0 0 -intel-xeon-gold-6126 2.6 12 4 125 0 0 -intel-xeon-gold-6126f 2.6 12 4 135 0 0 -intel-xeon-gold-6128 3.4 6 4 115 0 0 -intel-xeon-gold-6130 2.1 16 4 125 0 0 -intel-xeon-gold-6130f 2.1 16 4 125 0 0 -intel-xeon-gold-6130t 2.1 16 4 125 0 0 -intel-xeon-gold-6132 2.6 14 4 140 0 0 -intel-xeon-gold-6134 3.2 8 4 130 0 0 -intel-xeon-gold-6134m 3.2 8 4 130 0 0 -intel-xeon-gold-6136 3.0 12 4 150 0 0 -intel-xeon-gold-6138 2.0 20 4 125 0 0 -intel-xeon-gold-6138f 2.0 20 4 135 0 0 -intel-xeon-gold-6138t 2.0 20 4 125 0 0 -intel-xeon-gold-6140 2.3 18 4 140 0 0 -intel-xeon-gold-6140m 2.3 18 4 140 0 0 -intel-xeon-gold-6142 2.6 16 4 150 0 0 -intel-xeon-gold-6142f 2.6 16 4 160 0 0 -intel-xeon-gold-6142m 2.6 16 4 150 0 0 -intel-xeon-gold-6144 3.5 8 4 150 0 0 -intel-xeon-gold-6145 2.0 20 4 145 0 0 -intel-xeon-gold-6146 3.2 12 4 165 0 0 -intel-xeon-gold-6148 2.4 20 4 150 0 0 -intel-xeon-gold-6150 2.7 18 4 165 0 26349 -intel-xeon-gold-6152 2.1 22 4 140 0 0 -intel-xeon-gold-6154 3.0 18 4 200 0 0 -intel-xeon-gold-6161 2.2 22 4 165 0 0 -intel-xeon-platinum-8153 2.0 16 8 125 0 0 -intel-xeon-platinum-8160 2.1 24 8 150 0 0 -intel-xeon-platinum-8164 2.0 26 8 165 0 0 -intel-xeon-platinum-8168 2.7 24 8 205 0 0 -intel-xeon-platinum-8170 2.1 26 8 165 0 0 -intel-xeon-platinum-8176 2.1 28 8 165 0 0 +#id clock num_cores max_cpus tdp cpumark_1_cpu cpumark_2_cpu l3_cache_mb +intel-core-i7-8700k 3.7 6 1 95 0 0 0 +intel-xeon-5150 2.66 2 2 65 1746 3498 0 +intel-xeon-e5462 2.8 4 2 80 4038 7350 0 +intel-xeon-x5550 2.67 4 2 95 5416 9131 0 +intel-xeon-x5560 2.8 4 2 95 5426 9215 0 +intel-xeon-x5650 2.67 6 2 95 7601 11728 0 +intel-xeon-x5660 2.8 6 2 95 7954 11893 0 +intel-xeon-e5-2660 2.2 8 2 95 11535 17282 0 +intel-xeon-e5-2670 2.6 8 2 115 0 18509 0 +intel-xeon-e5-2680 2.7 8 2 130 0 18480 0 +intel-xeon-e5-2690 2.9 8 2 135 0 20699 0 +intel-xeon-e5-2620v2 2.1 6 2 95 8664 13474 0 +intel-xeon-e5-2630v2 2.6 6 2 80 10615 16256 0 +intel-xeon-e5-2640v2 2 8 2 95 10132 14792 0 +intel-xeon-e5-2650v2 2.6 8 2 95 13276 19333 0 +intel-xeon-e5-2660v2 2.2 10 2 95 13659 18670 0 +intel-xeon-e5-2670v2 2.5 10 2 115 14892 22062 0 +intel-xeon-e5-2680v2 2.8 10 2 115 16340 23263 0 +intel-xeon-e5-2690v2 3 10 2 130 17304 24189 0 +intel-xeon-e5-2695v2 2.4 12 2 130 17231 21980 0 +intel-xeon-e5-2697v2 2.7 12 2 130 17516 23910 0 +intel-xeon-e5-2603v3 1.6 6 2 85 4996 8358 0 +intel-xeon-e5-2609v3 1.9 6 2 85 5878 9885 0 +intel-xeon-e5-2620v3 2.4 6 2 85 9955 15400 0 +intel-xeon-e5-2623v3 3 6 2 105 9007 13914 0 +intel-xeon-e5-2630v3 2.4 8 2 85 12803 18699 0 +intel-xeon-e5-2630lv3 1.8 8 2 55 11201 0 0 +intel-xeon-e5-2637v3 3.5 4 2 135 10278 16823 0 +intel-xeon-e5-2640v3 2.6 8 2 90 14081 20824 0 +intel-xeon-e5-2643v3 3.4 6 2 135 13671 20574 0 +intel-xeon-e5-2650v3 2.3 10 2 105 15106 20602 0 +intel-xeon-e5-2650lv3 1.8 12 2 65 13132 0 0 +intel-xeon-e5-2660v3 2.6 10 2 105 16161 23388 0 +intel-xeon-e5-2667v3 3.2 8 2 135 16125 22935 0 +intel-xeon-e5-2670v3 2.3 12 2 120 16549 22330 0 +intel-xeon-e5-2680v3 2.5 12 2 120 18840 25352 0 +intel-xeon-e5-2683v3 2 14 2 120 17917 22704 0 +intel-xeon-e5-2687wv3 3.1 10 2 160 17785 24769 0 +intel-xeon-e5-2690v3 2.6 12 2 160 19567 26665 0 +intel-xeon-e5-2695v3 2.3 14 2 120 20742 26021 0 +intel-xeon-e5-2697v3 2.6 14 2 145 21667 29009 0 +intel-xeon-e5-2698v3 2.3 16 2 135 21794 30217 0 +intel-xeon-e5-2699v3 2.3 18 2 145 22520 24820 0 +intel-xeon-e5-2603v4 1.7 6 2 85 5247 8809 0 +intel-xeon-e5-2609v4 1.7 8 2 85 0 10835 0 +intel-xeon-e5-2620v4 2.1 8 2 85 11219 17063 0 +intel-xeon-e5-2623v4 2.6 4 2 85 0 10196 0 +intel-xeon-e5-2630v4 2.2 10 2 85 14221 18281 0 +intel-xeon-e5-2630lv4 1.8 10 2 55 0 0 0 +intel-xeon-e5-2637v4 3.5 4 2 135 9665 17398 0 +intel-xeon-e5-2640v4 2.4 10 2 90 15244 21556 0 +intel-xeon-e5-2643v4 3.4 6 2 135 14329 22063 0 +intel-xeon-e5-2650v4 2.2 12 2 105 16212 22619 0 +intel-xeon-e5-2650lv4 1.7 14 2 65 0 0 0 +intel-xeon-e5-2660v4 2.0 14 2 105 0 0 0 +intel-xeon-e5-2667v4 3.2 8 2 135 0 0 0 +intel-xeon-e5-2680v4 2.4 14 2 120 20489 0 0 +intel-xeon-e5-2683v4 2.1 16 2 120 0 0 0 +intel-xeon-e5-2687wv4 3.0 12 2 160 20340 27161 0 +intel-xeon-e5-2690v4 2.6 14 2 120 22843 28262 0 +intel-xeon-e5-2695v4 2.1 18 2 135 19351 20768 0 +intel-xeon-e5-2697v4 2.3 18 2 135 23070 0 0 +intel-xeon-e5-2697av4 2.6 16 2 145 0 24075 0 +intel-xeon-e5-2698v4 2.2 20 2 135 24615 32248 0 +intel-xeon-e5-2699v4 2.2 22 2 145 21277 38461 0 +intel-xeon-gold-5115 2.4 10 4 85 0 0 0 +intel-xeon-gold-5117 2.0 14 4 105 0 0 0 +intel-xeon-gold-5117f 2.0 14 4 113 0 0 0 +intel-xeon-gold-5117m 2.0 0 4 0 0 21250 0 +intel-xeon-gold-5118 2.3 12 4 105 0 0 0 +intel-xeon-gold-5119t 1.9 14 4 85 0 0 0 +intel-xeon-gold-5120 2.2 14 4 105 0 0 0 +intel-xeon-gold-5120t 2.2 14 4 105 0 0 0 +intel-xeon-gold-5122 3.6 4 4 105 0 0 0 +intel-xeon-gold-6126 2.6 12 4 125 0 0 0 +intel-xeon-gold-6126f 2.6 12 4 135 0 0 0 +intel-xeon-gold-6128 3.4 6 4 115 0 0 0 +intel-xeon-gold-6130 2.1 16 4 125 0 0 0 +intel-xeon-gold-6130f 2.1 16 4 125 0 0 0 +intel-xeon-gold-6130t 2.1 16 4 125 0 0 0 +intel-xeon-gold-6132 2.6 14 4 140 0 0 0 +intel-xeon-gold-6134 3.2 8 4 130 0 0 0 +intel-xeon-gold-6134m 3.2 8 4 130 0 0 0 +intel-xeon-gold-6136 3.0 12 4 150 0 0 0 +intel-xeon-gold-6138 2.0 20 4 125 0 0 0 +intel-xeon-gold-6138f 2.0 20 4 135 0 0 0 +intel-xeon-gold-6138t 2.0 20 4 125 0 0 0 +intel-xeon-gold-6140 2.3 18 4 140 0 0 0 +intel-xeon-gold-6140m 2.3 18 4 140 0 0 0 +intel-xeon-gold-6142 2.6 16 4 150 0 0 0 +intel-xeon-gold-6142f 2.6 16 4 160 0 0 0 +intel-xeon-gold-6142m 2.6 16 4 150 0 0 0 +intel-xeon-gold-6144 3.5 8 4 150 0 0 0 +intel-xeon-gold-6145 2.0 20 4 145 0 0 0 +intel-xeon-gold-6146 3.2 12 4 165 0 0 0 +intel-xeon-gold-6148 2.4 20 4 150 0 0 0 +intel-xeon-gold-6150 2.7 18 4 165 0 26349 0 +intel-xeon-gold-6152 2.1 22 4 140 0 0 0 +intel-xeon-gold-6154 3.0 18 4 200 0 0 0 +intel-xeon-gold-6161 2.2 22 4 165 0 0 0 +intel-xeon-platinum-8153 2.0 16 8 125 0 0 0 +intel-xeon-platinum-8160 2.1 24 8 150 0 0 0 +intel-xeon-platinum-8164 2.0 26 8 165 0 0 0 +intel-xeon-platinum-8168 2.7 24 8 205 0 0 0 +intel-xeon-platinum-8170 2.1 26 8 165 0 0 0 +intel-xeon-platinum-8176 2.1 28 8 165 0 0 0 +intel-xeon-silver-4208 2.1 8 2 85 0 0 0 +intel-xeon-silver-4210r 2.4 10 2 100 0 0 0 +intel-xeon-silver-4214 2.2 12 2 85 0 0 0 +intel-xeon-silver-4214r 2.4 12 2 100 0 0 0 +intel-xeon-silver-4214y 2.2 12 2 85 0 0 0 +intel-xeon-silver-4215r 3.2 8 2 130 0 0 0 +intel-xeon-silver-4216 2.1 16 2 100 0 0 0 +intel-xeon-gold-5215 2.5 10 4 85 0 0 0 +intel-xeon-gold-5215l 2.5 10 4 85 0 0 0 +intel-xeon-gold-5217 3.0 8 4 115 0 0 0 +intel-xeon-gold-5218 2.3 16 4 125 0 0 0 +intel-xeon-gold-5218n 2.3 16 4 125 0 0 0 +intel-xeon-gold-5218r 2.1 20 2 125 0 0 0 +intel-xeon-gold-5220 2.2 18 4 125 0 0 0 +intel-xeon-gold-5220r 2.2 24 2 150 0 0 0 +intel-xeon-gold-5222 3.8 4 4 105 0 0 0 +intel-xeon-gold-6208u 2.9 16 1 150 0 0 0 +intel-xeon-gold-6210u 2.5 20 1 150 0 0 0 +intel-xeon-gold-6212u 2.4 24 1 165 0 0 0 +intel-xeon-gold-6226 2.7 12 4 125 0 0 0 +intel-xeon-gold-6226r 2.9 16 2 150 0 0 0 +intel-xeon-gold-6230 2.1 20 4 125 0 0 0 +intel-xeon-gold-6230n 2.3 20 2 125 0 0 0 +intel-xeon-gold-6230r 2.1 26 2 150 0 0 0 +intel-xeon-gold-6234 3.3 8 4 130 0 0 0 +intel-xeon-gold-6238 2.1 22 4 140 0 0 0 +intel-xeon-gold-6238l 2.1 22 4 140 0 0 0 +intel-xeon-gold-6238m 2.1 22 4 140 0 0 0 +intel-xeon-gold-6238r 2.2 28 2 165 0 0 0 +intel-xeon-gold-6240 2.6 18 4 150 0 0 0 +intel-xeon-gold-6240l 2.6 18 4 150 0 0 0 +intel-xeon-gold-6240m 2.6 18 4 150 0 0 0 +intel-xeon-gold-6240r 2.4 24 2 165 0 0 0 +intel-xeon-gold-6240y 2.6 18 4 150 0 0 0 +intel-xeon-gold-6242 2.8 16 4 150 0 0 0 +intel-xeon-gold-6242r 3.1 20 2 205 0 0 0 +intel-xeon-gold-6244 3.6 8 4 150 0 0 0 +intel-xeon-gold-6246 3.3 12 4 165 0 0 0 +intel-xeon-gold-6246r 3.4 16 2 205 0 0 0 +intel-xeon-gold-6248 2.5 20 4 150 0 0 0 +intel-xeon-gold-6248r 3.0 24 2 205 0 0 0 +intel-xeon-gold-6250 3.9 8 4 185 0 0 0 +intel-xeon-gold-6252 2.1 24 4 150 0 0 0 +intel-xeon-gold-6254 3.1 18 4 200 0 0 0 +intel-xeon-gold-6258r 2.7 28 2 205 0 0 0 +intel-xeon-platinum-8253 2.2 16 8 125 0 0 0 +intel-xeon-platinum-8256 3.8 4 8 105 0 0 0 +intel-xeon-platinum-8260 2.4 24 8 165 0 0 0 +intel-xeon-platinum-8260l 2.4 24 8 165 0 0 0 +intel-xeon-platinum-8260y 2.4 24 8 165 0 0 0 +intel-xeon-platinum-8268 2.9 24 8 205 0 0 0 +intel-xeon-platinum-8270 2.7 26 8 205 0 0 0 +intel-xeon-platinum-8276 2.2 28 8 165 0 0 0 +intel-xeon-platinum-8280 2.7 28 8 205 0 0 0 +intel-xeon-platinum-8280l 2.7 28 8 205 0 0 0 -intel-xeon-silver-4208 2.1 8 2 85 0 0 -intel-xeon-silver-4210r 2.4 10 2 100 0 0 -intel-xeon-silver-4214 2.2 12 2 85 0 0 -intel-xeon-silver-4214r 2.4 12 2 100 0 0 -intel-xeon-silver-4214y 2.2 12 2 85 0 0 -intel-xeon-silver-4215r 3.2 8 2 130 0 0 -intel-xeon-silver-4216 2.1 16 2 100 0 0 -intel-xeon-gold-5215 2.5 10 4 85 0 0 -intel-xeon-gold-5215l 2.5 10 4 85 0 0 -intel-xeon-gold-5217 3.0 8 4 115 0 0 -intel-xeon-gold-5218 2.3 16 4 125 0 0 -intel-xeon-gold-5218n 2.3 16 4 125 0 0 -intel-xeon-gold-5218r 2.1 20 2 125 0 0 -intel-xeon-gold-5220 2.2 18 4 125 0 0 -intel-xeon-gold-5220r 2.2 24 2 150 0 0 -intel-xeon-gold-5222 3.8 4 4 105 0 0 -intel-xeon-gold-6208u 2.9 16 1 150 0 0 -intel-xeon-gold-6210u 2.5 20 1 150 0 0 -intel-xeon-gold-6212u 2.4 24 1 165 0 0 -intel-xeon-gold-6226 2.7 12 4 125 0 0 -intel-xeon-gold-6226r 2.9 16 2 150 0 0 -intel-xeon-gold-6230 2.1 20 4 125 0 0 -intel-xeon-gold-6230n 2.3 20 2 125 0 0 -intel-xeon-gold-6230r 2.1 26 2 150 0 0 -intel-xeon-gold-6234 3.3 8 4 130 0 0 -intel-xeon-gold-6238 2.1 22 4 140 0 0 -intel-xeon-gold-6238l 2.1 22 4 140 0 0 -intel-xeon-gold-6238m 2.1 22 4 140 0 0 -intel-xeon-gold-6238r 2.2 28 2 165 0 0 -intel-xeon-gold-6240 2.6 18 4 150 0 0 -intel-xeon-gold-6240l 2.6 18 4 150 0 0 -intel-xeon-gold-6240m 2.6 18 4 150 0 0 -intel-xeon-gold-6240r 2.4 24 2 165 0 0 -intel-xeon-gold-6240y 2.6 18 4 150 0 0 -intel-xeon-gold-6242 2.8 16 4 150 0 0 -intel-xeon-gold-6242r 3.1 20 2 205 0 0 -intel-xeon-gold-6244 3.6 8 4 150 0 0 -intel-xeon-gold-6246 3.3 12 4 165 0 0 -intel-xeon-gold-6246r 3.4 16 2 205 0 0 -intel-xeon-gold-6248 2.5 20 4 150 0 0 -intel-xeon-gold-6248r 3.0 24 2 205 0 0 -intel-xeon-gold-6250 3.9 8 4 185 0 0 -intel-xeon-gold-6252 2.1 24 4 150 0 0 -intel-xeon-gold-6254 3.1 18 4 200 0 0 -intel-xeon-gold-6258r 2.7 28 2 205 0 0 -intel-xeon-platinum-8253 2.2 16 8 125 0 0 -intel-xeon-platinum-8256 3.8 4 8 105 0 0 -intel-xeon-platinum-8260 2.4 24 8 165 0 0 -intel-xeon-platinum-8260l 2.4 24 8 165 0 0 -intel-xeon-platinum-8260y 2.4 24 8 165 0 0 -intel-xeon-platinum-8268 2.9 24 8 205 0 0 -intel-xeon-platinum-8270 2.7 26 8 205 0 0 -intel-xeon-platinum-8276 2.2 28 8 165 0 0 -intel-xeon-platinum-8280 2.7 28 8 205 0 0 -intel-xeon-platinum-8280l 2.7 28 8 205 0 0 +intel-xeon-silver-4310 2.1 12 2 120 0 0 18.0 +intel-xeon-silver-4314 2.4 16 2 135 0 0 24.0 +intel-xeon-silver-4316 2.3 20 2 150 0 0 30.0 +intel-xeon-gold-5315y 3.2 8 2 140 0 0 12.0 +intel-xeon-gold-5317 3.0 12 2 150 0 0 18.0 +intel-xeon-gold-5318s 2.1 24 2 165 0 0 36.0 +intel-xeon-gold-5318y 2.1 24 2 165 0 0 36.0 +intel-xeon-gold-5320 2.2 26 2 185 0 0 39.0 +intel-xeon-gold-6312u 2.4 24 1 185 0 0 36.0 +intel-xeon-gold-6314u 2.3 32 1 205 0 0 48.0 +intel-xeon-gold-6326 2.9 16 2 185 0 0 24.0 +intel-xeon-gold-6330 2.0 28 2 205 0 0 42.0 +intel-xeon-gold-6334 3.6 8 2 165 0 0 18.0 +intel-xeon-gold-6336y 2.4 24 2 185 0 0 36.0 +intel-xeon-gold-6338 2.0 32 2 205 0 0 48.0 +intel-xeon-gold-6338n 2.2 32 2 185 0 0 48.0 +intel-xeon-gold-6342 2.8 24 2 230 0 0 30.0 +intel-xeon-gold-6346 3.1 16 2 205 0 0 36.0 +intel-xeon-gold-6348 2.6 28 2 235 0 0 42.0 +intel-xeon-gold-6354 3.0 18 2 205 0 0 39.0 +intel-xeon-platinum-8351n 2.4 36 2 225 0 0 54.0 +intel-xeon-platinum-8352m 2.3 32 2 185 0 0 0 +intel-xeon-platinum-8352s 2.2 32 2 205 0 0 48.0 +intel-xeon-platinum-8352v 2.1 36 2 195 0 0 54.0 +intel-xeon-platinum-8352y 2.2 32 2 205 0 0 48.0 +intel-xeon-platinum-8358 2.6 32 2 250 0 0 48.0 +intel-xeon-platinum-8358p 2.6 32 2 240 0 0 48.0 +intel-xeon-platinum-8362 2.8 32 2 265 0 0 48.0 +intel-xeon-platinum-8368 2.4 38 2 270 0 0 57.0 +intel-xeon-platinum-8380 2.3 40 2 270 0 0 60.0 -intel-xeon-silver-4310 2.1 12 2 120 0 0 -intel-xeon-silver-4314 2.4 16 2 135 0 0 -intel-xeon-silver-4316 2.3 20 2 150 0 0 -intel-xeon-gold-5315y 3.2 8 2 140 0 0 -intel-xeon-gold-5317 3.0 12 2 150 0 0 -intel-xeon-gold-5318s 2.1 24 2 165 0 0 -intel-xeon-gold-5318y 2.1 24 2 165 0 0 -intel-xeon-gold-5320 2.2 26 2 185 0 0 -intel-xeon-gold-6312u 2.4 24 1 185 0 0 -intel-xeon-gold-6314u 2.3 32 1 205 0 0 -intel-xeon-gold-6326 2.9 16 2 185 0 0 -intel-xeon-gold-6330 2.0 28 2 205 0 0 -intel-xeon-gold-6334 3.6 8 2 165 0 0 -intel-xeon-gold-6336y 2.4 24 2 185 0 0 -intel-xeon-gold-6338 2.0 32 2 205 0 0 -intel-xeon-gold-6338n 2.2 32 2 185 0 0 -intel-xeon-gold-6342 2.8 24 2 230 0 0 -intel-xeon-gold-6346 3.1 16 2 205 0 0 -intel-xeon-gold-6348 2.6 28 2 235 0 0 -intel-xeon-gold-6354 3.0 18 2 205 0 0 -intel-xeon-platinum-8351n 2.4 36 2 225 0 0 -intel-xeon-platinum-8352m 2.3 32 2 185 0 0 -intel-xeon-platinum-8352s 2.2 32 2 205 0 0 -intel-xeon-platinum-8352v 2.1 36 2 195 0 0 -intel-xeon-platinum-8352y 2.2 32 2 205 0 0 -intel-xeon-platinum-8358 2.6 32 2 250 0 0 -intel-xeon-platinum-8358p 2.6 32 2 240 0 0 -intel-xeon-platinum-8362 2.8 32 2 265 0 0 -intel-xeon-platinum-8368 2.4 38 2 270 0 0 -intel-xeon-platinum-8380 2.3 40 2 270 0 0 +intel-xeon-bronze-3408u 1.8 8 2 125 0 0 22.5 +intel-xeon-silver-4410y 2.0 12 2 150 0 0 30.0 +intel-xeon-silver-4416+ 2.0 20 2 165 0 0 37.5 +intel-xeon-gold-5411n 1.9 24 1 165 0 0 45.0 +intel-xeon-gold-5412u 2.1 24 1 185 0 0 45.0 +intel-xeon-gold-5415+ 2.9 8 2 150 0 0 22.5 +intel-xeon-gold-5416s 2.0 16 2 150 0 0 30.0 +intel-xeon-gold-5418n 1.8 24 2 165 0 0 45.0 +intel-xeon-gold-5418y 2.0 24 2 185 0 0 45.0 +intel-xeon-gold-5420+ 2.0 28 2 205 0 0 52.5 +intel-xeon-gold-6414u 2.0 32 1 250 0 0 60.0 +intel-xeon-gold-6416h 2.2 18 4 165 0 0 45.0 +intel-xeon-gold-6418h 2.1 24 4 185 0 0 60.0 +intel-xeon-gold-6421n 1.8 32 1 185 0 0 60.0 +intel-xeon-gold-6426y 2.5 16 2 185 0 0 37.5 +intel-xeon-gold-6430 2.1 32 2 270 0 0 60.0 +intel-xeon-gold-6434 3.7 8 2 195 0 0 22.5 +intel-xeon-gold-6434h 3.7 8 4 195 0 0 22.5 +intel-xeon-gold-6438n 2.0 32 2 205 0 0 60.0 +intel-xeon-gold-6438y+ 2.0 32 2 205 0 0 60.0 +intel-xeon-gold-6442y 2.6 24 2 225 0 0 60.0 +intel-xeon-gold-6444y 3.6 16 2 270 0 0 45.0 +intel-xeon-gold-6448h 2.4 32 4 250 0 0 60.0 +intel-xeon-gold-6448y 2.1 32 2 225 0 0 60.0 +intel-xeon-gold-6454s 2.2 32 2 270 0 0 60.0 +intel-xeon-gold-6458q 3.1 32 2 350 0 0 60.0 +intel-xeon-platinum-8444h 2.9 16 2 270 0 0 45.0 +intel-xeon-platinum-8452y 2.0 36 2 300 0 0 67.5 +intel-xeon-platinum-8458p 2.7 44 2 350 0 0 82.5 +intel-xeon-platinum-8460y+ 2.0 40 2 300 0 0 105.0 +intel-xeon-platinum-8462y+ 2.8 32 2 300 0 0 60.0 +intel-xeon-platinum-8468 2.1 48 2 350 0 0 105.0 +intel-xeon-platinum-8468v 2.4 48 2 330 0 0 97.5 +intel-xeon-platinum-8470 2.0 52 2 350 0 0 105.0 +intel-xeon-platinum-8470n 1.7 52 2 300 0 0 97.5 +intel-xeon-platinum-8470q 2.1 52 2 350 0 0 105.0 +intel-xeon-platinum-8471n 1.8 52 1 300 0 0 95.5 +intel-xeon-platinum-8480+ 2.0 56 2 350 0 0 105.0 +intel-xeon-platinum-8490h 1.9 60 8 350 0 0 112.5 +intel-xeon-platinum-9462 2.7 32 2 350 0 0 75.0 -intel-xeon-bronze-3408u 1.8 8 2 125 0 0 -intel-xeon-silver-4410y 2.0 12 2 150 0 0 -intel-xeon-silver-4416+ 2.0 20 2 165 0 0 -intel-xeon-gold-5411n 1.9 24 2 165 0 0 -intel-xeon-gold-5415+ 2.9 8 2 150 0 0 -intel-xeon-gold-5416s 2.0 16 2 150 0 0 -intel-xeon-gold-5418n 1.8 24 2 165 0 0 -intel-xeon-gold-5418y 2.0 24 2 185 0 0 -intel-xeon-gold-5420+ 2.0 28 2 205 0 0 -intel-xeon-gold-6414u 2.0 32 1 250 0 0 -intel-xeon-gold-6416h 2.2 18 2 165 0 0 -intel-xeon-gold-6418h 2.1 24 2 185 0 0 -intel-xeon-gold-6421n 1.8 32 2 185 0 0 -intel-xeon-gold-6426y 2.5 16 2 185 0 0 -intel-xeon-gold-6430 2.1 32 2 270 0 0 -intel-xeon-gold-6434 3.7 8 2 195 0 0 -intel-xeon-gold-6438n 2.0 32 2 205 0 0 -intel-xeon-gold-6438y+ 2.0 32 2 205 0 0 -intel-xeon-gold-6442y 2.6 24 2 225 0 0 -intel-xeon-gold-6444y 3.6 16 2 270 0 0 -intel-xeon-gold-6448y 2.1 32 2 225 0 0 -intel-xeon-gold-6454s 2.2 32 2 270 0 0 -intel-xeon-gold-6458q 3.1 32 2 350 0 0 -intel-xeon-platinum-8444h 2.9 16 2 270 0 0 -intel-xeon-platinum-8452y 2.0 36 2 300 0 0 -intel-xeon-platinum-8458p 2.7 44 2 350 0 0 -intel-xeon-platinum-8458q 3.1 32 2 350 0 0 -intel-xeon-platinum-8460y+ 2.0 40 2 300 0 0 -intel-xeon-platinum-8462y+ 2.8 32 2 300 0 0 -intel-xeon-platinum-8468 2.1 48 2 350 0 0 -intel-xeon-platinum-8468v 2.4 48 2 330 0 0 -intel-xeon-platinum-8470 2.0 52 2 350 0 0 -intel-xeon-platinum-8470n 1.7 52 2 300 0 0 -intel-xeon-platinum-8470q 2.1 52 2 350 0 0 -intel-xeon-platinum-8480+ 2.0 56 2 350 0 0 -intel-xeon-platinum-8490h 1.9 60 2 350 0 0 -intel-xeon-platinum-9462 2.7 32 2 350 0 0 +amd-epyc-7262 3.2 8 2 155 0 0 0 +amd-epyc-7272 2.9 12 2 120 0 0 0 +amd-epyc-7282 2.8 16 2 120 0 0 0 +amd-epyc-7302 3.0 16 2 155 0 0 0 +amd-epyc-7352 2.3 24 2 155 0 0 0 +amd-epyc-7402 2.8 24 2 180 0 0 0 +amd-epyc-7452 2.35 32 2 155 0 0 0 +amd-epyc-7502 2.5 32 2 180 0 0 0 +amd-epyc-7542 2.9 32 2 225 0 0 0 +amd-epyc-7552 2.2 48 2 200 0 0 0 +amd-epyc-7642 2.3 48 2 225 0 0 0 +amd-epyc-7702 2.0 64 2 200 0 0 0 +amd-epyc-7742 2.25 64 2 225 0 0 0 +amd-epyc-7f32 3.7 8 2 180 0 0 0 +amd-epyc-7f52 3.5 16 2 240 0 0 0 +amd-epyc-7f72 3.5 24 2 240 0 0 0 +amd-epyc-7h12 2.6 64 2 280 0 0 0 -amd-epyc-7262 3.2 8 2 155 0 0 -amd-epyc-7272 2.9 12 2 120 0 0 -amd-epyc-7282 2.8 16 2 120 0 0 -amd-epyc-7302 3.0 16 2 155 0 0 -amd-epyc-7352 2.3 24 2 155 0 0 -amd-epyc-7402 2.8 24 2 180 0 0 -amd-epyc-7452 2.35 32 2 155 0 0 -amd-epyc-7502 2.5 32 2 180 0 0 -amd-epyc-7542 2.9 32 2 225 0 0 -amd-epyc-7552 2.2 48 2 200 0 0 -amd-epyc-7642 2.3 48 2 225 0 0 -amd-epyc-7702 2.0 64 2 200 0 0 -amd-epyc-7742 2.25 64 2 225 0 0 -amd-epyc-7f32 3.7 8 2 180 0 0 -amd-epyc-7f52 3.5 16 2 240 0 0 -amd-epyc-7f72 3.5 24 2 240 0 0 -amd-epyc-7h12 2.6 64 2 280 0 0 +amd-epyc-72f3 3.7 8 2 180 0 0 0 +amd-epyc-7313 3.0 16 2 155 0 0 0 +amd-epyc-7343 3.2 16 2 190 0 0 0 +amd-epyc-73f3 3.5 16 2 240 0 0 0 +amd-epyc-7413 2.65 24 2 180 0 0 0 +amd-epyc-7443 2.85 24 2 200 0 0 0 +amd-epyc-7453 2.75 28 2 225 0 0 0 +amd-epyc-74f3 3.2 24 2 240 0 0 0 +amd-epyc-7513 2.6 32 2 200 0 0 0 +amd-epyc-7543 2.8 32 2 225 0 0 0 +amd-epyc-75f3 2.95 32 2 280 0 0 0 +amd-epyc-7643 2.3 48 2 225 0 0 0 +amd-epyc-7663 2.0 56 2 240 0 0 0 +amd-epyc-7713 2.0 64 2 225 0 0 0 +amd-epyc-7763 2.45 64 2 280 0 0 0 -amd-epyc-72f3 3.7 8 2 180 0 0 -amd-epyc-7313 3.0 16 2 155 0 0 -amd-epyc-7343 3.2 16 2 190 0 0 -amd-epyc-73f3 3.5 16 2 240 0 0 -amd-epyc-7413 2.65 24 2 180 0 0 -amd-epyc-7443 2.85 24 2 200 0 0 -amd-epyc-7453 2.75 28 2 225 0 0 -amd-epyc-74f3 3.2 24 2 240 0 0 -amd-epyc-7513 2.6 32 2 200 0 0 -amd-epyc-7543 2.8 32 2 225 0 0 -amd-epyc-75f3 2.95 32 2 280 0 0 -amd-epyc-7643 2.3 48 2 225 0 0 -amd-epyc-7663 2.0 56 2 240 0 0 -amd-epyc-7713 2.0 64 2 225 0 0 -amd-epyc-7763 2.45 64 2 280 0 0 +amd-epyc-9124 3.0 16 2 200 0 0 64 +amd-epyc-9174f 4.1 16 2 320 0 0 256 +amd-epyc-9224 2.5 24 2 200 0 0 64 +amd-epyc-9254 2.9 24 2 220 0 0 128 +amd-epyc-9274f 4.05 24 2 320 0 0 256 +amd-epyc-9334 2.7 32 2 210 0 0 128 +amd-epyc-9354 3.25 32 2 280 0 0 256 +amd-epyc-9374f 3.85 32 2 320 0 0 256 +amd-epyc-9454 2.75 48 2 290 0 0 256 +amd-epyc-9474f 3.6 48 2 360 0 0 256 +amd-epyc-9534 2.45 64 2 280 0 0 256 +amd-epyc-9554 3.1 64 2 360 0 0 256 +amd-epyc-9634 2.25 84 2 290 0 0 384 +amd-epyc-9654 2.4 96 2 360 0 0 384 +amd-epyc-9734 2.2 112 2 340 0 0 256 +amd-epyc-9754 2.25 128 2 360 0 0 256 diff --git a/concho/config.py b/concho/config.py index 3619ea4..2d004d7 100644 --- a/concho/config.py +++ b/concho/config.py @@ -95,11 +95,12 @@ class Cpu(Item): max_cpus: int # how many such cpus can be put on the same motherboard tdp: Power # TDP of the cpu, in Watts cpumark: float # cpu mark + l3_cache_mb: int # level 3 cache, in MiB def __init__(self, proc_id: CpuId): super().__init__(proc_id) - cpuTable = numpy.genfromtxt('catalogs/cpu_table.tsv', dtype=("|U32", float, int, float, float, float), names=True, delimiter='\t') - for cpu_id, clock, num_cores, max_cpus, tdp, cpumark in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['max_cpus'], cpuTable['tdp'], cpuTable['cpumark_1_cpu']): + cpuTable = numpy.genfromtxt('catalogs/cpu_table.tsv', dtype=("|U32", float, int, float, float, float, int, int), names=True, delimiter='\t') + for cpu_id, clock, num_cores, max_cpus, tdp, cpumark, l3_cache_mb in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['max_cpus'], cpuTable['tdp'], cpuTable['cpumark_1_cpu'], cpuTable['l3_cache_mb']): # print(cpu_id) if cpu_id == proc_id: # print('found '+procId) @@ -110,6 +111,7 @@ class Cpu(Item): self.max_cpus = max_cpus self.tdp = tdp self.cpumark = cpumark + self.l3_cache_mb = l3_cache_mb @property def architecture(self) -> CpuArchitecture: @@ -162,34 +164,62 @@ class Cpu(Item): return 'rome' elif re.match('amd-epyc-[0-9][0-9fh][0-9f]3', proc_id): return 'milan' + elif re.match('amd-epyc-8[0-6][0-9f]4', proc_id): + return 'siena' # zen 4c + elif re.match('amd-epyc-9[0-6][0-9f]4', proc_id): + return 'genoa' # zen 4 + elif re.match('amd-epyc-97[0-9f]4', proc_id): + return 'bergamo' # zen 4c else: assert False, 'unhandled processor id : %s' % proc_id @property - def num_dp_flop_per_cycle(self) -> int: + def num_dp_flop_per_cycle_per_core(self) -> int: proc_arch = self.architecture - simd_id = get_simd_id(proc_arch) - num_simd_per_core = 1 + dp_flops_per_cycle_per_core = -1 + + # from https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2 + # Intel Core 2 and Nehalem: + # + # 4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication + # 8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication + # + + if proc_arch in ['sandy bridge', 'ivy bridge']: + + # [https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-and-others-sse2-avx-avx2-avx] + # Intel Sandy Bridge/Ivy Bridge (AVX1): + + # 8 DP FLOPs/cycle: 4-wide AVX addition + 4-wide AVX multiplication + # 16 SP FLOPs/cycle: 8-wide AVX addition + 8-wide AVX multiplication + dp_flops_per_cycle_per_core = 8 + + if proc_arch in ['haswell', 'broadwell']: + # https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-and-others-sse2-avx-avx2-avx + # Intel Haswell/Broadwell/Skylake/Kaby Lake/Coffee/... (AVX+FMA3): + + # 16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions + # 32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions + # (Using 256-bit vector instructions can reduce max turbo clock speed on some CPUs.) + dp_flops_per_cycle_per_core = 16 + if proc_arch in ['skylake', 'cascadelake']: + dp_flops_per_cycle_per_core = 16 # from https://en.wikipedia.org/wiki/List_of_Intel_Xeon_microprocessors : Xeon Platinum, Gold 61XX, and Gold 5122 have two AVX-512 FMA units per core; Xeon Gold 51XX (except 5122), Silver, and Bronze have a single AVX-512 FMA unit per core if re.match('intel-xeon-gold-5122', self.uid): - num_simd_per_core = 2 + dp_flops_per_cycle_per_core = 32 # https://en.wikichip.org/wiki/intel/xeon_gold/5222 : 'Note that this is the only processor in the Xeon Gold 52xx series with two 512b FMA units.' if re.match('intel-xeon-gold-5222', self.uid): - num_simd_per_core = 2 + dp_flops_per_cycle_per_core = 32 if re.match('intel-xeon-gold-61[0-9][0-9]', self.uid): - num_simd_per_core = 2 + dp_flops_per_cycle_per_core = 32 if re.match('intel-xeon-gold-62[0-9][0-9]', self.uid): - num_simd_per_core = 2 + dp_flops_per_cycle_per_core = 32 if re.match('intel-xeon-gold-63[0-9][0-9]', self.uid): - num_simd_per_core = 2 - # from https://www.microway.com/knowledge-center-articles/detailed-specifications-of-the-amd-epyc-rome-cpus/: - # - Full support for 256-bit AVX2 instructions with two 256-bit FMA units per CPU core. The previous “Naples” architecture split 256-bit instructions into two separate 128-bit operations - # - Up to 16 double-precision FLOPS per cycle per core - # - Double-precision floating point multiplies complete in 3 cycles (down from 4) - # note : zen2 rome core has 2 256 bits fma units per core, which corresponds to avx2 technology according to https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2: + dp_flops_per_cycle_per_core = 32 + # flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2: # Intel Haswell/Broadwell/Skylake/Kaby Lake/Coffee/... (AVX+FMA3): # - 16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions # - 32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions @@ -202,18 +232,41 @@ class Cpu(Item): # > AVX-512 instructions (up to 16 double-precision FLOPS per cycle per AVX-512 FMA unit) # > Two AVX-512 FMA units per CPU core (available in all Ice Lake-SP CPU SKUs) # https://www.intel.com/content/www/us/en/products/sku/215269/intel-xeon-silver-4314-processor-24m-cache-2-40-ghz/specifications.html shows that even xeon silver 4314 has 2 AVX 512 fma units - num_simd_per_core = 2 + dp_flops_per_cycle_per_core = 32 if proc_arch in ['sapphire rapids']: - num_simd_per_core = 2 + dp_flops_per_cycle_per_core = 32 # cpus_may2023_v3.pdf - if proc_arch == 'rome': - num_simd_per_core = 1 + if proc_arch == 'rome': # zen2 + # from https://www.microway.com/knowledge-center-articles/detailed-specifications-of-the-amd-epyc-rome-cpus/: + # - Full support for 256-bit AVX2 instructions with two 256-bit FMA units per CPU core. The previous “Naples” architecture split 256-bit instructions into two separate 128-bit operations + # - Up to 16 double-precision FLOPS per cycle per core + # - Double-precision floating point multiplies complete in 3 cycles (down from 4) + # note : zen2 rome core has 2 256 bits fma units per core, which corresponds to avx2 technology according to https://stackoverflow.com/questions/15655835/ + # [https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-and-others-sse2-avx-avx2-avx] + # AMD Zen 2 and later: 2 FMA/MUL units and two ADD units on separate ports + # 24 DP FLOPs/cycle: 4-wide FMA + 4-wide ADD on 256-bit execution units + # 48 SP FLOPs/cycle: 8-wide FMA + 8-wide ADD + # with only FMAs like for a matmul, 16 DP / 32 SP FLOPs/cycle using 256-bit instructions (or 512-bit on Zen 4 which has single-uop but double-pumped 512-bit instructions.) + # https://www.dell.com/support/kbdoc/fr-fr/000137696/amd-rome-is-it-for-real-architecture-and-initial-hpc-performance + # The Rome micro-architecture can retire 16 DP FLOP/cycle, double that of Naples which was 8 FLOPS/cycle + + dp_flops_per_cycle_per_core = 16 + + if proc_arch == 'milan': # zen3 + # [https://www.nas.nasa.gov/hecc/support/kb/amd-milan-processors_688.html] + # > Each Milan core has two 256-bit Fused Multiply-Add (FMA) units and can deliver up to 16 double-precision floating point operations (flops) per cycle. Therefore, the peak double-precision flops per node is: 128 cores x 2.45 GHz x 16 = 5.02 teraflops (TF). + dp_flops_per_cycle_per_core = 16 + + if proc_arch in ['genoa', 'bergamo']: # zen4 + # [/home/graffy/work/concho/cpus_may2023_v3.pdf]] + # AMD has two AVX-2 256 bit units, which can do one coupled AVX-512 FMA instruction, which puts the FLOPS per cycle to 16 + dp_flops_per_cycle_per_core = 16 - dp_flops_per_cycle = num_simd_per_core * simd_id_to_dp_flops_per_cycle(simd_id) # print(self.uid, dp_flops_per_cycle) - return dp_flops_per_cycle + assert dp_flops_per_cycle_per_core > 0, f'failed to get the number of dp floating operations per cycle per core of {proc_arch}' + return dp_flops_per_cycle_per_core @property def num_ram_channels(self) -> int: @@ -224,7 +277,10 @@ class Cpu(Item): 'icelake': 8, 'sapphire rapids': 8, 'rome': 8, - 'milan': 8 + 'milan': 8, + 'siena': 6, + 'genoa': 12, + 'bergamo': 12 }[self.architecture] @@ -248,39 +304,6 @@ def get_proc_arch_transistor_size(proc_id: CpuId) -> TransistorSize: }[get_proc_architecture(proc_id)] -def simd_id_to_dp_flops_per_cycle(simd_id: SimdId) -> int: - """ - :param str simd_id: eg 'avx2' - - """ - # from https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2 - # Intel Core 2 and Nehalem: - # - # 4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication - # 8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication - # - # Intel Sandy Bridge/Ivy Bridge: - # - # 8 DP FLOPs/cycle: 4-wide AVX addition + 4-wide AVX multiplication - # 16 SP FLOPs/cycle: 8-wide AVX addition + 8-wide AVX multiplication - # - # Intel Haswell/Broadwell/Skylake/Kaby Lake: - # - # 16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions - # 32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions - - # https://www.dell.com/support/kbdoc/fr-fr/000137696/amd-rome-is-it-for-real-architecture-and-initial-hpc-performance - # The Rome micro-architecture can retire 16 DP FLOP/cycle, double that of Naples which was 8 FLOPS/cycle - - return { - 'sse4.1': 4, - 'sse4.2': 4, - 'avx': 8, - 'avx2': 16, - 'avx-512': 16, - }[simd_id] - - def get_simd_id(proc_arch: CpuArchitecture) -> SimdId: """ :param str proc_arch: eg 'broadwell' @@ -306,6 +329,9 @@ def get_simd_id(proc_arch: CpuArchitecture) -> SimdId: # - Double-precision floating point multiplies complete in 3 cycles (down from 4) 'rome': 'avx2', 'milan': 'avx2', + 'siena': 'avx2', + 'genoa': 'avx2', + 'bergamo': 'avx2', }[proc_arch] @@ -481,7 +507,7 @@ class Config(): return power_consumption def get_flops(self) -> float: - # print('%d servers * %d cpu %s * %d cores @ %f (%d flops/cycle)' % (self.num_servers, self.num_cpu_per_server, str(self.cpu.uid), self.cpu.num_cores, self.cpu.clock, self.cpu.num_dp_flop_per_cycle)) + # print('%d servers * %d cpu %s * %d cores @ %f (%d flops/cycle)' % (self.num_servers, self.num_cpu_per_server, str(self.cpu.uid), self.cpu.num_cores, self.cpu.clock, self.cpu.num_dp_flop_per_cycle_per_core)) dynamic_frequency_scaling = 1.0 # https://en.wikichip.org/wiki/intel/frequency_behavior # https://www.nas.nasa.gov/hecc/support/kb/cascade-lake-processors_579.html # The Intel Cascade Lake processor incorporated into the Aitken cluster is the 20-core Xeon Gold 6248 model. Its base clock speed is 2.5 GHz for non-AVX, 1.9 GHz for AVX2, and 1.6 GHz for AVX-512. @@ -496,7 +522,7 @@ class Config(): elif self.cpu.architecture == 'saphhire rapids': dynamic_frequency_scaling = 1.0 # sapphire rapids seem to get closer to theoretical speed, see /home/graffy/work/concho/cpus_may2023_v3.pdf cpu_clock_when_computing = self.cpu.clock * dynamic_frequency_scaling - flops = self.cpu.num_dp_flop_per_cycle * cpu_clock_when_computing * 1.e9 * self.cpu.num_cores * self.num_cpu_per_server * self.num_servers + flops = self.cpu.num_dp_flop_per_cycle_per_core * cpu_clock_when_computing * 1.e9 * self.cpu.num_cores * self.num_cpu_per_server * self.num_servers return flops def _init_dimm_slots(self): diff --git a/concho/hpev2.py b/concho/hpev2.py index 90cc116..06bcfef 100644 --- a/concho/hpev2.py +++ b/concho/hpev2.py @@ -260,9 +260,16 @@ class HpeV2ConfiguratorParser(IHtmlConfiguratorParser): ''' modules_element = root_element.xpath(self.get_xpath_filter('root_to_modules_element'))[0] # print(modules_element) - module_label = self.get_module_label(module_id) # eg ProcessorSection_AdditionalProcessorsChoice - print(f'module label: {module_label}') - module_root = modules_element.xpath(f".//div[@id='{module_label}']")[0] + if module_id == 'additional_cpus': + module_labels = ['ProcessorSection_AdditionalProcessorsChoice', 'ProcessorSection_ProcessorChoice'] + else: + module_labels = [self.get_module_label(module_id)] + module_root = None + for module_label in module_labels: + module_roots = modules_element.xpath(f".//div[@id='{module_label}']") + if len(module_roots) > 0: + module_root = modules_element.xpath(f".//div[@id='{module_label}']")[0] + break return module_root def _parse_module_html_table(self, html_root: HtmlElement, module_id: str) -> pd.DataFrame: @@ -285,10 +292,15 @@ class HpeV2ConfiguratorParser(IHtmlConfiguratorParser): label = row['description'] cpu_price = parse_price(row['price']) match = re.match(r'^ *Intel Xeon-(?PBronze|Silver|Gold|Platinum) (?P[0-9][0-9][0-9][0-9][HNPQRSLUVY]?[+]?).*', label) - assert match, 'unhandled label : %s' % label - # print(match['cpu_class'], match['cpu_number']) - cpu_class = match['cpu_class'].lower() - cpu_id = "intel-xeon-%s-%s" % (cpu_class, match['cpu_number'].lower()) + if match: + # print(match['cpu_class'], match['cpu_number']) + cpu_class = match['cpu_class'].lower() + cpu_id = "intel-xeon-%s-%s" % (cpu_class, match['cpu_number'].lower()) + else: + # AMD EPYC 9174F 4.1GHz 16-core 320W Processor for HPE + match = re.match(r'^ *AMD EPYC *(?P[0-9][0-9][0-9][0-9][F]?) .*', label) + assert match, 'unhandled label : %s' % label + cpu_id = f"amd-epyc-{match['cpu_number'].lower()}" cpu = Cpu(cpu_id) option = Option(cpu, cpu_price) for selected_item in range(Quantity(row['quantity']).num_selected): @@ -328,7 +340,7 @@ class HpeV2ConfiguratorParser(IHtmlConfiguratorParser): @staticmethod def _parse_base_config_info(html_root: HtmlElement) -> Tuple[str, Price]: prod_titles_grp_el = html_root.xpath(r".//div[@class='prod-titles-grp']")[0] - assert prod_titles_grp_el + assert prod_titles_grp_el is not None #
# DL380 Gen11 (Cat2 Conf16) @@ -336,8 +348,9 @@ class HpeV2ConfiguratorParser(IHtmlConfiguratorParser): #
product_subtitle = prod_titles_grp_el.xpath(r".//span[@class='product_subtitle']")[0].text.replace('\n', '').replace('\t', '') # eg HPE ProLiant DL380 Gen11 8SFF NC Configure-to-order Server # print(product_subtitle) - match = re.match(r'^HPE ProLiant DL(?P[3][68][05]) *Gen11 *8SFF *NC *Configure-to-order *Server$', product_subtitle) - assert match + #match = re.match(r'^HPE ProLiant DL(?P[3][68][05]) *Gen11 *8SFF *NC *Configure-to-order *Server *$', product_subtitle) + match = re.match(r'^HPE ProLiant DL(?P[3][68][05]) *Gen11 *8SFF.*$', product_subtitle) + assert match, f'unrecognized chassis description: "{product_subtitle}"' chassis_number = match['chassis_number'] # configurator.base_config = self._parse_base_config() chassis_id = f"hpe-proliant-dl{chassis_number}-gen11" diff --git a/concho/procs_chooser.py b/concho/procs_chooser.py index 2145be3..4eaea2d 100644 --- a/concho/procs_chooser.py +++ b/concho/procs_chooser.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from typing import List +from typing import List, Optional from abc import abstractmethod import numpy # import pylab @@ -11,8 +11,9 @@ import hashlib # from string import ascii_lowercase # from concho.config import Configurator # from concho.config import Config -from concho.config import Cpu, MemSize, Configurator +from concho.config import Cpu, MemSize, Configurator, Config # from concho import dell +from pathlib import Path markerTypes = [',', '+', '.', '^', 'v', '<', '>', 'o', '*', '1', '2', '3', '4', '8', 's', 'p', 'h', 'H', 'x', 'X', 'D', 'd', '|', '_'] # for c in ascii_lowercase: @@ -121,10 +122,11 @@ class ConfigFlopsPerEuro(ConfigAxisDef): return item_total_num_ops / itemTotalCost -def plot_configs(configs, xaxis_def, yaxis_def, plot_title): +def plot_configs(configs: List[Config], xaxis_def: ConfigAxisDef, yaxis_def: ConfigAxisDef, plot_title: str, figure_file_path: Optional[Path] = None): """ Args: - configs (list(Config)): the tist of configurations to plot + configs: the list of configurations to plot + figure_file_path: eg './figures/hpe_bpu11.pdf' if None, the figure is displayed on the screen instead of being saved in a file """ def GHzToMHz(frequency): @@ -143,8 +145,11 @@ def plot_configs(configs, xaxis_def, yaxis_def, plot_title): 'cascadelake': 0.8, 'icelake': 0.9, 'sapphire rapids': 1.0, - 'rome': 0.8, - 'milan': 1.0, + 'rome': 0.2, + 'milan': 0.4, + 'siena': 1.0, + 'genoa': 1.0, + 'bergamo': 1.0, }[Cpu(proc_id).architecture] # if model == 'r620': # color = 'r' @@ -174,7 +179,8 @@ def plot_configs(configs, xaxis_def, yaxis_def, plot_title): 'hpe-proliant-dl360-gen10+': 0.55, 'hpe-proliant-dl385-gen10': 0.0, 'hpe-proliant-dl385-gen10+': 0.0, - 'hpe-proliant-dl380-gen11': 0.1, + 'hpe-proliant-dl365-gen11': 0.0, + 'hpe-proliant-dl380-gen11': 0.6, }[model] value = 0.9 return matplotlib.colors.hsv_to_rgb((hue, saturation, value)) @@ -223,11 +229,13 @@ def plot_configs(configs, xaxis_def, yaxis_def, plot_title): plt.grid(visible=True, which='minor', color='b', linestyle='-', linewidth=0.2) plt.legend(bbox_to_anchor=(1.1, 1.1), ncol=2) plt.draw() - - plt.show() + if figure_file_path: + plt.savefig(figure_file_path) + else: + plt.show() -def plot_configurators(configurators: List[Configurator], ram_per_core: MemSize, xaxis_def, yaxis_def, plot_title, config_filter=lambda config: True): +def plot_configurators(configurators: List[Configurator], ram_per_core: MemSize, xaxis_def: ConfigAxisDef, yaxis_def: ConfigAxisDef, plot_title: str, config_filter=lambda config: True, figure_file_path: Optional[Path] = None): configs = [] for configurator in configurators: for cpu in configurator.get_cpu_options(): @@ -238,4 +246,4 @@ def plot_configurators(configurators: List[Configurator], ram_per_core: MemSize, if config_filter(config): configs.append(config) - plot_configs(configs, xaxis_def=xaxis_def, yaxis_def=yaxis_def, plot_title=plot_title) + plot_configs(configs, xaxis_def=xaxis_def, yaxis_def=yaxis_def, plot_title=plot_title, figure_file_path=figure_file_path) diff --git a/tests/test1.py b/tests/test1.py index a450add..fd66511 100644 --- a/tests/test1.py +++ b/tests/test1.py @@ -7,7 +7,7 @@ from concho.hpe import HpeConfiguratorParser, HpeCpuChoiceConfiguratorParser from concho.hpev2 import HpeV2ConfiguratorParser from concho.procs_chooser import plot_configurators from concho.procs_chooser import ConfigPrice -# from concho.procs_chooser import ConfigFlops +from concho.procs_chooser import ConfigFlops from concho.procs_chooser import ConfigFlopsPerEuro @@ -92,15 +92,16 @@ def test_ur1_presents_2023_configs(): def test_hpe_bpu11_configs(): configurators = [ - # HtmlConfigurator('20210407 - Cat2 Conf4 PowerEdge R640 - Dell.html', DellConfiguratorParser2021()), HtmlConfigurator(Path('catalogs/hpev2/20250314-cat2-conf16-hpe-dl380-gen11.html'), HpeV2ConfiguratorParser()), + HtmlConfigurator(Path('catalogs/hpev2/20250314-cat2-conf19-hpe-dl365-gen11.html'), HpeV2ConfiguratorParser()), ] def config_filter(config): return True # config.get_price() < 40000.0 - plot_configurators(configurators=configurators, ram_per_core=4.0e9, xaxis_def=ConfigPrice(), yaxis_def=ConfigFlopsPerEuro(), plot_title='physmol/ts credit 2023 configs', config_filter=config_filter) + plot_configurators(configurators=configurators, ram_per_core=4.0e9, xaxis_def=ConfigPrice(), yaxis_def=ConfigFlopsPerEuro(), plot_title='physmol/dbossion ais configs', config_filter=config_filter, figure_file_path='./hpe-2025-03-14.pdf') + # plot_configurators(configurators=configurators, ram_per_core=4.0e9, xaxis_def=ConfigPrice(), yaxis_def=ConfigFlops(), plot_title='physmol/dbossion ais configs', config_filter=config_filter) if __name__ == '__main__': test_hpe_bpu11_configs()