added current dell poweredge r760xa configurator
- included added support for emerald rapids cpu work related to [https://bugzilla.ipr.univ-rennes.fr/show_bug.cgi?id=4171]
This commit is contained in:
parent
8d92cf77f0
commit
a99a69f7db
|
|
@ -219,20 +219,6 @@ 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-performance-6505p 2.2 12 2 150 0 0 48.0
|
||||
intel-xeon-performance-6507p 3.5 8 2 150 0 0 48.0
|
||||
intel-xeon-performance-6515p 2.3 16 2 150 0 0 72.0
|
||||
intel-xeon-performance-6517p 3.2 16 2 190 0 0 72.0
|
||||
intel-xeon-performance-6520p 2.4 24 2 210 0 0 144.0
|
||||
intel-xeon-performance-6527p 3.0 24 2 250 0 0 144.0
|
||||
intel-xeon-performance-6714p 4.0 8 2 165 0 0 48.0
|
||||
intel-xeon-performance-6724p 3.6 16 2 210 0 0 72.0
|
||||
intel-xeon-performance-6730p 2.5 32 2 250 0 0 288.0
|
||||
intel-xeon-performance-6737p 2.9 32 2 270 0 0 144.0
|
||||
intel-xeon-performance-6740p 2.1 48 2 270 0 0 288.0
|
||||
intel-xeon-performance-6747p 2.7 48 2 350 0 0 288.0
|
||||
intel-xeon-performance-6767p 2.4 64 2 350 0 0 336.0
|
||||
intel-xeon-performance-6787p 2.0 86 2 350 0 0 336.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
|
||||
|
|
@ -248,6 +234,28 @@ 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-silver-4514y 2.0 16 2 150 0 0 30.0
|
||||
intel-xeon-gold-6526y 2.8 16 2 195 0 0 37.5
|
||||
intel-xeon-gold-6534 3.9 8 2 195 0 0 22.5
|
||||
intel-xeon-gold-6542y 2.9 24 2 250 0 0 60.0
|
||||
intel-xeon-gold-6548y+ 2.5 32 2 250 0 0 60.0
|
||||
intel-xeon-platinum-8562y+ 2.8 32 2 300 0 0 60.0
|
||||
|
||||
intel-xeon-performance-6505p 2.2 12 2 150 0 0 48.0
|
||||
intel-xeon-performance-6507p 3.5 8 2 150 0 0 48.0
|
||||
intel-xeon-performance-6515p 2.3 16 2 150 0 0 72.0
|
||||
intel-xeon-performance-6517p 3.2 16 2 190 0 0 72.0
|
||||
intel-xeon-performance-6520p 2.4 24 2 210 0 0 144.0
|
||||
intel-xeon-performance-6527p 3.0 24 2 250 0 0 144.0
|
||||
intel-xeon-performance-6714p 4.0 8 2 165 0 0 48.0
|
||||
intel-xeon-performance-6724p 3.6 16 2 210 0 0 72.0
|
||||
intel-xeon-performance-6730p 2.5 32 2 250 0 0 288.0
|
||||
intel-xeon-performance-6737p 2.9 32 2 270 0 0 144.0
|
||||
intel-xeon-performance-6740p 2.1 48 2 270 0 0 288.0
|
||||
intel-xeon-performance-6747p 2.7 48 2 350 0 0 288.0
|
||||
intel-xeon-performance-6767p 2.4 64 2 350 0 0 336.0
|
||||
intel-xeon-performance-6787p 2.0 86 2 350 0 0 336.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
|
||||
|
|
@ -298,3 +306,23 @@ 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
|
||||
|
||||
amd-epyc-9115 2.6 16 2 125 0 0 64
|
||||
amd-epyc-9135 3.65 16 2 200 0 0 64
|
||||
amd-epyc-9175f 4.2 16 2 320 0 0 512
|
||||
amd-epyc-9255 3.25 24 2 200 0 0 128
|
||||
amd-epyc-9275f 4.1 24 2 320 0 0 256
|
||||
amd-epyc-9335 3.0 32 2 210 0 0 128
|
||||
amd-epyc-9355 3.55 32 2 280 0 0 256
|
||||
amd-epyc-9375f 3.8 32 2 320 0 0 256
|
||||
amd-epyc-9475f 3.65 48 2 400 0 0 256
|
||||
amd-epyc-9555 3.2 64 2 360 0 0 256
|
||||
amd-epyc-9575f 3.3 64 2 400 0 0 256
|
||||
amd-epyc-9655 2.5 96 2 400 0 0 384
|
||||
amd-epyc-9745 2.4 128 2 400 0 0 256
|
||||
amd-epyc-9825 2.2 144 2 390 0 0 384
|
||||
amd-epyc-9845 2.1 160 2 390 0 0 320
|
||||
amd-epyc-9965 2.25 192 2 500 0 0 384
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
File diff suppressed because one or more lines are too long
|
|
@ -129,6 +129,12 @@ class Cpu(Item):
|
|||
return 'coffeelake'
|
||||
elif re.match('intel-xeon-performance-[0-9][57][0-9][0-9]', proc_id):
|
||||
return 'granite rapids'
|
||||
elif re.match('intel-xeon-silver-[0-9][5][0-9][0-9]', proc_id):
|
||||
return 'emerald rapids'
|
||||
elif re.match('intel-xeon-gold-[0-9][5][0-9][0-9]', proc_id):
|
||||
return 'emerald rapids'
|
||||
elif re.match('intel-xeon-platinum-[0-9][5][0-9][0-9]', proc_id):
|
||||
return 'emerald rapids'
|
||||
elif re.match('intel-xeon-bronze-[0-9]4[0-9][0-9]', proc_id):
|
||||
return 'sapphire rapids'
|
||||
elif re.match('intel-xeon-silver-[0-9]4[0-9][0-9]', proc_id):
|
||||
|
|
@ -251,6 +257,9 @@ class Cpu(Item):
|
|||
dp_flops_per_cycle_per_core = 32
|
||||
# cpus_may2023_v3.pdf
|
||||
|
||||
if proc_arch in ['emerald rapids']:
|
||||
dp_flops_per_cycle_per_core = 32 # just a guess
|
||||
|
||||
if proc_arch in ['granite rapids']:
|
||||
dp_flops_per_cycle_per_core = 32 # just a guess, I still don't know if there were some changes compared to sapphire rapids
|
||||
|
||||
|
|
@ -301,6 +310,7 @@ class Cpu(Item):
|
|||
'cascadelake': 6,
|
||||
'icelake': 8,
|
||||
'sapphire rapids': 8,
|
||||
'emerald rapids': 8,
|
||||
'granite rapids': 8,
|
||||
'rome': 8,
|
||||
'milan': 8,
|
||||
|
|
@ -349,6 +359,7 @@ def get_simd_id(proc_arch: CpuArchitecture) -> SimdId:
|
|||
'cascadelake': 'avx-512',
|
||||
'icelake': 'avx-512',
|
||||
'sapphire rapids': 'avx-512',
|
||||
'emerald rapids': 'avx-512',
|
||||
'granite rapids': 'avx-512',
|
||||
'coffeelake': 'avx2',
|
||||
# from https://www.microway.com/knowledge-center-articles/detailed-specifications-of-the-amd-epyc-rome-cpus/:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from typing import List
|
||||
from typing import List, Optional
|
||||
from pathlib import Path
|
||||
from concho.config import TableBasedConfigurator
|
||||
from concho.config import Configurator
|
||||
|
|
@ -417,7 +417,8 @@ class DellConfiguratorParser(IHtmlConfiguratorParser):
|
|||
assert False, 'failed to find module "%s"' % section_label
|
||||
|
||||
@abstractmethod
|
||||
def price_str_as_float(self, price_as_str):
|
||||
def price_str_as_float(self, price_as_str) -> Optional[Price]:
|
||||
'''return None is the price is not available for some reason (eg (Plus disponible))'''
|
||||
assert False
|
||||
|
||||
@abstractmethod
|
||||
|
|
@ -483,7 +484,8 @@ class DellConfiguratorParser(IHtmlConfiguratorParser):
|
|||
# examples from dell 20/10/2025:
|
||||
# Processeur Intel® Xeon® 6 Performance 6507P 3,5 GHz, 8C/16T, 24 GT/s, 48 Mo de cache, Turbo (150 W), mémoire DDR5-6400
|
||||
# Intel® Xeon® 6 Performance 6714P 4,0 GHz, 8C/16T, 24 GT/s, 330 Mo de cache, Turbo (165 W), mémoire DDR5-6400
|
||||
match = re.match(r'^(Processeur\s)?Intel[®]?\sXeon[®]?\s+6\s+(?P<cpu_class>Silver|Gold|Platinium|Performance)\s+(?P<cpu_number>[0-9][0-9][0-9][0-9][PRLYU]?).*', label)
|
||||
# Processeur Intel® Xeon® Platinum 8460Y+ 2 GHz, 40C/80T, 16 GT/s, cache 105 Mo, Turbo, HT (300 W), mémoire DDR5 4 800 MHz
|
||||
match = re.match(r'^(Processeur\s)?Intel[®]?\sXeon[®]?(\s+6)?\s+(?P<cpu_class>Silver|Gold|Platinium|Platinum|Performance)\s+(?P<cpu_number>[0-9][0-9][0-9][0-9][PRLYU]?[+]?).*', label)
|
||||
if match:
|
||||
cpu_class = match['cpu_class'].lower()
|
||||
if cpu_class == 'platinium':
|
||||
|
|
@ -513,6 +515,9 @@ class DellConfiguratorParser(IHtmlConfiguratorParser):
|
|||
if len(label_elements) > 0:
|
||||
label = clean_string(label_elements[0].text_content().replace('\n', '').strip())
|
||||
price = self.price_str_as_float(option_root_element.xpath(self.get_xpath_filter('option_to_price'))[0].text_content())
|
||||
if price is None:
|
||||
logging.warning(f'skipping cpu option with unavailable price: "{label}"')
|
||||
continue
|
||||
option = self._parse_cpu_upgrade(label, price)
|
||||
# print('_parse_proc_change_options : adding cpu %s (price = %f)' % (cpu_id, price / num_cpus))
|
||||
proc_options.add_option(option)
|
||||
|
|
@ -736,6 +741,20 @@ class DellConfiguratorParser(IHtmlConfiguratorParser):
|
|||
'amd-epyc-9255': 2556.0,
|
||||
'amd-epyc-9275f': 3943.0,
|
||||
}
|
||||
elif cpu_uid == 'intel-xeon-silver-4514y':
|
||||
# retail prices [https://en.wikipedia.org/wiki/Emerald_Rapids#List_of_Emerald_Rapids_processors] on 23/10/2025:
|
||||
public_prices_usd = {
|
||||
'intel-xeon-silver-4514y': 780.0,
|
||||
'intel-xeon-gold-6526y': 1517.0,
|
||||
'intel-xeon-gold-5418y': 1483.0, # from https://en.wikipedia.org/wiki/Sapphire_Rapids#List_of_Sapphire_Rapids_processors
|
||||
'intel-xeon-gold-6542y': 2878.0,
|
||||
}
|
||||
# matinfo 6 upgrade (from 2 x intel-xeon-silver-4514) prices:
|
||||
matinfo6_upgrade_prices_eur = {
|
||||
'intel-xeon-gold-6526y': 636.0,
|
||||
'intel-xeon-gold-5418y': 1128.0,
|
||||
'intel-xeon-gold-6542y': 2550.0,
|
||||
}
|
||||
else:
|
||||
assert False, 'estimation of base cpu price from public prices not implemented for %s' % cpu_uid
|
||||
# let p_x be the public price of cpu x in usd (known)
|
||||
|
|
@ -824,6 +843,7 @@ class DellConfiguratorParser(IHtmlConfiguratorParser):
|
|||
base_cpu_price = {
|
||||
'amd-epyc-7262': 550.0,
|
||||
'amd-epyc-9115': DellConfiguratorParser._estimate_base_cpu_price_from_public_prices(cpu_uid=base_cpu.uid),
|
||||
'intel-xeon-silver-4514y': DellConfiguratorParser._estimate_base_cpu_price_from_public_prices(cpu_uid=base_cpu.uid),
|
||||
'intel-xeon-performance-6505p': DellConfiguratorParser._estimate_base_cpu_price_from_public_prices(cpu_uid=base_cpu.uid),
|
||||
}[base_cpu.uid]
|
||||
configurator.modules['processor'].add_option(Option(base_cpu, base_cpu_price))
|
||||
|
|
@ -883,7 +903,7 @@ class DellConfiguratorParser2020(DellConfiguratorParser):
|
|||
def additional_cpu_is_automatic(self) -> bool:
|
||||
return False
|
||||
|
||||
def price_str_as_float(self, price_as_str):
|
||||
def price_str_as_float(self, price_as_str) -> Optional[Price]:
|
||||
# eg '+ 2,255.00 €'
|
||||
match = re.match(r'^\s*(?P<sign>[-+]?)\s*(?P<numbers>[0-9.]*)\s*€\s*$', price_as_str.replace(',', ''))
|
||||
assert match, 'unexpected price string (%s)' % price_as_str
|
||||
|
|
@ -958,7 +978,7 @@ class DellConfiguratorParser2021(DellConfiguratorParser):
|
|||
def additional_cpu_is_automatic(self) -> bool:
|
||||
return False
|
||||
|
||||
def price_str_as_float(self, price_as_str):
|
||||
def price_str_as_float(self, price_as_str) -> Optional[Price]:
|
||||
# eg '+ 2 255,00 €' # contains a Narrow No-Break Space (NNBSP) https://www.compart.com/en/unicode/U+202F
|
||||
nnbsp = ' '
|
||||
match = re.match(r'^\s*(?P<sign>[-+]?)\s*(?P<numbers>[0-9.]*)\s*€\s*$', price_as_str.replace(',', '.').replace(nnbsp, ''))
|
||||
|
|
@ -1035,7 +1055,8 @@ class DellConfiguratorParser2025(DellConfiguratorParser):
|
|||
title_span_element = conf_title_element.xpath(".//span")[0]
|
||||
assert title_span_element is not None
|
||||
title = title_span_element.text_content().replace('\n', '').strip() # eg 'Cat2 Conf 2-2-07: Dell Poweredge R670'
|
||||
match = re.match(r'^Cat[0-9]+ Conf\s+[0-9\-]+: Dell Poweredge (?P<chassis_type>[CR][0-9][0-9][0-9][0-9]?).*', title)
|
||||
# Cat3 Conf 3-2-01 : Poweredge R760xa
|
||||
match = re.match(r'^Cat[0-9]+ Conf\s+[0-9\-]+\s*:\s*(Dell )?Poweredge (?P<chassis_type>[CR][0-9][0-9][0-9][0-9]?[xa]*).*', title)
|
||||
assert match, 'unhandled title : %s' % title
|
||||
# print(match['cpu_class'], match['cpu_number'])
|
||||
chassis_id = "dell-poweredge-%s" % (match['chassis_type'].lower(), ) # eg "dell-poweredge-r670"
|
||||
|
|
@ -1069,14 +1090,20 @@ class DellConfiguratorParser2025(DellConfiguratorParser):
|
|||
# Inclus dans le prix
|
||||
return True
|
||||
|
||||
def price_str_as_float(self, price_as_str):
|
||||
def price_str_as_float(self, price_as_str) -> Optional[Price]:
|
||||
# eg '+ 2 255,00 €' # contains a Narrow No-Break Space (NNBSP) https://www.compart.com/en/unicode/U+202F
|
||||
nnbsp = ' '
|
||||
match = re.match(r'^\s*(?P<sign>[-+]?)\s*(?P<numbers>[0-9.]*)\s*€\s*$', price_as_str.replace(',', '.').replace(nnbsp, ''))
|
||||
assert match, 'unexpected price string (%s)' % price_as_str
|
||||
# print(match['sign'], match['numbers'])
|
||||
price_as_float = float("%s%s" % (match['sign'], match['numbers']))
|
||||
return price_as_float
|
||||
if match:
|
||||
# print(match['sign'], match['numbers'])
|
||||
price_as_float = float("%s%s" % (match['sign'], match['numbers']))
|
||||
return price_as_float
|
||||
else:
|
||||
# handle the case 'Plus disponible' (meaning 'no price available')
|
||||
match = re.match(r'^\s*Plus\s+disponible\s*$', price_as_str)
|
||||
if match:
|
||||
return None
|
||||
assert match, 'unexpected price string (%s)' % price_as_str
|
||||
|
||||
def _get_module_selected_items(self, module_root_element: HtmlElement) -> List[HtmlElement]:
|
||||
logging.debug('getting selected items for module %s' % module_root_element)
|
||||
|
|
@ -1156,12 +1183,16 @@ class DellConfiguratorParser2025(DellConfiguratorParser):
|
|||
# print(label, price)
|
||||
# Ajout d'une barette de 128Go 2667 Mhz LRDIMM
|
||||
ram_option = None
|
||||
|
||||
# examples:
|
||||
# Mémoire 16 Go DDR4 à 2933MHz (1x16Go)
|
||||
# 32 Go RDIMM, 6 400 MT/s, double rangée
|
||||
# 16 Go RDIMM 5600 MT/s, une rangée
|
||||
# match = re.match(r'^Mémoire (?P<num_gb>[0-9]+) Go DDR[\-]?4 à (?P<num_mhz>[0-9]+)MHz \((?P<num_dimms>[0-9]+)x(?P<num_gb_per_dimm>[0-9]+)Go\)', item_label.replace('Mémoire de base : ', '').replace('De base ', ''))
|
||||
# match = re.match(r'^(?P<num_gb>[0-9]+) Go (de mémoire|) RDIMM, (?P<num_mts>[0-9] ?[0-9]+)\s+MT/s, (une|double) rangée', item_label)
|
||||
match = re.match(r'^(?P<num_gb_per_dimm>[0-9]+)\s+Go(\s+de mémoire|)\s+RDIMM,\s+(?P<num_mts>[0-9]\s?[0-9]+)\s+MT/s,\s+(une|double)\s+rangée', label)
|
||||
match = re.match(r'^(?P<num_gb_per_dimm>[0-9]+)\s+Go(\s+de mémoire|)\s+RDIMM([,])?\s+(?P<num_mts>[0-9]\s?[0-9]+)\s+MT/s,\s+(une|double)\s+rangée', label)
|
||||
if match is None:
|
||||
# handle 'Mémoire RDIMM 128 Go, 5 600 MT/, 4 doubles rangées, BASE 32 Go'
|
||||
match = re.match(r'^Mémoire RDIMM\s+(?P<num_gb_per_dimm>[0-9]+)\s+Go,\s+(?P<num_mts>[0-9]\s?[0-9]+)\s+MT/(s)?,\s+[0-9]+\s+(une|double)s?\s+rangées?,\s+BASE\s+[0-9]+\s+Go', label)
|
||||
assert match, 'unhandled label : %s' % label
|
||||
# DDR5 RDIMM 6400 MT/s
|
||||
num_mts = match['num_mts']
|
||||
|
|
@ -1236,15 +1267,17 @@ class DellConfiguratorParser2025(DellConfiguratorParser):
|
|||
# initialize cpu
|
||||
item_label = self._get_module_default_item_label('Processeur', html_root)
|
||||
# Processeur Intel Xeon Silver 4208 2.1GHz,11M Cache,9.60GT/s, 2UPI,No Turbo, HT,8C/16T (85W) - DDR4-2400
|
||||
# Processeur Intel® Xeon® Silver 4514Y 2 GHz, 16C/32T, 16 GT/s, cache 30 Mo, Turbo, HT (150 W), mémoire DDR5 à 4 400 MHz
|
||||
# match = re.match(r'^Processeur Intel[®]? Xeon[®]? 6 (?P<cpu_class>Silver|Gold|Platinium|Performance) (?P<cpu_number>[0-9][0-9][0-9][0-9][PRLYU]?).*', item_label)
|
||||
match = re.match(r'^Processeur Intel[®]? Xeon[®]?\s+6\s+(?P<cpu_class>Silver|Gold|Platinium|Performance)\s+(?P<cpu_number>[0-9][0-9][0-9][0-9][PRLYU]?).*', item_label)
|
||||
match = re.match(r'^Processeur\s+Intel[®]?\s+Xeon[®]?\s+(6\s+)?(?P<cpu_class>Silver|Gold|Platinium|Performance)\s+(?P<cpu_number>[0-9][0-9][0-9][0-9][PRLYU]?).*', item_label)
|
||||
if match:
|
||||
cpu_id = "intel-xeon-%s-%s" % (match['cpu_class'].lower(), match['cpu_number'].lower())
|
||||
|
||||
if not match:
|
||||
# Processeur AMD EPYC 9115 2,60 GHz, 16C/32T, 64 Mo de cache (125 W), mémoire DDR5 à 6400 MT/s
|
||||
match = re.match(r'^Processeur AMD EPYC\s+(?P<cpu_number>[0-9][0-9][0-9][0-9]).*', item_label)
|
||||
cpu_id = "amd-epyc-%s" % (match['cpu_number'].lower(), )
|
||||
if match:
|
||||
cpu_id = "amd-epyc-%s" % (match['cpu_number'].lower(), )
|
||||
assert match, 'unhandled label : %s' % item_label
|
||||
|
||||
# print(match['cpu_class'], match['cpu_number'])
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ def plot_configs(configs: List[Config], xaxis_def: ConfigAxisDef, yaxis_def: Con
|
|||
'cascadelake': 0.8,
|
||||
'icelake': 0.9,
|
||||
'sapphire rapids': 1.0,
|
||||
'emerald rapids': 1.0,
|
||||
'granite rapids': 1.0,
|
||||
'rome': 0.2,
|
||||
'milan': 0.4,
|
||||
|
|
@ -170,6 +171,7 @@ def plot_configs(configs: List[Config], xaxis_def: ConfigAxisDef, yaxis_def: Con
|
|||
'dell-poweredge-r630': 0.6,
|
||||
'dell-poweredge-r640': 0.6,
|
||||
'dell-poweredge-r6525': 0.5,
|
||||
'dell-poweredge-r760xa': 0.55,
|
||||
'dell-poweredge-r670': 0.6,
|
||||
'dell-poweredge-r6725': 0.0,
|
||||
'dell-poweredge-c4310': 0.6,
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ class Test(unittest.TestCase):
|
|||
logging.info('Starting test_dell2_configs')
|
||||
configurators = [
|
||||
HtmlConfigurator(Path('catalogs/dell/2025-10/20251020 - Cat2 Conf 2-2-07_ Dell Poweredge R670.html'), DellConfiguratorParser2025()),
|
||||
HtmlConfigurator(Path('catalogs/dell/2025-10/20251022 - Cat3 Conf 3-2-01 _ Poweredge R760xa.html'), DellConfiguratorParser2025()),
|
||||
HtmlConfigurator(Path('catalogs/dell/2025-10/20251022 - Cat2 Conf 2-2-09_ Dell Poweredge R6725.html'), DellConfiguratorParser2025()),
|
||||
]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue