added state of code as of 09/06/2020
This commit is contained in:
		
						commit
						000f329d06
					
				|  | @ -0,0 +1,158 @@ | ||||||
|  | #id	clock	num_cores	tdp	cpumark_1_cpu	cpumark_2_cpu | ||||||
|  | core-i7-8700k	3.7	6	95	0	0 | ||||||
|  | 5150	2.66	2	65	1746	3498 | ||||||
|  | E5462	2.8	4	80	4038	7350 | ||||||
|  | X5550	2.67	4	95	5416	9131 | ||||||
|  | X5560	2.8	4	95	5426	9215 | ||||||
|  | X5650	2.67	6	95	7601	11728 | ||||||
|  | X5660	2.8	6	95	7954	11893 | ||||||
|  | E5-2660	2.2	8	95	11535	17282 | ||||||
|  | E5-2670	2.6	8	115	0	18509 | ||||||
|  | E5-2680	2.7	8	130	0	18480 | ||||||
|  | E5-2690	2.9	8	135	0	20699 | ||||||
|  | E5-2620v2	2.1	6	95	8664	13474 | ||||||
|  | E5-2630v2	2.6	6	80	10615	16256 | ||||||
|  | E5-2640v2	2	8	95	10132	14792 | ||||||
|  | E5-2650v2	2.6	8	95	13276	19333 | ||||||
|  | E5-2660v2	2.2	10	95	13659	18670 | ||||||
|  | E5-2670v2	2.5	10	115	14892	22062 | ||||||
|  | E5-2680v2	2.8	10	115	16340	23263 | ||||||
|  | E5-2690v2	3	10	130	17304	24189 | ||||||
|  | E5-2695v2	2.4	12	130	17231	21980 | ||||||
|  | E5-2697v2	2.7	12	130	17516	23910 | ||||||
|  | E5-2603v3	1.6	6	85	4996	8358 | ||||||
|  | E5-2609v3	1.9	6	85	5878	9885 | ||||||
|  | E5-2620v3	2.4	6	85	9955	15400 | ||||||
|  | E5-2623v3	3	6	105	9007	13914 | ||||||
|  | E5-2630v3	2.4	8	85	12803	18699 | ||||||
|  | E5-2630Lv3	1.8	8	55	11201	0 | ||||||
|  | E5-2637v3	3.5	4	135	10278	16823 | ||||||
|  | E5-2640v3	2.6	8	90	14081	20824 | ||||||
|  | E5-2643v3	3.4	6	135	13671	20574 | ||||||
|  | E5-2650v3	2.3	10	105	15106	20602 | ||||||
|  | E5-2650Lv3	1.8	12	65	13132	0 | ||||||
|  | E5-2660v3	2.6	10	105	16161	23388 | ||||||
|  | E5-2667v3	3.2	8	135	16125	22935 | ||||||
|  | E5-2670v3	2.3	12	120	16549	22330 | ||||||
|  | E5-2680v3	2.5	12	120	18840	25352 | ||||||
|  | E5-2683v3	2	14	120	17917	22704 | ||||||
|  | E5-2687Wv3	3.1	10	160	17785	24769 | ||||||
|  | E5-2690v3	2.6	12	160	19567	26665 | ||||||
|  | E5-2695v3	2.3	14	120	20742	26021 | ||||||
|  | E5-2697v3	2.6	14	145	21667	29009 | ||||||
|  | E5-2698v3	2.3	16	135	21794	30217 | ||||||
|  | E5-2699v3	2.3	18	145	22520	24820 | ||||||
|  | E5-2603v4	1.7	6	85	5247	8809 | ||||||
|  | E5-2609v4	1.7	8	85	0	10835 | ||||||
|  | E5-2620v4	2.1	8	85	11219	17063 | ||||||
|  | E5-2623v4	2.6	4	85	0	10196 | ||||||
|  | E5-2630v4	2.2	10	85	14221	18281 | ||||||
|  | E5-2630Lv4	1.8	10	55	0	0 | ||||||
|  | E5-2637v4	3.5	4	135	9665	17398 | ||||||
|  | E5-2640v4	2.4	10	90	15244	21556 | ||||||
|  | E5-2643v4	3.4	6	135	14329	22063 | ||||||
|  | E5-2650v4	2.2	12	105	16212	22619 | ||||||
|  | E5-2650Lv4	1.7	14	65	0	0 | ||||||
|  | E5-2660v4	2.0	14	105	0	0 | ||||||
|  | E5-2667v4	3.2	8	135	0	0 | ||||||
|  | E5-2680v4	2.4	14	120	20489	0 | ||||||
|  | E5-2683v4	2.1	16	120	0	0 | ||||||
|  | E5-2687Wv4	3.0	12	160	20340	27161 | ||||||
|  | E5-2690v4	2.6	14	120	22843	28262 | ||||||
|  | E5-2695v4	2.1	18	135	19351	20768 | ||||||
|  | E5-2697v4	2.3	18	135	23070	0 | ||||||
|  | E5-2697Av4	2.6	16	145	0	24075 | ||||||
|  | E5-2698v4	2.2	20	135	24615	32248 | ||||||
|  | E5-2699v4	2.2	22	145	21277	38461 | ||||||
|  | Gold-5115	2.4	10 	85	0	0 | ||||||
|  | Gold-5117	2.0	14 	105	0	0 | ||||||
|  | Gold-5117F	2.0	14 	113	0	0 | ||||||
|  | Gold-5117M	2.0	0 	0	0	21250 | ||||||
|  | Gold-5118	2.3	12 	105	0	0 | ||||||
|  | Gold-5119T	1.9	14 	85	0	0 | ||||||
|  | Gold-5120	2.2	14 	105	0	0 | ||||||
|  | Gold-5120T	2.2	14 	105	0	0 | ||||||
|  | Gold-5122	3.6	4 	105	0	0 | ||||||
|  | Gold-6126	2.6	12 	125	0	0 | ||||||
|  | Gold-6126F	2.6	12 	135	0	0 | ||||||
|  | Gold-6128	3.4	6 	115	0	0 | ||||||
|  | Gold-6130	2.1	16 	125	0	0 | ||||||
|  | Gold-6130F	2.1	16 	125	0	0 | ||||||
|  | Gold-6130T	2.1	16 	125	0	0 | ||||||
|  | Gold-6132	2.6	14 	140	0	0 | ||||||
|  | Gold-6134	3.2	8 	130	0	0 | ||||||
|  | Gold-6134M	3.2	8 	130	0	0 | ||||||
|  | Gold-6136	3.0	12 	150	0	0 | ||||||
|  | Gold-6138	2.0	20 	125	0	0 | ||||||
|  | Gold-6138F	2.0	20 	135	0	0 | ||||||
|  | Gold-6138T	2.0	20 	125	0	0 | ||||||
|  | Gold-6140	2.3	18 	140	0	0 | ||||||
|  | Gold-6140M	2.3	18 	140	0	0 | ||||||
|  | Gold-6142	2.6	16 	150	0	0 | ||||||
|  | Gold-6142F	2.6	16 	160	0	0 | ||||||
|  | Gold-6142M	2.6	16 	150	0	0 | ||||||
|  | Gold-6144	3.5	8 	150	0	0 | ||||||
|  | Gold-6145	2.0	20 	145	0	0 | ||||||
|  | Gold-6146	3.2	12 	165	0	0 | ||||||
|  | Gold-6148	2.4	20 	150	0	0 | ||||||
|  | Gold-6150	2.7	18 	165	0	26349 | ||||||
|  | Gold-6152	2.1	22 	140	0	0 | ||||||
|  | Gold-6154	3.0	18 	200	0	0 | ||||||
|  | Gold-6161	2.2	22 	165	0	0 | ||||||
|  | 
 | ||||||
|  | Silver-4208	2.1	8 	85	0	0 | ||||||
|  | Silver-4210R	2.4	10 	100	0	0 | ||||||
|  | Silver-4214R	2.4	12 	100	0	0 | ||||||
|  | Silver-4214Y	2.2	12 	85	0	0 | ||||||
|  | Silver-4215R	3.2	8 	130	0	0 | ||||||
|  | Silver-4216	2.1	16 	100	0	0 | ||||||
|  | Gold-5215	2.5	10 	85	0	0 | ||||||
|  | Gold-5215L	2.5	10 	85	0	0 | ||||||
|  | Gold-5217	3.0	8 	115	0	0 | ||||||
|  | Gold-5218	2.3	16 	125	0	0 | ||||||
|  | Gold-5218R	2.1	20 	125	0	0 | ||||||
|  | Gold-5220	2.2	18 	125	0	0 | ||||||
|  | Gold-5220R	2.2	24 	150	0	0 | ||||||
|  | Gold-5222	3.8	4 	105	0	0 | ||||||
|  | Gold-6210U	2.5	20 	150	0	0 | ||||||
|  | Gold-6212U	2.4	24 	165	0	0 | ||||||
|  | Gold-6226	2.7	12 	125	0	0 | ||||||
|  | Gold-6226R	2.9	16 	150	0	0 | ||||||
|  | Gold-6230	2.1	20 	125	0	0 | ||||||
|  | Gold-6230R	2.1	26 	150	0	0 | ||||||
|  | Gold-6234	3.3	8 	130	0	0 | ||||||
|  | Gold-6238	2.1	22 	140	0	0 | ||||||
|  | Gold-6238L	2.1	22 	140	0	0 | ||||||
|  | Gold-6238R	2.2	28 	165	0	0 | ||||||
|  | Gold-6240	2.6	18 	150	0	0 | ||||||
|  | Gold-6240L	2.6	18 	150	0	0 | ||||||
|  | Gold-6240R	2.4	24 	165	0	0 | ||||||
|  | Gold-6240Y	2.6	18 	150	0	0 | ||||||
|  | Gold-6242	2.8	16 	150	0	0 | ||||||
|  | Gold-6242R	3.1	20 	205	0	0 | ||||||
|  | Gold-6244	3.6	8 	150	0	0 | ||||||
|  | Gold-6246	3.3	12 	165	0	0 | ||||||
|  | Gold-6246R	3.4	16 	205	0	0 | ||||||
|  | Gold-6248	2.5	20 	150	0	0 | ||||||
|  | Gold-6248R	3.0	24 	205	0	0 | ||||||
|  | Gold-6252	2.1	24 	150	0	0 | ||||||
|  | Gold-6254	3.1	18 	200	0	0 | ||||||
|  | Gold-6258R	2.7	28 	205	0	0 | ||||||
|  | Platinum-8256	3.8	4 	105	0	0 | ||||||
|  | Platinum-8260	2.4	24 	165	0	0 | ||||||
|  | Platinum-8260L	2.4	24 	165	0	0 | ||||||
|  | Platinum-8260Y	2.4	24 	165	0	0 | ||||||
|  | Platinum-8253	2.2	16 	125	0	0 | ||||||
|  | Platinum-8268	2.9	24 	205	0	0 | ||||||
|  | Platinum-8270	2.7	26 	205	0	0 | ||||||
|  | Platinum-8276	2.2	28 	165	0	0 | ||||||
|  | Platinum-8280	2.7	28 	205	0	0 | ||||||
|  | Platinum-8280L	2.7	28 	205	0	0 | ||||||
|  | 
 | ||||||
|  | Platinum-8153	2.0	16	125	0	0 | ||||||
|  | Platinum-8160	2.1	24	150	0	0 | ||||||
|  | Platinum-8164	2.0	26	165	0	0 | ||||||
|  | Platinum-8168	2.7	24	205	0	0 | ||||||
|  | Platinum-8170	2.1	26	165	0	0 | ||||||
|  | Platinum-8176	2.1	28	165	0	0 | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,188 @@ | ||||||
|  | #host_type_id	#proc_id	proc_option_price | ||||||
|  | r620	E5-2620v2	900 | ||||||
|  | r620	E5-2630v2	1585 | ||||||
|  | r620	E5-2640v2	1735 | ||||||
|  | r620	E5-2650v2	2075 | ||||||
|  | r620	E5-2660v2	2955 | ||||||
|  | r620	E5-2670v2	3335 | ||||||
|  | r620	E5-2680v2	3745 | ||||||
|  | r620	E5-2690v2	4345 | ||||||
|  | r620	E5-2695v2	4985 | ||||||
|  | r620	E5-2697v2	5625 | ||||||
|  | r630	E5-2603v3	196 | ||||||
|  | r630	E5-2609v3	394 | ||||||
|  | r630	E5-2620v3	634 | ||||||
|  | r630	E5-2623v3	860 | ||||||
|  | r630	E5-2630v3	1136 | ||||||
|  | r630	E5-2630Lv3	1024 | ||||||
|  | r630	E5-2637v3	1646 | ||||||
|  | r630	E5-2640v3	1529 | ||||||
|  | r630	E5-2643v3	2793 | ||||||
|  | r630	E5-2650v3	1997 | ||||||
|  | r630	E5-2650Lv3	2332 | ||||||
|  | r630	E5-2660v3	2570 | ||||||
|  | r630	E5-2667v3	3834 | ||||||
|  | r630	E5-2670v3	2868 | ||||||
|  | r630	E5-2680v3	3190 | ||||||
|  | r630	E5-2683v3	3396 | ||||||
|  | r630	E5-2687Wv3	4009 | ||||||
|  | r630	E5-2690v3	3903 | ||||||
|  | r630	E5-2695v3	4590 | ||||||
|  | r630	E5-2697v3	5165 | ||||||
|  | r630	E5-2698v3	6246 | ||||||
|  | r630	E5-2699v3	8081 | ||||||
|  | c6220	E5-2620v2	0 | ||||||
|  | c6220	E5-2630v2	4760 | ||||||
|  | c6220	E5-2640v2	6250 | ||||||
|  | c6220	E5-2650v2	7000 | ||||||
|  | c6220	E5-2660v2	9000 | ||||||
|  | c6220	E5-2670v2	10760 | ||||||
|  | c6220	E5-2680v2	11960 | ||||||
|  | c6220	E5-2690v2	14360 | ||||||
|  | c6220	E5-2695v2	14440 | ||||||
|  | c6220	E5-2697v2	15720 | ||||||
|  | r630	E5-2603v4	432 | ||||||
|  | r630	E5-2609v4	648 | ||||||
|  | r630	E5-2620v4	916 | ||||||
|  | r630	E5-2623v4	964 | ||||||
|  | r630	E5-2630v4	1470 | ||||||
|  | r630	E5-2630Lv4	1346 | ||||||
|  | r630	E5-2637v4	2032 | ||||||
|  | r630	E5-2640v4	1902 | ||||||
|  | r630	E5-2650v4	2418 | ||||||
|  | r630	E5-2650Lv4	2786 | ||||||
|  | r630	E5-2660v4	3050 | ||||||
|  | r630	E5-2667v4	4446 | ||||||
|  | r630	E5-2680v4	3734 | ||||||
|  | r630	E5-2683v4	3960 | ||||||
|  | r630	E5-2687Wv4	4638 | ||||||
|  | r630	E5-2690v4	4522 | ||||||
|  | r630	E5-2695v4	5276 | ||||||
|  | r630	E5-2697v4	5914 | ||||||
|  | r630	E5-2697Av4	6400 | ||||||
|  | r630	E5-2698v4	7104 | ||||||
|  | r630	E5-2699v4	9128 | ||||||
|  | r730	E5-2603v4	432 | ||||||
|  | r730	E5-2609v4	648 | ||||||
|  | r730	E5-2620v4	916 | ||||||
|  | r730	E5-2623v4	964 | ||||||
|  | r730	E5-2630v4	1470 | ||||||
|  | r730	E5-2630Lv4	1346 | ||||||
|  | r730	E5-2637v4	2032 | ||||||
|  | r730	E5-2640v4	1902 | ||||||
|  | r730	E5-2650v4	2418 | ||||||
|  | r730	E5-2650Lv4	2786 | ||||||
|  | r730	E5-2660v4	3050 | ||||||
|  | r730	E5-2667v4	4446 | ||||||
|  | r730	E5-2680v4	3734 | ||||||
|  | r730	E5-2683v4	3960 | ||||||
|  | r730	E5-2687Wv4	4638 | ||||||
|  | r730	E5-2690v4	4522 | ||||||
|  | r730	E5-2695v4	5276 | ||||||
|  | r730	E5-2697v4	5914 | ||||||
|  | r730	E5-2697Av4	6400 | ||||||
|  | r730	E5-2698v4	7104 | ||||||
|  | r730	E5-2699v4	9128 | ||||||
|  | c6320	E5-2620v4	3144 | ||||||
|  | c6320	E5-2640v4	6466 | ||||||
|  | c6320	E5-2650v4	8221 | ||||||
|  | c6320	E5-2660v4	10730 | ||||||
|  | c6320	E5-2680v4	12695 | ||||||
|  | c6320	E5-2690v4	15375 | ||||||
|  | c4310	E5-2640v4	1902 | ||||||
|  | r640	Gold-5115	2508 | ||||||
|  | r640	Gold-5120	3192 | ||||||
|  | r640	Gold-5122	2414 | ||||||
|  | r640	Gold-6126	3838 | ||||||
|  | r640	Gold-6128	3648 | ||||||
|  | r640	Gold-6130	4124 | ||||||
|  | r640	Gold-6134	4560 | ||||||
|  | r640	Gold-6136	5320 | ||||||
|  | r640	Gold-6138	5700 | ||||||
|  | r640	Gold-6140	5112 | ||||||
|  | r640	Gold-6142	6366 | ||||||
|  | r640	Gold-6148	6556 | ||||||
|  | r640	Gold-6150	7182 | ||||||
|  | r640	Gold-6152	7734 | ||||||
|  | r640	Gold-6154	7562 | ||||||
|  | r640	Platinum-8153	6404 | ||||||
|  | r640	Platinum-8160	9026 | ||||||
|  | r640	Platinum-8164	12008 | ||||||
|  | r640	Platinum-8168	11438 | ||||||
|  | r640	Platinum-8170	14308 | ||||||
|  | r640	Platinum-8176	17100 | ||||||
|  | 
 | ||||||
|  | r640	Silver-4208	858 | ||||||
|  | r640	Silver-4210R	978 | ||||||
|  | r640	Silver-4214Y	1650 | ||||||
|  | r640	Silver-4214R	1418 | ||||||
|  | r640	Silver-4215R	1620 | ||||||
|  | r640	Silver-4216	2016 | ||||||
|  | r640	Gold-5215	2634 | ||||||
|  | r640	Gold-5215L	7150 | ||||||
|  | r640	Gold-5217	3300 | ||||||
|  | r640	Gold-5218R	2600 | ||||||
|  | r640	Gold-5220R	3352 | ||||||
|  | r640	Gold-5222	2534 | ||||||
|  | r640	Gold-6226R	3100 | ||||||
|  | r640	Gold-6230R	4330 | ||||||
|  | r640	Gold-6234	4980 | ||||||
|  | r640	Gold-6238L	10600 | ||||||
|  | r640	Gold-6238R	5900 | ||||||
|  | r640	Gold-6240L	9960 | ||||||
|  | r640	Gold-6240R	5368 | ||||||
|  | r640	Gold-6240Y	5900 | ||||||
|  | r640	Gold-6242R	5700 | ||||||
|  | r640	Gold-6244	6780 | ||||||
|  | r640	Gold-6246R	7150 | ||||||
|  | r640	Gold-6248R	6884 | ||||||
|  | r640	Gold-6252	8120 | ||||||
|  | r640	Gold-6254	7940 | ||||||
|  | r640	Gold-6258R	8800 | ||||||
|  | r640	Platinum-8253	6724 | ||||||
|  | r640	Platinum-8260	9478 | ||||||
|  | r640	Platinum-8260L	13340 | ||||||
|  | r640	Platinum-8260Y	10600 | ||||||
|  | r640	Platinum-8268	12010 | ||||||
|  | r640	Platinum-8270	15024 | ||||||
|  | r640	Platinum-8276	17956 | ||||||
|  | 
 | ||||||
|  | r940	Gold-5215L	14300 | ||||||
|  | r940	Gold-5218	5348 | ||||||
|  | r940	Gold-5220	6704 | ||||||
|  | r940	Gold-5222	5068 | ||||||
|  | r940	Gold-6226	7800 | ||||||
|  | r940	Gold-6230	8660 | ||||||
|  | r940	Gold-6234	9960 | ||||||
|  | r940	Gold-6238	11800 | ||||||
|  | r940	Gold-6238L	21200 | ||||||
|  | r940	Gold-6240	10736 | ||||||
|  | r940	Gold-6240L	19920 | ||||||
|  | r940	Gold-6242	11400 | ||||||
|  | r940	Gold-6244	13560 | ||||||
|  | r940	Gold-6246	14300 | ||||||
|  | r940	Gold-6248	13768 | ||||||
|  | r940	Gold-6252	16240 | ||||||
|  | r940	Gold-6254	15880 | ||||||
|  | r940	Platinum-8253	13448 | ||||||
|  | r940	Platinum-8256	27600 | ||||||
|  | r940	Platinum-8260	18956 | ||||||
|  | r940	Platinum-8260L	26680 | ||||||
|  | r940	Platinum-8268	24020 | ||||||
|  | r940	Platinum-8270	30048 | ||||||
|  | r940	Platinum-8276	35912 | ||||||
|  | r940	Platinum-8280	39900 | ||||||
|  | r940	Platinum-8280L	48300 | ||||||
|  | 
 | ||||||
|  | precision3630	core-i7-8700k	190 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,491 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | import numpy | ||||||
|  | import pylab | ||||||
|  | import matplotlib.pyplot as plt | ||||||
|  | import matplotlib.colors | ||||||
|  | import itertools | ||||||
|  | import re | ||||||
|  | import hashlib | ||||||
|  | from string import ascii_lowercase | ||||||
|  | 
 | ||||||
|  | markerTypes=[',', '+', '.', '^', 'v', '<', '>', 'o', '*', '1', '2', '3', '4', '8', 's', 'p', 'h', 'H', 'x', 'X', 'D', 'd', '|', '_'] | ||||||
|  | #for c in ascii_lowercase: | ||||||
|  | #	markerTypes.append('$%s$' % c) | ||||||
|  | #markerColors=('r', 'g', 'b') | ||||||
|  | markerColors=('r') | ||||||
|  | 
 | ||||||
|  | def get_marker(proc_id): | ||||||
|  | 	hash_object = hashlib.md5(proc_id.encode('utf-8')) | ||||||
|  | 	hash = int(hash_object.hexdigest(), 16) | ||||||
|  | 	return markerTypes[ hash % len(markerTypes) ] | ||||||
|  | 
 | ||||||
|  | def plotCpuPassmark(): | ||||||
|  | 	cpuTable = numpy.genfromtxt('cpu_table.dat', dtype=("|U10", float, int, float, float), names=True, delimiter='\t') | ||||||
|  | 	plt.subplot(1,1,0) | ||||||
|  | 	plt.subplots_adjust(bottom = 0.1) | ||||||
|  | 	markersCycler = itertools.cycle(itertools.product(markerTypes, markerColors)) | ||||||
|  | 	labels = cpuTable['id'] | ||||||
|  | 	x = cpuTable['clock'] * cpuTable['num_cores'] | ||||||
|  | 	y = cpuTable['cpumark'] | ||||||
|  | 	markerSize = 50 | ||||||
|  | 	color = 'b' | ||||||
|  | 	for label, x1, y1 in zip(labels, x, y): | ||||||
|  | 		if  y1 <= 0.0: | ||||||
|  | 			continue # no passmark available fo this data | ||||||
|  | 		generation=label[-1] | ||||||
|  | 		if generation == '2': | ||||||
|  | 			color = 'b' | ||||||
|  | 		else: | ||||||
|  | 			color = 'r'			 | ||||||
|  | 		marker = markersCycler.next() | ||||||
|  | 		plt.scatter( x1, y1, color = color, s = markerSize, marker = marker[0], label = label)	 | ||||||
|  | 	plt.xlabel(u'theoretical cpu speed [core.GHz]') | ||||||
|  | 	plt.ylabel(u'passmark [?]') | ||||||
|  | 	plt.title(u'comparison between cpu theoretical and effective speed') | ||||||
|  | 	plt.xlim( xmin = 0.0 ) | ||||||
|  | 	plt.ylim( ymin = 0.0 ) | ||||||
|  | 	plt.legend(bbox_to_anchor=(0.2, 1.0)) | ||||||
|  | 	#plt.legend() | ||||||
|  | 	plt.draw() | ||||||
|  | 	plt.show() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_proc_architecture(proc_id): | ||||||
|  | 	if re.match('core-i[357]-8[0-9][0-9][0-9][ktbuh]', proc_id): | ||||||
|  | 		return 'coffeelake' | ||||||
|  | 	elif re.match('Silver-[0-9]2[0-9][0-9]', proc_id): | ||||||
|  | 		return 'cascadelake' | ||||||
|  | 	elif re.match('Gold-[0-9]2[0-9][0-9]', proc_id): | ||||||
|  | 		return 'cascadelake' | ||||||
|  | 	elif re.match('Platinum-[0-9]2[0-9][0-9]', proc_id): | ||||||
|  | 		return 'cascadelake' | ||||||
|  | 	elif re.match('Gold-[0-9]1[0-9][0-9]', proc_id): | ||||||
|  | 		return 'skylake' | ||||||
|  | 	elif re.match('Platinum-[0-9]1[0-9][0-9]', proc_id): | ||||||
|  | 		return 'skylake' | ||||||
|  | 	elif re.match('E5-26[0-9][0-9][LWA]*v4', proc_id): | ||||||
|  | 		return 'broadwell' | ||||||
|  | 	elif re.match('E5-26[0-9][0-9][LWA]*v3', proc_id): | ||||||
|  | 		return 'haswell' | ||||||
|  | 	elif re.match('E5-26[0-9][0-9][LWA]*v2', proc_id): | ||||||
|  | 		return 'ivy bridge' | ||||||
|  | 	elif re.match('E5-26[0-9][0-9][LWA]*', proc_id): | ||||||
|  | 		return 'sandy bridge' | ||||||
|  | 	elif re.match('X56[0-9][0-9]', proc_id): | ||||||
|  | 		return 'gulftown' | ||||||
|  | 	elif re.match('X55[0-9][0-9]', proc_id): | ||||||
|  | 		return 'gainestown' | ||||||
|  | 	elif re.match('E54[0-9][0-9]', proc_id): | ||||||
|  | 		return 'harpertown' | ||||||
|  | 	elif re.match('51[0-9][0-9]', proc_id): | ||||||
|  | 		return 'woodcrest' | ||||||
|  | 	else: | ||||||
|  | 		assert False | ||||||
|  | 	 | ||||||
|  | def get_proc_arch_transistor_size(proc_arch):  | ||||||
|  | 	return { | ||||||
|  | 		'woodcrest':65, | ||||||
|  | 		'harpertown':45, | ||||||
|  | 		'gainestown':45, | ||||||
|  | 		'gulftown':32, | ||||||
|  | 		'sandy bridge':32, | ||||||
|  | 		'ivy bridge':22, | ||||||
|  | 		'haswell':22, | ||||||
|  | 		'broadwell':14, | ||||||
|  | 		'skylake':14, | ||||||
|  | 		'coffeelake':14, | ||||||
|  | 		'cascadelake':14 | ||||||
|  | 		}[get_proc_architecture(proc_arch)] | ||||||
|  | 
 | ||||||
|  | def simd_id_to_dp_flops_per_cycle(simd_id): | ||||||
|  | 	""" | ||||||
|  | 	: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 | ||||||
|  | 
 | ||||||
|  | 	return {	 | ||||||
|  | 		'sse4.1':4, | ||||||
|  | 		'sse4.2':4, | ||||||
|  | 		'avx':8, | ||||||
|  | 		'avx2':16, | ||||||
|  | 		'avx-512':16, | ||||||
|  | 		}[simd_id] | ||||||
|  | 	 | ||||||
|  | def get_simd_id(proc_arch): | ||||||
|  | 	""" | ||||||
|  | 		:param str proc_arch: eg 'broadwell' | ||||||
|  | 		:return str: eg 'sse4' | ||||||
|  | 	""" | ||||||
|  | 	return { | ||||||
|  | 		'woodcrest':'sse4.1', | ||||||
|  | 		'harpertown':'sse4.1', | ||||||
|  | 		'gainestown':'sse4.2', | ||||||
|  | 		'gulftown':'sse4.2', | ||||||
|  | 		'sandy bridge':'avx', | ||||||
|  | 		'ivy bridge':'avx', | ||||||
|  | 		'haswell':'avx2', | ||||||
|  | 		'broadwell':'avx2', | ||||||
|  | 		'skylake':'avx-512', | ||||||
|  | 		'cascadelake':'avx-512', | ||||||
|  | 		'coffeelake':'avx2' | ||||||
|  | 		}[proc_arch] | ||||||
|  | 
 | ||||||
|  | def num_dp_flop_per_cycle(proc_id): | ||||||
|  | 	proc_arch = get_proc_architecture(proc_id) | ||||||
|  | 	simd_id = get_simd_id(proc_arch) | ||||||
|  | 	num_simd_per_core = 1 | ||||||
|  | 	if proc_arch == 'skylake' or proc_arch == 'cascadelake': | ||||||
|  | 	    # 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('Gold-5122', proc_id): | ||||||
|  | 			num_simd_per_core = 2 | ||||||
|  | 		if re.match('Gold-61[0-9][0-9]', proc_id): | ||||||
|  | 			num_simd_per_core = 2 | ||||||
|  | 		if re.match('Gold-62[0-9][0-9]', proc_id): | ||||||
|  | 			num_simd_per_core = 2 | ||||||
|  | 	dp_flops_per_cycle = num_simd_per_core * simd_id_to_dp_flops_per_cycle(simd_id) | ||||||
|  | 	print(proc_id, dp_flops_per_cycle) | ||||||
|  | 	return dp_flops_per_cycle | ||||||
|  | 
 | ||||||
|  | def get_system_base_price( host_id ): | ||||||
|  | 	# for r730 on 06/10/2016 | ||||||
|  | 	#   (x: price without procs, p1 : price of e5-2603v4, p2: price of e5-2609v4) | ||||||
|  | 	#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||||
|  | 	#   x + p1 = 1014.0 | ||||||
|  | 	#   x + 2 * p1 = 1014.0 + 216 | ||||||
|  | 	#   => p1 approx= 215.5 | ||||||
|  | 	#   => x = 1014. - 215. = 799.0 | ||||||
|  | 	#   x + p2 = 1123.0 | ||||||
|  | 	#   => p2 = 324.0 | ||||||
|  | 	#   x + 2 * p2 = 1447.0 | ||||||
|  | 	# for r630 on 14/10/2016 | ||||||
|  | 	#   (x: price without procs, p2603: price of e5-2603v4, p2609: price of e5-2609v4) | ||||||
|  | 	#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||||
|  | 	#   x + p2603 = 948.0 | ||||||
|  | 	#   x + 2 * p2603 = 948.0 + 216 | ||||||
|  | 	#   => p2603 approx= 215.5 | ||||||
|  | 	#   => x = 948. - 215. = 733.0 | ||||||
|  | 	# verification : | ||||||
|  | 	#   x + p2609 = 1057.0 | ||||||
|  | 	#   => p2609 = 1057-733=324.0 | ||||||
|  | 	#   x + 2 * p2609 = 1381.0 | ||||||
|  | 	# for 4xc6320 on 14/10/2016 | ||||||
|  | 	#   (x: price without procs, p2603: price of e5-2603v4, p2609: price of e5-2609v4) | ||||||
|  | 	# x + 4 x (2 x p2620 +  p32G) =  5135 € HT | ||||||
|  | 	# x + 4 x (2 x p2640 + p128G + pX520 + p5years) = 15590 € HT | ||||||
|  | 	# x + 4 x (2 x p2650 + p128G + pX520 + p5years) = 17340 € HT | ||||||
|  | 	# x + 4 x (2 x p2660 + p128G + pX520 + p5years) = 19490 € HT | ||||||
|  | 	# by examining this and the price of processors on R630 | ||||||
|  | 	# - E5-2620v4 :   458€ | ||||||
|  | 	# - E5-2640v4 :   951€ | ||||||
|  | 	# - E5-2650v4 :  1209€ | ||||||
|  | 	# - E5-2660v4 :  1525€ | ||||||
|  | 	# - E5-2680v4 :  1867€ | ||||||
|  | 	# - E5-2690v4 :  2261€ | ||||||
|  | 	# I could work out that : | ||||||
|  | 	# - the price of procs on c6320 is the price of procs on r630 * 85% | ||||||
|  | 	# - the price of the base c6320 with 32 Go and no proc at all is 2020.6 | ||||||
|  | 	# - the price of the 32G to 128G upgrade is 6222.6 euros (cheaper price of 16G->128G upgrade on r630 : (1778*4 = 7112)) | ||||||
|  | 	# details : | ||||||
|  | 	# 	>>> (19490.-17340)/8 | ||||||
|  | 	# 	268.75 | ||||||
|  | 	# 	>>> (17340.-15590)/8 | ||||||
|  | 	# 	218.75 | ||||||
|  | 	# 	>>> 218.75/258. | ||||||
|  | 	# 	0.8478682170542635 | ||||||
|  | 	# 	>>> 268.75/316 | ||||||
|  | 	# 	0.8504746835443038 | ||||||
|  | 	# 	>>> 15590.0+((1209.0-951.0)*0.85)*8 | ||||||
|  | 	# 	17344.4 | ||||||
|  | 	# 	>>> 15590.0+((1525.0-951.0)*0.85)*8 | ||||||
|  | 	# 	19493.2 | ||||||
|  | 	#   price of 128G ram upgrade assuming that 5years guarantee costs 880€ (same as c6220), | ||||||
|  | 	# 	>>> 15590.0+((458.0-951.0)*0.85)*8-210.0*4-880.0 - 5135.0 | ||||||
|  | 	#	6222.6 | ||||||
|  | 	# 	>>> 5135.0 - (458.0*0.85)*8 | ||||||
|  | 	# 	2020.6 | ||||||
|  | 	# for c4130 on 14/10/2016 | ||||||
|  | 	# x + 2 x E5-2640v4 + 128G + 2 * K80 + X520 + p5years = 12281€ | ||||||
|  | 	# x + 2 x E5-2640v4 + 128G + 4 * K80 + X520 + p5years = 19317€ | ||||||
|  | 	# price of a K80 | ||||||
|  | 	# >>> (19317.-12281)/2 | ||||||
|  | 	# 3518.0 | ||||||
|  | 	# assuming the options cost the same as for R630 (X520=210€, p5years=240€, 128G=1778€, E5-2640v4=951€), the cost of the base system is : | ||||||
|  | 	# >>> 12281-951-951-1778-210-240-3518-3518 | ||||||
|  | 	# 1115 | ||||||
|  | 	# but if we integrate the X520 card so that we have a 10Gb ethernet in the base, the cost of the base system becomes : | ||||||
|  | 	# >>> 1115+210 | ||||||
|  | 	# 1325 | ||||||
|  | 	# on 29/09/2017 | ||||||
|  | 	#   (x: price without procs, p3106: price of Bronze-3106, p6126: price of Gold6126) | ||||||
|  | 	#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||||
|  | 	#   x + p3106 = 1067.0 | ||||||
|  | 	#   x + 2 * p3106 = 1067.0 + 320.0 | ||||||
|  | 	#   => p3106 = 320 | ||||||
|  | 	#   => x = 1067.0 - 320.0 = 747.0 | ||||||
|  | 	# 	check if x computation is consistent with p6126 | ||||||
|  | 	#   x + p6126 = 2767 | ||||||
|  | 	#   x + 2 * p6126 = 4787.0 | ||||||
|  | 	#   => p6126 = 2020.0 | ||||||
|  | 	#   => x = 747.0 --> yes ! | ||||||
|  | 		 | ||||||
|  | 	# price of r940 (with 2x xeon gold 5215 and 32 Go DDR4 @ 2933GHz) on 09/06/2020 : 3784€ | ||||||
|  | 	#   (x: price without procs, p5215: price of gold-5215, p6248: price of Gold6248) | ||||||
|  | 	#   p6240 = 2684 | ||||||
|  | 	#   p6248 = 3442 | ||||||
|  | 	#   p8280l = 12075 | ||||||
|  | 	#   x + 2 * p5215 = 3784 | ||||||
|  | 	#   x + 4 * p6240 = 11886   =>    x = 1150 | ||||||
|  | 	#   x + 4 * p6248 = 14918   =>    x = 1150 | ||||||
|  | 	#   x + 4 * p8280l = 49450  =>    x = 1150 | ||||||
|  | 	#   => p5215 = 1317   (agrees with proc price on r640) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	return { | ||||||
|  | 		'c6220':4890.0, | ||||||
|  | 		'r620':860.0, | ||||||
|  | 		'r630':733.0, | ||||||
|  | 		'r640':747.0, | ||||||
|  | 		'r730':799.0, | ||||||
|  | 		'r940':1150.0, | ||||||
|  | 		'c6320':2020.6, | ||||||
|  | 		'c4310':1325.0, | ||||||
|  | 		'precision3630':449.0 | ||||||
|  | 		}[host_id] | ||||||
|  | 
 | ||||||
|  | def plotSystemEfficiency(): | ||||||
|  | 
 | ||||||
|  | 	cpuTable = numpy.genfromtxt('cpu_table.dat', dtype=("|U15", float, int, float, float, float), names=True, delimiter='\t') | ||||||
|  | 	#cpuTable = numpy.genfromtxt('dell_ivybridge_table.dat', dtype=(('id', "|S10"), ('clock', float), ('num_cores', int), ('price', float, float)), names=None, delimiter='\t') | ||||||
|  | 	print(type(cpuTable)) | ||||||
|  | 	print(cpuTable.dtype) | ||||||
|  | 	print(cpuTable) | ||||||
|  | 	print(cpuTable['id']) | ||||||
|  | 
 | ||||||
|  | 	dellPriceTable = numpy.genfromtxt('dell_procoptions_table.dat', dtype=("|U15", "|U15", float), names=True, delimiter='\t') | ||||||
|  | 	#cpuTable = numpy.genfromtxt('dell_ivybridge_table.dat', dtype=(('id', "|S10"), ('clock', float), ('num_cores', int), ('price', float, float)), names=None, delimiter='\t') | ||||||
|  | 
 | ||||||
|  | 	#for (x, y) in clusters: | ||||||
|  | 	serverBasePowerConsumption = 100.0 # rough estimation in watts | ||||||
|  | 	def GHzToMHz( frequency ): | ||||||
|  | 		return frequency * 1000.0 | ||||||
|  | 		 | ||||||
|  | 		 | ||||||
|  | 	 | ||||||
|  | 	kWHPrice = 0.07 * 1.5 | ||||||
|  | 	containerLifetime = 7.0 # in years | ||||||
|  | 	powerUsageEfficiency = 0.5 | ||||||
|  | 
 | ||||||
|  | 	ramUpgradePrice128Gb = { | ||||||
|  | 		'c6220':3520.0, | ||||||
|  | 		'r620':2010.0,  | ||||||
|  | 		'r630':1778.0, | ||||||
|  | 		'r640':1780.0, | ||||||
|  | 		'r730':1778.0, | ||||||
|  | 		'r940':960.0,   # 32 Gb 2933 MHz RDIMM : 320 € | ||||||
|  | 		'c6320':6222.6, | ||||||
|  | 		'c4310':1778.0, | ||||||
|  | 		'precision3630': 1536.0 } | ||||||
|  | 	guarantee5YearsPrice = { | ||||||
|  | 		'c6220':880.0, | ||||||
|  | 		'r620':240.0, | ||||||
|  | 		'r630':240.0, | ||||||
|  | 		'r640':0.0, | ||||||
|  | 		'r730':240.0, | ||||||
|  | 		'r940':0.0, | ||||||
|  | 		'c6320':880.0, | ||||||
|  | 		'c4310':240.0, | ||||||
|  | 		'precision3630': 0.0 } | ||||||
|  | 	hddUpgradePrice2To = { | ||||||
|  | 		'c6220':320.0, | ||||||
|  | 		'r620':-20.0, | ||||||
|  | 		'r630':0.0, | ||||||
|  | 		'r640':70.0, | ||||||
|  | 		'r730':0.0, | ||||||
|  | 		'r940':70.0, | ||||||
|  | 		'c6320':0.0, | ||||||
|  | 		'c4310':0.0, | ||||||
|  | 		'precision3630': 0.0} | ||||||
|  | 	 | ||||||
|  | 	def getColorCodeFromItemLabel(label): | ||||||
|  | 		generation=label[-1] | ||||||
|  | 		(model, proc_id) = re.split('_', label) | ||||||
|  | 		saturation = { | ||||||
|  | 			'sandy bridge':0.0, | ||||||
|  | 			'ivy bridge':0.2, | ||||||
|  | 			'haswell':0.2, | ||||||
|  | 			'broadwell':0.2, | ||||||
|  | 			'skylake':0.4, | ||||||
|  | 			'coffeelake':0.6, | ||||||
|  | 			'cascadelake':1.0 | ||||||
|  | 			}[get_proc_architecture(proc_id)] | ||||||
|  | 			# 		if model == 'r620': | ||||||
|  | 			# 			color = 'r' | ||||||
|  | 			# 		elif model == 'r630': | ||||||
|  | 			# 			color = 'g' | ||||||
|  | 			# 		elif model == 'r730': | ||||||
|  | 			# 			color = 'm' | ||||||
|  | 			# 		elif model == 'c6220': | ||||||
|  | 			# 			if generation == '2': | ||||||
|  | 			# 				color = 'b' | ||||||
|  | 			# 			else: | ||||||
|  | 			# 				color = 'y' | ||||||
|  | 		hue = { | ||||||
|  | 			'r620': 0.6, | ||||||
|  | 			'r630': 0.6, | ||||||
|  | 			'r640': 0.6, | ||||||
|  | 			'c4310': 0.6, | ||||||
|  | 			'r730': 0.4, | ||||||
|  | 			'r940': 0.8, | ||||||
|  | 			'c6220': 1.0, | ||||||
|  | 			'c6320': 1.0, | ||||||
|  | 			'precision3630': 0.2 | ||||||
|  | 			}[model] | ||||||
|  | 		value = 0.9 | ||||||
|  | 		return matplotlib.colors.hsv_to_rgb((hue, saturation, value)) | ||||||
|  | 
 | ||||||
|  | 	def get_marker_from_label(label): | ||||||
|  | 		(model, proc_id) = re.split('_', label) | ||||||
|  | 		return get_marker(proc_id) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	itemPrice = numpy.array([]) | ||||||
|  | 	itemPowerConsumption = numpy.array([]) | ||||||
|  | 	itemSpeed = numpy.array([]) | ||||||
|  | 	itemLabel = numpy.array([]) | ||||||
|  | 	itemGeneration = numpy.array([]) | ||||||
|  | 	for hostTypeId, procId, procOptionPrice in zip(dellPriceTable['host_type_id'], dellPriceTable['proc_id'], dellPriceTable['proc_option_price']): | ||||||
|  | 		#print(hostTypeId) | ||||||
|  | 		#if hostTypeId == 'r630': | ||||||
|  | 		#	continue | ||||||
|  | 		proc_arch = get_proc_architecture(procId) | ||||||
|  | 		if not proc_arch in ['coffeelake', 'skylake','cascadelake']: | ||||||
|  | 			continue | ||||||
|  | 		 | ||||||
|  | 		itemGeneration = procId[-1] | ||||||
|  | 		 | ||||||
|  | 		itemLabel = numpy.append( itemLabel, hostTypeId + '_' + procId ) | ||||||
|  | 		itemPrice = numpy.append( itemPrice, procOptionPrice + get_system_base_price(hostTypeId) + ramUpgradePrice128Gb[hostTypeId] + guarantee5YearsPrice[hostTypeId] + hddUpgradePrice2To[hostTypeId] ) | ||||||
|  | 		if hostTypeId == 'c6220' or hostTypeId == 'c6320' : | ||||||
|  | 			numServersPerContainer = 4 | ||||||
|  | 		else: | ||||||
|  | 			numServersPerContainer = 1 | ||||||
|  | 		for id, clock, numCores, tdp, cpumark in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['tdp'], cpuTable['cpumark_1_cpu']): | ||||||
|  | 			if id == procId: | ||||||
|  | 				# print('found '+procId) | ||||||
|  | 				break | ||||||
|  | 		assert id == procId, 'Failed to find %s in cputable' % procId | ||||||
|  | 		#print(tdp) | ||||||
|  | 		if hostTypeId == 'precision3630': | ||||||
|  | 			numProcsPerServer = 1 | ||||||
|  | 		elif hostTypeId in ['r940']: # re.match('r9[0-9]0', hostTypeId): | ||||||
|  | 			numProcsPerServer = 4 | ||||||
|  | 		else: | ||||||
|  | 			numProcsPerServer = 2 | ||||||
|  | 		print(hostTypeId, numProcsPerServer) | ||||||
|  | 		itemPowerConsumption = numpy.append( itemPowerConsumption, (tdp*numProcsPerServer+serverBasePowerConsumption)*numServersPerContainer ) | ||||||
|  | 		# print(hostTypeId, procId, itemPowerConsumption[-1]) | ||||||
|  | 		itemSpeed = numpy.append( itemSpeed, num_dp_flop_per_cycle(procId)*clock*1.e9*numCores*numProcsPerServer*numServersPerContainer) | ||||||
|  | 		#itemSpeed = numpy.append( itemSpeed, GHzToMHz(clock)*numCores*numProcsPerServer*numServersPerContainer) | ||||||
|  | 		#itemSpeed = numpy.append( itemSpeed, cpumark * numProcsPerServer*numServersPerContainer ) | ||||||
|  | 
 | ||||||
|  | 	#pylab.plot(x, y, '+') | ||||||
|  | 	#pylab.xlabel('speed/price ratio [core.MHz/euros]') | ||||||
|  | 	#pylab.ylabel('speed/power consumption ratio [core.MHz/W]') | ||||||
|  | 	#pylab.show() # or savefig(<filename>) | ||||||
|  | 
 | ||||||
|  | 	 | ||||||
|  | 	#print("items = ") | ||||||
|  | 	#print(itemLabel) | ||||||
|  | 
 | ||||||
|  | 	markerSize = 50 | ||||||
|  | 
 | ||||||
|  | 	if False: | ||||||
|  | 		plt.subplot(1,2,1) | ||||||
|  | 		plt.subplots_adjust(bottom = 0.1) | ||||||
|  | 		markersCycler = itertools.cycle(itertools.product(markerTypes, markerColors)) | ||||||
|  | 		x = itemSpeed / itemPrice | ||||||
|  | 		y = itemSpeed / itemPowerConsumption | ||||||
|  | 		for label, x1, y1, power, speed, price, in zip(itemLabel, x, y, itemPowerConsumption, itemSpeed, itemPrice): | ||||||
|  | 			marker = markersCycler.next() | ||||||
|  | 			color = getColorCodeFromItemLabel(label) | ||||||
|  | 			plt.scatter( x1, y1, color = color, s = markerSize, marker = marker[0], label = label) | ||||||
|  | 			#print(x1, y1, color, markerSize, marker[0], label) | ||||||
|  | 		if False: | ||||||
|  | 			plt.scatter( x, y, marker = 'o') | ||||||
|  | 			for label, x1, y1, power, speed, price, in zip(itemLabel, x, y, itemPowerConsumption, itemSpeed, itemPrice): | ||||||
|  | 				#print(label) | ||||||
|  | 				plt.annotate( u'%s (%.1f core.GHz, %.0f W, %.0f €)' % (label,speed/1000.0, power, price),  | ||||||
|  | 					xy = (x1, y1), xytext = (-50, 50), | ||||||
|  | 					textcoords = 'offset points', ha = 'right', va = 'bottom', | ||||||
|  | 					bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5), | ||||||
|  | 					arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0')) | ||||||
|  | 		plt.xlabel(u'speed/price ratio [core.MHz/€]') | ||||||
|  | 		plt.ylabel(u'speed/power consumption ratio [core.MHz/W]') | ||||||
|  | 		plt.xlim( xmin = 0.0 ) | ||||||
|  | 		plt.ylim( ymin = 0.0 ) | ||||||
|  | 
 | ||||||
|  | 	plt.subplot(1,2,1) | ||||||
|  | 	#fig = plt.figure() | ||||||
|  | 	#ax = fig.gca() | ||||||
|  | 	#ax.set_xticks(numpy.arange(0,1,0.1)) | ||||||
|  | 	#ax.set_yticks(numpy.arange(0,1.,0.1)) | ||||||
|  | 
 | ||||||
|  | 	powerUsedInLifetime = (itemPowerConsumption * containerLifetime * 365 * 24) / powerUsageEfficiency | ||||||
|  | 	itemTotalCost = itemPrice + (powerUsedInLifetime / 1000.0 * kWHPrice ) | ||||||
|  | 	markersCycler = itertools.cycle(itertools.product(markerTypes, markerColors)) | ||||||
|  | 	item_flops = itemSpeed | ||||||
|  | 	# print item_flops | ||||||
|  | 	item_total_num_ops = item_flops * containerLifetime * 365 * 24 * 3600 | ||||||
|  | 	# print(itemPrice) | ||||||
|  | 	x = itemPrice | ||||||
|  | 	y = item_total_num_ops / itemTotalCost | ||||||
|  | 	for i in range(len(itemLabel)): | ||||||
|  | 		print(itemLabel[i], itemPrice[i], y[i]) | ||||||
|  | 		print('itemTotalCost', itemTotalCost[i]) | ||||||
|  | 		print('flops', item_flops[i]) | ||||||
|  | 	# print y | ||||||
|  | 	for label, x1, y1, power, speed, price, in zip(itemLabel, x, y, itemPowerConsumption, itemSpeed, itemPrice): | ||||||
|  | 		if y1 > 0.0001: | ||||||
|  | 			color = getColorCodeFromItemLabel(label) | ||||||
|  | 			# marker = markersCycler.next() | ||||||
|  | 			marker = get_marker_from_label( label ) | ||||||
|  | 			#print(x1, y1) | ||||||
|  | 			plt.scatter( x1, y1, facecolors = color, s = markerSize, marker = marker[0], label = label) | ||||||
|  | 			if y1 > 5.7e16: | ||||||
|  | 				plt.annotate( u'%s' % label,  | ||||||
|  | 					xy = (x1, y1), xytext = (x1*4.0, (y1-5.5e16)*7.1), | ||||||
|  | 					textcoords = 'data', ha = 'right', va = 'bottom', | ||||||
|  | 					bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5), | ||||||
|  | 					arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0')) | ||||||
|  | 
 | ||||||
|  | 	plt.xlabel(u'purchase price [€]') | ||||||
|  | 	plt.ylabel(u'num total DP operations/total cost [€/^-1]') | ||||||
|  | 	plt.title(u'total cost including electricity') | ||||||
|  | 	plt.xlim( xmin = 0.0 ) | ||||||
|  | 	plt.ylim( ymin = 0.0 ) | ||||||
|  | 	plt.minorticks_on() | ||||||
|  | 	plt.grid(b=True, which='major', color='b', linestyle='-', linewidth=0.5) | ||||||
|  | 	plt.grid(b=True, which='minor', color='b', linestyle='-', linewidth=0.2)	 | ||||||
|  | 	plt.legend(bbox_to_anchor=(1.1, 1.1), ncol=3) | ||||||
|  | 	plt.draw() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	plt.show() | ||||||
|  | 
 | ||||||
|  | #plotCpuPassmark(): | ||||||
|  | plotSystemEfficiency() | ||||||
		Loading…
	
		Reference in New Issue