diff options
author | BOUDAOUD34 <114594090+BOUDAOUD34@users.noreply.github.com> | 2024-09-27 10:19:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-27 10:19:38 +0200 |
commit | 13feee836439d84a44892bba298b692690c48fd3 (patch) | |
tree | 66900de672568bed63b0759c0a59d5c87671956f /var | |
parent | 62abcfb05f9678fa3de89ba67592f4edc215afba (diff) | |
download | spack-13feee836439d84a44892bba298b692690c48fd3.tar.gz spack-13feee836439d84a44892bba298b692690c48fd3.tar.bz2 spack-13feee836439d84a44892bba298b692690c48fd3.tar.xz spack-13feee836439d84a44892bba298b692690c48fd3.zip |
CP2K: fix .mod file incompatibility on ROCm by using USE, INTRINSIC d… (#45848)
Co-authored-by: U-PALLAS\boudaoud <boudaoud@pc44.pallas.cines.fr>
Diffstat (limited to 'var')
-rw-r--r-- | var/spack/repos/builtin/packages/cp2k/package.py | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py index e71368a087..09e25d34d2 100644 --- a/var/spack/repos/builtin/packages/cp2k/package.py +++ b/var/spack/repos/builtin/packages/cp2k/package.py @@ -374,15 +374,31 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage): # https://github.com/cp2k/cp2k/issues/3688 patch("d4-dispersion-bugfix-2024.3.patch", when="@2024.3") - # Patch for an undefined constant due to incompatible changes in ELPA - @when("@9.1:2022.2 +elpa") def patch(self): - if self.spec["elpa"].satisfies("@2022.05.001:"): - filter_file( - r"ELPA_2STAGE_REAL_INTEL_GPU", - "ELPA_2STAGE_REAL_INTEL_GPU_SYCL", - "src/fm/cp_fm_elpa.F", - ) + # Patch for an undefined constant due to incompatible changes in ELPA + if self.spec.satisfies("@9.1:2022.2 +elpa"): + if self.spec["elpa"].satisfies("@2022.05.001:"): + filter_file( + r"ELPA_2STAGE_REAL_INTEL_GPU", + "ELPA_2STAGE_REAL_INTEL_GPU_SYCL", + "src/fm/cp_fm_elpa.F", + ) + + # Patch for resolving .mod file conflicts in ROCm by implementing 'USE, INTRINSIC' + if self.spec.satisfies("+rocm"): + for directory, subdirectory, files in os.walk(os.getcwd()): + for i in files: + file_path = os.path.join(directory, i) + filter_file("USE ISO_C_BINDING", "USE,INTRINSIC :: ISO_C_BINDING", file_path) + filter_file( + "USE ISO_FORTRAN_ENV", "USE,INTRINSIC :: ISO_FORTRAN_ENV", file_path + ) + filter_file("USE omp_lib", "USE,INTRINSIC :: omp_lib", file_path) + filter_file("USE OMP_LIB", "USE,INTRINSIC :: OMP_LIB", file_path) + filter_file("USE iso_c_binding", "USE,INTRINSIC :: iso_c_binding", file_path) + filter_file( + "USE iso_fortran_env", "USE,INTRINSIC :: iso_fortran_env", file_path + ) def url_for_version(self, version): url = "https://github.com/cp2k/cp2k/releases/download/v{0}/cp2k-{0}.tar.bz2" @@ -410,6 +426,7 @@ class MakefileBuilder(makefile.MakefileBuilder): "cce": ["-O2"], "xl": ["-O3"], "aocc": ["-O2"], + "rocmcc": ["-O1"], } dflags = ["-DNDEBUG"] if spec.satisfies("@:2023.2") else [] @@ -451,7 +468,7 @@ class MakefileBuilder(makefile.MakefileBuilder): "-ffree-line-length-none", "-ggdb", # make sure we get proper Fortran backtraces ] - elif spec.satisfies("%aocc"): + elif spec.satisfies("%aocc") or spec.satisfies("%rocmcc"): fcflags += ["-ffree-form", "-Mbackslash"] elif spec.satisfies("%pgi") or spec.satisfies("%nvhpc"): fcflags += ["-Mfreeform", "-Mextend"] @@ -556,16 +573,7 @@ class MakefileBuilder(makefile.MakefileBuilder): ) ) else: - libs.append( - join_path( - elpa.libs.directories[0], - ( - "libelpa{elpa_suffix}.{dso_suffix}".format( - elpa_suffix=elpa_suffix, dso_suffix=dso_suffix - ) - ), - ) - ) + libs.append(elpa.libs.ld_flags) if spec.satisfies("@:4"): if elpa.satisfies("@:2014.5"): @@ -598,14 +606,14 @@ class MakefileBuilder(makefile.MakefileBuilder): cppflags += ["-D__LIBVORI"] libvori = spec["libvori"].libs ldflags += [libvori.search_flags] - libs += libvori + libs.append(libvori.ld_flags) libs += ["-lstdc++"] if spec.satisfies("+spglib"): cppflags += ["-D__SPGLIB"] spglib = spec["spglib"].libs ldflags += [spglib.search_flags] - libs += spglib + libs.append(spglib.ld_flags) cc = spack_cc if "~mpi" in spec else spec["mpi"].mpicc cxx = spack_cxx if "~mpi" in spec else spec["mpi"].mpicxx @@ -723,18 +731,20 @@ class MakefileBuilder(makefile.MakefileBuilder): if spec.satisfies("@2022: +rocm"): libs += [ - "-L{}".format(spec["rocm"].libs.directories[0]), - "-L{}/stubs".format(spec["rocm"].libs.directories[0]), + "-L{}".format(spec["hip"].prefix.lib), + "-lamdhip64", "-lhipblas", "-lhipfft", "-lstdc++", ] - cppflags += ["-D__OFFLOAD_HIP"] acc_compiler_var = "hipcc" acc_flags_var = "NVFLAGS" cppflags += ["-D__ACC"] cppflags += ["-D__DBCSR_ACC"] + cppflags += ["-D__HIP_PLATFORM_AMD__"] + cppflags += ["-D__GRID_HIP"] + gpuver = GPU_MAP[spec.variants["amdgpu_target"].value[0]] if spec.satisfies("smm=libsmm"): @@ -812,6 +822,9 @@ class MakefileBuilder(makefile.MakefileBuilder): mkf.write(fflags("CXXFLAGS", cxxflags)) if spec.satisfies("+cuda"): mkf.write(fflags(acc_flags_var, nvflags)) + if "+rocm" in spec: + mkf.write("OFFLOAD_TARGET = hip\n") + mkf.write(fflags("FCFLAGS", fcflags)) mkf.write(fflags("LDFLAGS", ldflags)) mkf.write(fflags("LIBS", libs)) @@ -918,7 +931,7 @@ class MakefileBuilder(makefile.MakefileBuilder): content += " " + self.spec["fftw-api"].libs.ld_flags fftw = self.spec["fftw-api"] - if fftw.name in ["fftw", "amdfftw"] and fftw.satisfies("+openmp"): + if fftw.name in ["fftw", "amdfftw", "cray-fftw"] and fftw.satisfies("+openmp"): content += " -lfftw3_omp" content += "\n" |