microarchitectures: readable names for AArch64 vendors (#13825)
Vendors for ARM come out of `/proc/cpuinfo` as hex numbers instead of readable strings. - Add support for associating vendor names with the hex numbers. - Also move these mappings from Python code to `microarchitectures.json` - Move darwin feature name mappings to `microarchitectures.json` as well
This commit is contained in:
parent
a4ff92e42d
commit
5eca4f1470
4 changed files with 103 additions and 30 deletions
|
@ -13,6 +13,7 @@
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from .microarchitecture import generic_microarchitecture, targets
|
from .microarchitecture import generic_microarchitecture, targets
|
||||||
|
from .schema import targets_json
|
||||||
|
|
||||||
#: Mapping from operating systems to chain of commands
|
#: Mapping from operating systems to chain of commands
|
||||||
#: to obtain a dictionary of raw info on the current cpu
|
#: to obtain a dictionary of raw info on the current cpu
|
||||||
|
@ -108,23 +109,39 @@ def sysctl(*args):
|
||||||
'model': sysctl('-n', 'machdep.cpu.model'),
|
'model': sysctl('-n', 'machdep.cpu.model'),
|
||||||
'model name': sysctl('-n', 'machdep.cpu.brand_string')
|
'model name': sysctl('-n', 'machdep.cpu.brand_string')
|
||||||
}
|
}
|
||||||
|
|
||||||
# Super hacky way to deal with slight representation differences
|
|
||||||
# Would be better to somehow consider these "identical"
|
|
||||||
if 'sse4.1' in info['flags']:
|
|
||||||
info['flags'] += ' sse4_1'
|
|
||||||
if 'sse4.2' in info['flags']:
|
|
||||||
info['flags'] += ' sse4_2'
|
|
||||||
if 'avx1.0' in info['flags']:
|
|
||||||
info['flags'] += ' avx'
|
|
||||||
if 'clfsopt' in info['flags']:
|
|
||||||
info['flags'] += ' clflushopt'
|
|
||||||
if 'xsave' in info['flags']:
|
|
||||||
info['flags'] += ' xsavec xsaveopt'
|
|
||||||
|
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
|
||||||
|
def adjust_raw_flags(info):
|
||||||
|
"""Adjust the flags detected on the system to homogenize
|
||||||
|
slightly different representations.
|
||||||
|
"""
|
||||||
|
# Flags detected on Darwin turned to their linux counterpart
|
||||||
|
flags = info.get('flags', [])
|
||||||
|
d2l = targets_json['conversions']['darwin_flags']
|
||||||
|
for darwin_flag, linux_flag in d2l.items():
|
||||||
|
if darwin_flag in flags:
|
||||||
|
info['flags'] += ' ' + linux_flag
|
||||||
|
|
||||||
|
|
||||||
|
def adjust_raw_vendor(info):
|
||||||
|
"""Adjust the vendor field to make it human readable"""
|
||||||
|
if 'CPU implementer' not in info:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Mapping numeric codes to vendor (ARM). This list is a merge from
|
||||||
|
# different sources:
|
||||||
|
#
|
||||||
|
# https://github.com/karelzak/util-linux/blob/master/sys-utils/lscpu-arm.c
|
||||||
|
# https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile
|
||||||
|
# https://github.com/gcc-mirror/gcc/blob/master/gcc/config/aarch64/aarch64-cores.def
|
||||||
|
# https://patchwork.kernel.org/patch/10524949/
|
||||||
|
arm_vendors = targets_json['conversions']['arm_vendors']
|
||||||
|
arm_code = info['CPU implementer']
|
||||||
|
if arm_code in arm_vendors:
|
||||||
|
info['CPU implementer'] = arm_vendors[arm_code]
|
||||||
|
|
||||||
|
|
||||||
def raw_info_dictionary():
|
def raw_info_dictionary():
|
||||||
"""Returns a dictionary with information on the cpu of the current host.
|
"""Returns a dictionary with information on the cpu of the current host.
|
||||||
|
|
||||||
|
@ -139,6 +156,8 @@ def raw_info_dictionary():
|
||||||
warnings.warn(str(e))
|
warnings.warn(str(e))
|
||||||
|
|
||||||
if info:
|
if info:
|
||||||
|
adjust_raw_flags(info)
|
||||||
|
adjust_raw_vendor(info)
|
||||||
break
|
break
|
||||||
|
|
||||||
return info
|
return info
|
||||||
|
|
|
@ -1134,14 +1134,13 @@
|
||||||
},
|
},
|
||||||
"clang": {
|
"clang": {
|
||||||
"versions": ":",
|
"versions": ":",
|
||||||
"family": "aarch64",
|
"flags": "-march=armv8-a -mtune=generic"
|
||||||
"flags": "-march={family} -mcpu=generic"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"thunderx2": {
|
"thunderx2": {
|
||||||
"from": "aarch64",
|
"from": "aarch64",
|
||||||
"vendor": "0x43",
|
"vendor": "Cavium",
|
||||||
"features": [
|
"features": [
|
||||||
"fp",
|
"fp",
|
||||||
"asimd",
|
"asimd",
|
||||||
|
@ -1174,15 +1173,21 @@
|
||||||
"flags": "-mcpu=thunderx2t99"
|
"flags": "-mcpu=thunderx2t99"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"clang": {
|
"clang": [
|
||||||
"versions": ":",
|
{
|
||||||
"flags": "-march=armv8-a -mcpu=generic"
|
"versions": "3.9:4.9",
|
||||||
}
|
"flags": "-march=armv8.1-a+crc+crypto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "5:",
|
||||||
|
"flags": "-mcpu=thunderx2t99"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"a64fx": {
|
"a64fx": {
|
||||||
"from": "aarch64",
|
"from": "aarch64",
|
||||||
"vendor": "0x46",
|
"vendor": "Fujitsu",
|
||||||
"features": [
|
"features": [
|
||||||
"fp",
|
"fp",
|
||||||
"asimd",
|
"asimd",
|
||||||
|
@ -1217,17 +1222,23 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"versions": "7:7.9",
|
"versions": "7:7.9",
|
||||||
"flags": "-arch=armv8.2a+crc+crypt+fp16"
|
"flags": "-march=armv8.2a+crc+crypto+fp16"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"versions": "8:",
|
"versions": "8:",
|
||||||
"flags": "-arch=armv8.2a+crc+aes+sh2+fp16+sve -msve-vector-bits=512"
|
"flags": "-march=armv8.2a+crc+aes+sha2+fp16+sve -msve-vector-bits=512"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"clang": {
|
"clang": [
|
||||||
"versions": ":",
|
{
|
||||||
"flags": "-march=armv8-a -mcpu=generic"
|
"versions": "3.9:4.9",
|
||||||
}
|
"flags": "-march=armv8.2-a+crc+crypto+fp16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "5:",
|
||||||
|
"flags": "-march=armv8.2-a+crc+crypto+fp16+sve"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"arm": {
|
"arm": {
|
||||||
|
@ -1313,5 +1324,34 @@
|
||||||
"aarch64"
|
"aarch64"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"conversions": {
|
||||||
|
"description": "Conversions that map some platform specific values to canonical values",
|
||||||
|
"arm_vendors": {
|
||||||
|
"0x41": "ARM",
|
||||||
|
"0x42": "Broadcom",
|
||||||
|
"0x43": "Cavium",
|
||||||
|
"0x44": "DEC",
|
||||||
|
"0x46": "Fujitsu",
|
||||||
|
"0x48": "HiSilicon",
|
||||||
|
"0x49": "Infineon Technologies AG",
|
||||||
|
"0x4d": "Motorola",
|
||||||
|
"0x4e": "Nvidia",
|
||||||
|
"0x50": "APM",
|
||||||
|
"0x51": "Qualcomm",
|
||||||
|
"0x53": "Samsung",
|
||||||
|
"0x56": "Marvell",
|
||||||
|
"0x61": "Apple",
|
||||||
|
"0x66": "Faraday",
|
||||||
|
"0x68": "HXT",
|
||||||
|
"0x69": "Intel"
|
||||||
|
},
|
||||||
|
"darwin_flags": {
|
||||||
|
"sse4.1": "sse4_1",
|
||||||
|
"sse4.2": "sse4_2",
|
||||||
|
"avx1.0": "avx",
|
||||||
|
"clfsopt": "clflushopt",
|
||||||
|
"xsave": "xsavec xsaveopt"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,21 @@
|
||||||
'additionalProperties': False
|
'additionalProperties': False
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
'conversions': {
|
||||||
|
'type': 'object',
|
||||||
|
'properties': {
|
||||||
|
'description': {
|
||||||
|
'type': 'string'
|
||||||
|
},
|
||||||
|
'arm_vendors': {
|
||||||
|
'type': 'object',
|
||||||
|
},
|
||||||
|
'darwin_flags': {
|
||||||
|
'type': 'object'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'additionalProperties': False
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,7 @@ def test_target_json_schema():
|
||||||
'-march=icelake-client -mtune=icelake-client'),
|
'-march=icelake-client -mtune=icelake-client'),
|
||||||
('zen2', 'clang', '9.0.0', '-march=znver2 -mtune=znver2'),
|
('zen2', 'clang', '9.0.0', '-march=znver2 -mtune=znver2'),
|
||||||
('power9le', 'clang', '8.0.0', '-march=ppc64le -mcpu=pwr9'),
|
('power9le', 'clang', '8.0.0', '-march=ppc64le -mcpu=pwr9'),
|
||||||
('thunderx2', 'clang', '6.0.0', '-march=armv8-a -mcpu=generic'),
|
('thunderx2', 'clang', '6.0.0', '-mcpu=thunderx2t99'),
|
||||||
# Test Intel on Intel CPUs
|
# Test Intel on Intel CPUs
|
||||||
('sandybridge', 'intel', '17.0.2', '-march=corei7-avx -mtune=corei7-avx'),
|
('sandybridge', 'intel', '17.0.2', '-march=corei7-avx -mtune=corei7-avx'),
|
||||||
('sandybridge', 'intel', '18.0.5',
|
('sandybridge', 'intel', '18.0.5',
|
||||||
|
|
Loading…
Reference in a new issue