Skip to content

Commit 2e60c2c

Browse files
George Bisbasmloubout
authored andcommitted
compiler: initial support for Cortex
docs: Minor fstring changes
1 parent 2e6c705 commit 2e60c2c

2 files changed

Lines changed: 33 additions & 15 deletions

File tree

devito/arch/archinfo.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
# Intel CPUs
2525
'INTEL64', 'SNB', 'IVB', 'HSW', 'BDW', 'KNL', 'KNL7210',
2626
'SKX', 'KLX', 'CLX', 'CLK', 'SPR',
27+
# AMD CPUs
28+
'AMD',
2729
# ARM CPUs
28-
'AMD', 'ARM', 'AppleArm', 'M1', 'M2', 'M3',
30+
'ARM', 'AppleArm', 'M1', 'M2', 'M3',
2931
'Graviton', 'GRAVITON2', 'GRAVITON3', 'GRAVITON4',
32+
'Cortex',
3033
# Other legacy CPUs
3134
'POWER8', 'POWER9',
3235
# Generic GPUs
@@ -226,7 +229,7 @@ def homogenise_gpus(gpu_infos):
226229
for i in ['total', 'free', 'used']:
227230
def make_cbk(i):
228231
def cbk(deviceid=0):
229-
info_cmd = ['nvidia-smi', '--query-gpu=memory.%s' % i, '--format=csv']
232+
info_cmd = ['nvidia-smi', f'--query-gpu=memory.{i}', '--format=csv']
230233
proc = Popen(info_cmd, stdout=PIPE, stderr=DEVNULL)
231234
raw_info = str(proc.stdout.read())
232235

@@ -248,7 +251,7 @@ def cbk(deviceid=0):
248251

249252
return cbk
250253

251-
gpu_info['mem.%s' % i] = make_cbk(i)
254+
gpu_info[f'mem.{i}'] = make_cbk(i)
252255

253256
return gpu_info
254257

@@ -303,10 +306,10 @@ def make_cbk(i):
303306
def cbk(deviceid=0):
304307
try:
305308
# Should only contain Used and total
306-
assert len(info['card%s' % deviceid]) == 2
307-
used = [int(v) for k, v in info['card%s' % deviceid].items()
309+
assert len(info[f'card{deviceid}']) == 2
310+
used = [int(v) for k, v in info[f'card{deviceid}'].items()
308311
if 'Used' in k][0]
309-
total = [int(v) for k, v in info['card%s' % deviceid].items()
312+
total = [int(v) for k, v in info[f'card{deviceid}'].items()
310313
if 'Used' not in k][0]
311314
free = total - used
312315
return {'total': total, 'free': free, 'used': used}[i]
@@ -318,7 +321,7 @@ def cbk(deviceid=0):
318321

319322
return cbk
320323

321-
gpu_info['mem.%s' % i] = make_cbk(i)
324+
gpu_info[f'mem.{i}'] = make_cbk(i)
322325

323326
gpu_infos['architecture'] = 'AMD'
324327
return gpu_info
@@ -737,7 +740,7 @@ def numa_domains(self):
737740
try:
738741
return int(lscpu()['NUMA node(s)'])
739742
except (ValueError, TypeError, KeyError):
740-
warning("NUMA domain count autodetection failed")
743+
warning("NUMA domain count autodetection failed, assuming 1")
741744
return 1
742745

743746
@cached_property
@@ -793,6 +796,21 @@ def march(self):
793796
return 'neoverse-n1'
794797

795798

799+
class Cortex(Arm):
800+
801+
@property
802+
def version(self):
803+
return int(self.name.split('cortexa')[-1])
804+
805+
@cached_property
806+
def march(self):
807+
return 'armv8-a+crc+simd'
808+
809+
@cached_property
810+
def mtune(self):
811+
return f'cortex-a{self.version}'
812+
813+
796814
class Amd(Cpu64):
797815

798816
known_isas = ('cpp', 'sse', 'avx', 'avx2')
@@ -1007,6 +1025,8 @@ def march(cls):
10071025
M1 = AppleArm('m1')
10081026
M2 = AppleArm('m2')
10091027
M3 = AppleArm('m3')
1028+
CORTEX = Cortex('cortex')
1029+
CORTEXA76 = Cortex('cortexa76')
10101030

10111031
AMD = Amd('amd')
10121032

devito/arch/compiler.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
call_capture_output as _call_capture_output)
1515

1616
from devito.arch import (AMDGPUX, Cpu64, AppleArm, NvidiaDevice, POWER8, POWER9,
17-
Graviton, IntelDevice, get_nvidia_cc, check_cuda_runtime,
18-
get_m1_llvm_path)
17+
Graviton, Cortex, IntelDevice, get_nvidia_cc,
18+
check_cuda_runtime, get_m1_llvm_path)
1919
from devito.exceptions import CompilationError
2020
from devito.logger import debug, warning
2121
from devito.parameters import configuration
@@ -443,6 +443,9 @@ def __init_finalize__(self, **kwargs):
443443
self.cflags = ['-mcpu=native'] + self.cflags
444444
elif isinstance(platform, Graviton):
445445
self.cflags = ['-mcpu=%s' % platform.march] + self.cflags
446+
elif isinstance(platform, Cortex):
447+
self.cflags += ['-march=%s' % platform.march]
448+
self.cflags += ['-mtune=%s' % platform.mtune]
446449
else:
447450
self.cflags = ['-march=native'] + self.cflags
448451

@@ -468,11 +471,6 @@ class ArmCompiler(GNUCompiler):
468471

469472
def __init_finalize__(self, **kwargs):
470473
GNUCompiler.__init_finalize__(self, **kwargs)
471-
platform = kwargs.pop('platform', configuration['platform'])
472-
473-
# Graviton flag
474-
if isinstance(platform, Graviton):
475-
self.cflags += ['-mcpu=%s' % platform.march]
476474

477475

478476
class ClangCompiler(Compiler):

0 commit comments

Comments
 (0)