Mentions légales du service

Skip to content
Snippets Groups Projects
Commit a174541e authored by POUILLOUX Laurent's avatar POUILLOUX Laurent
Browse files

Merge branch 'rework_wiki_hw_acc' into 'master'

[wiki:hw] rework the accelerator tables generation

See merge request !536
parents 22b3d9a9 b4291cab
No related branches found
No related tags found
1 merge request!536[wiki:hw] rework the accelerator tables generation
Pipeline #859853 passed
...@@ -33,7 +33,7 @@ class G5KHardwareGenerator < WikiGenerator ...@@ -33,7 +33,7 @@ class G5KHardwareGenerator < WikiGenerator
'ssd_models' => {}, 'ssd_models' => {},
'acc_families' => {}, 'acc_families' => {},
'acc_models' => {}, 'acc_models' => {},
'acc_cores' => {}, 'gpu_cores' => {},
'node_models' => {} 'node_models' => {}
} }
...@@ -174,88 +174,47 @@ class G5KHardwareGenerator < WikiGenerator ...@@ -174,88 +174,47 @@ class G5KHardwareGenerator < WikiGenerator
data['ssd_models'][k][site_uid] += v data['ssd_models'][k][site_uid] += v
} }
# Accelerators # Accelerators
other_dev = node_hash['other_devices'] { GPU: node_hash.has_key?('gpu_devices') ? node_hash['gpu_devices'] : {},
fpga_families = {} MIC: node_hash.has_key?('mic') ? {'mic0': node_hash['mic'] } : {},
fpga_details = {} FPGA: node_hash.has_key?('other_devices') ? node_hash['other_devices'].select{ |k,_| k =~ /^fpga\d+$/ } : {}
if other_dev and other_dev['fpga0'] }.each do |acc_type, acc_data|
fpga = other_dev['fpga0'] acc_data.each_value do |acc|
vendor_type = "#{fpga['vendor']} #{fpga['type'].upcase}" case acc_type
vendor_model = "#{fpga['vendor']} #{fpga['model']}" when :GPU
fpga_families[[vendor_type]] = 1 vendor = acc['vendor']
mem = RefRepo::Utils.get_as_gb(fpga['memory']) model = GPURef.model2shortname(acc['model'])
mem_key = { text: "#{mem}GB", sort: mem } cores = acc['cores']
cc_key = { text: "N/A", sort: 0 } compute_capability = acc.has_key?('compute_capability') ? acc['compute_capability'] : "N/A"
type_key = { text: vendor_type, sort: vendor_type } mem = RefRepo::Utils.get_as_gb(acc['memory'])
fpga_details[[vendor_model, type_key, cc_key, mem_key]] = [fpga['count'], fpga['core']] when :MIC
end vendor = acc['mic_vendor']
model = acc['mic_model']
m = node_hash['mic'] compute_capability = { text: "N/A", sort: 0 }
mic_families = {} mem = RefRepo::Utils.get_as_gb(acc['mic_memory'])
mic_details = {} when :FPGA
if m and m['mic'] vendor = acc['vendor']
vendor_mic = "#{m['mic_vendor']} MIC" model = acc['model']
vendor_model = "#{m['mic_vendor']} #{m['mic_model']}" compute_capability = { text: "N/A", sort: 0 }
mic_families[[vendor_mic]] = m['mic_count'] mem = RefRepo::Utils.get_as_gb(acc['memory'])
mem = RefRepo::Utils.get_as_gb(m['mic_memory'])
mem_key = { text: "#{mem}GB", sort: mem }
cc_key = { text: "N/A", sort: 0 }
type_key = { text: vendor_mic, sort: vendor_mic }
mic_details[[vendor_model, type_key, cc_key, mem_key]] = [m['mic_count'], m['mic_cores']]
end
lg = node_hash['gpu_devices']
gpu_families = {}
gpu_details = {}
unless lg.nil?
lg.each { |g|
d = g[1]
vendor_families = "#{d['vendor']} GPU"
vendor = d['vendor']
cmodel = d['model']
model = GPURef.model2shortname(cmodel)
nbcores = d['cores']
compute_capability = d['compute_capability']
cc_key = { text: compute_capability || "N/A", sort: compute_capability }
mem = RefRepo::Utils.get_as_gb(d['memory'])
mem_key = { text: "#{mem}GB", sort: mem }
family = gpu_families[[vendor_families]]
if family.nil?
gpu_families[[vendor_families]] = 1
else
gpu_families[[vendor_families]] += 1
end end
key = [vendor, acc_type.to_s]
init(data, 'acc_families', key)
data['acc_families'][key][site_uid] += 1
type_key = { text: vendor_families, sort: vendor_families } key = [vendor, acc_type.to_s, model, { text: "#{mem}GB", sort: mem }, compute_capability]
gpu_key = ["#{vendor} #{model}", type_key, cc_key, mem_key] init(data, 'acc_models', key)
details = gpu_details[gpu_key] data['acc_models'][key][site_uid] += 1
if details.nil? if acc_type == :GPU
gpu_details[gpu_key] = [1, nbcores] key = [vendor, model, { text: "#{mem}GB", sort: mem }, compute_capability]
else init(data, 'gpu_cores', key)
gpu_details[gpu_key] = [details[0]+1, details[1]+nbcores] data['gpu_cores'][key][site_uid] += cores
end end
} end
end end
gpu_families.merge(mic_families).merge(fpga_families).sort.to_h.each { |k, v|
init(data, 'acc_families', k)
data['acc_families'][k][site_uid] += v
}
gpu_details.merge(mic_details).merge(fpga_details).sort.to_h.each { |k, v|
init(data, 'acc_models', k)
data['acc_models'][k][site_uid] += v[0]
}
gpu_details.merge(mic_details).sort.to_h.each { |k, v|
init(data, 'acc_cores', k)
data['acc_cores'][k][site_uid] += v[1]
}
# Nodes
key = [cluster_hash['model']] key = [cluster_hash['model']]
init(data, 'node_models', key) init(data, 'node_models', key)
data['node_models'][key][site_uid] += 1 data['node_models'][key][site_uid] += 1
...@@ -299,15 +258,15 @@ class G5KHardwareGenerator < WikiGenerator ...@@ -299,15 +258,15 @@ class G5KHardwareGenerator < WikiGenerator
generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'pmem_size')) generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'pmem_size'))
generated_content += "\n= Accelerators (GPU, Xeon Phi, FPGA) =" generated_content += "\n= Accelerators (GPU, Xeon Phi, FPGA) ="
generated_content += "\n== Accelerator families ==\n" generated_content += "\n== Accelerator counts per type ==\n"
table_columns = ['Accelerator family'] + sites + ['Accelerators total'] table_columns = ['Vendor', 'Type'] + sites + ['Accelerators total']
generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'acc_families')) generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'acc_families'))
table_columns = ['Accelerator model', 'Family', 'Compute capability', 'RAM size'] + sites + ['Accelerators total'] table_columns = ['Vendor', 'Type', 'Model', 'Memory', 'Compute capability'] + sites + ['Accelerators total']
generated_content += "\n== Accelerator models ==\n" generated_content += "\n== Accelerator counts per model ==\n"
generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'acc_models')) generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'acc_models'))
generated_content += "\n== Accelerator cores ==\n" generated_content += "\n== GPU core counts per GPU model ==\n"
table_columns = ['Accelerator model', 'Family', 'Compute capability', 'RAM size'] + sites + ['Cores total'] table_columns = ['Vendor', 'Model', 'Memory', 'Compute capability'] + sites + ['Cores total']
generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'acc_cores')) generated_content += MW.generate_table(table_options, table_columns, get_table_data(data, 'gpu_cores'))
generated_content += "\n= Networking =\n" generated_content += "\n= Networking =\n"
generated_content += "\n== Network interconnects ==\n" generated_content += "\n== Network interconnects ==\n"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment