diff --git a/.github/workflows/docker-bases.yml b/.github/workflows/docker-bases.yml index 28c24a1813..b84f0c7f13 100644 --- a/.github/workflows/docker-bases.yml +++ b/.github/workflows/docker-bases.yml @@ -246,5 +246,5 @@ jobs: push: true target: "hip" build-args: | - ROCM_VERSION=6.3.4 + ROCM_VERSION=7.0.2 tags: devitocodes/bases:amd-hip diff --git a/devito/arch/compiler.py b/devito/arch/compiler.py index 5256a19489..36b47eecd2 100644 --- a/devito/arch/compiler.py +++ b/devito/arch/compiler.py @@ -760,6 +760,7 @@ class HipCompiler(Compiler): _default_cpp = True def __init_finalize__(self, **kwargs): + self.cflags.append('-Wno-unused-result') if configuration['mpi']: # We rather use `hipcc` to compile MPI, but for this we have to @@ -773,6 +774,23 @@ def __init_finalize__(self, **kwargs): self.src_ext = 'cpp' + @property + def version(self): + try: + res = run(['hipconfig', "--version"], stdout=PIPE, stderr=DEVNULL) + ver = res.stdout.decode("utf-8").split('-')[0] + ver = Version(ver) + except (UnicodeDecodeError, OSError): + ver = Version("0") + return ver + + @property + def _cxxstd(self): + if self.version >= Version("7.0.0"): + return 'c++17' + else: + return 'c++14' + def __lookup_cmds__(self): self.CC = 'hipcc' self.CXX = 'hipcc' diff --git a/devito/ir/cgen/printer.py b/devito/ir/cgen/printer.py index bd740adab7..d64889069a 100644 --- a/devito/ir/cgen/printer.py +++ b/devito/ir/cgen/printer.py @@ -92,6 +92,9 @@ def prec_literal(self, expr): def func_literal(self, expr): return self._func_literals.get(self._prec(expr), '') + def ns(self, expr): + return self._ns + def func_prefix(self, expr, mfunc=False): prefix = self._func_prefix.get(self._prec(expr), '') if mfunc: @@ -193,7 +196,7 @@ def _print_math_func(self, expr, nest=False, known=None): else: args = ', '.join([self._print(arg) for arg in expr.args]) - return f'{self._ns}{cname}({args})' + return f'{self.ns(expr)}{cname}({args})' def _print_Pow(self, expr): # Completely reimplement `_print_Pow` from sympy, since it doesn't @@ -207,11 +210,11 @@ def _print_Pow(self, expr): return self._print_Float(Float(1.0)) + '/' + \ self.parenthesize(expr.base, PREC) elif equal_valued(expr.exp, 0.5): - return f'{self._ns}sqrt{suffix}({base})' + return f'{self.ns(expr)}sqrt{suffix}({base})' elif expr.exp == S.One/3 and self.standard != 'C89': - return f'{self._ns}cbrt{suffix}({base})' + return f'{self.ns(expr)}cbrt{suffix}({base})' else: - return f'{self._ns}pow{suffix}({base}, {self._print(expr.exp)})' + return f'{self.ns(expr)}pow{suffix}({base}, {self._print(expr.exp)})' def _print_SafeInv(self, expr): """Print a SafeInv as a C-like division with a check for zero.""" @@ -241,7 +244,7 @@ def _print_Mul(self, expr): def _print_fmath_func(self, name, expr): args = ",".join([self._print(i) for i in expr.args]) func = f'{self.func_prefix(expr, mfunc=True)}{name}{self.func_literal(expr)}' - return f"{self._ns}{func}({args})" + return f"{self.ns(expr)}{func}({args})" def _print_Min(self, expr): if len(expr.args) > 2: @@ -391,7 +394,7 @@ def _print_SizeOf(self, expr): return f'sizeof({self._print(expr.intype)}{self._print(expr.stars)})' def _print_MathFunction(self, expr): - return f"{self._ns}{self._print_DefFunction(expr)}" + return f"{self.ns(expr)}{self._print_DefFunction(expr)}" def _print_Fallback(self, expr): return expr.__str__() diff --git a/docker/Dockerfile.amd b/docker/Dockerfile.amd index 233b52e59a..907d6d9c06 100644 --- a/docker/Dockerfile.amd +++ b/docker/Dockerfile.amd @@ -3,11 +3,11 @@ # Based on https://github.com/amd/InfinityHub-CI/tree/main/base-gpu-mpi-rocm-docker ############################################################## -ARG ROCM_VERSION=6.3.2 +ARG ROCM_VERSION=7.0.2 FROM rocm/dev-ubuntu-22.04:${ROCM_VERSION}-complete AS sdk-base -ARG UCX_BRANCH="v1.16.0" +ARG UCX_BRANCH="v1.17.x" ARG OMPI_BRANCH="v5.0.x" # Update and Install basic Linux development tools