lammps: GPU/Kokkos package updates (#35885)

This commit is contained in:
Richard Berger 2023-03-08 01:46:05 -07:00 committed by GitHub
parent 8ec86e05c4
commit 3feadc0a36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 1 deletions

View File

@ -0,0 +1,58 @@
From b11049ba1a5fa22ff575f4d4afa6579973425962 Mon Sep 17 00:00:00 2001
From: Richard Berger <richard.berger@outlook.com>
Date: Sun, 5 Mar 2023 19:03:38 -0700
Subject: [PATCH] CMake: Use hip::host and hip::hipcub targets
---
cmake/Modules/Packages/GPU.cmake | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake
index 8ac1decc86..21d046606f 100644
--- a/cmake/Modules/Packages/GPU.cmake
+++ b/cmake/Modules/Packages/GPU.cmake
@@ -412,7 +412,8 @@ elseif(GPU_API STREQUAL "HIP")
set_property(TARGET gpu PROPERTY CXX_STANDARD 14)
endif()
# add hipCUB
- target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
+ find_package(hipcub REQUIRED)
+ target_link_libraries(gpu PRIVATE hip::hipcub)
target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT)
if(HIP_PLATFORM STREQUAL "nvcc")
@@ -461,30 +462,22 @@ elseif(GPU_API STREQUAL "HIP")
add_executable(hip_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp)
target_compile_definitions(hip_get_devices PRIVATE -DUCL_HIP)
- target_link_libraries(hip_get_devices hip::host)
+ target_link_libraries(hip_get_devices PRIVATE hip::host)
if(HIP_PLATFORM STREQUAL "nvcc")
target_compile_definitions(gpu PRIVATE -D__HIP_PLATFORM_NVCC__)
- target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
target_include_directories(gpu PRIVATE ${CUDA_INCLUDE_DIRS})
target_link_libraries(gpu PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
target_compile_definitions(hip_get_devices PRIVATE -D__HIP_PLATFORM_NVCC__)
- target_include_directories(hip_get_devices PRIVATE ${HIP_ROOT_DIR}/include)
target_include_directories(hip_get_devices PRIVATE ${CUDA_INCLUDE_DIRS})
target_link_libraries(hip_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
elseif(HIP_PLATFORM STREQUAL "hcc")
target_compile_definitions(gpu PRIVATE -D__HIP_PLATFORM_HCC__)
- target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
-
target_compile_definitions(hip_get_devices PRIVATE -D__HIP_PLATFORM_HCC__)
- target_include_directories(hip_get_devices PRIVATE ${HIP_ROOT_DIR}/../include)
elseif(HIP_PLATFORM STREQUAL "amd")
target_compile_definitions(gpu PRIVATE -D__HIP_PLATFORM_AMD__)
- target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
-
target_compile_definitions(hip_get_devices PRIVATE -D__HIP_PLATFORM_AMD__)
- target_include_directories(hip_get_devices PRIVATE ${HIP_ROOT_DIR}/../include)
endif()
target_link_libraries(lammps PRIVATE gpu)
--
2.39.2

View File

@ -9,7 +9,7 @@
from spack.package import * from spack.package import *
class Lammps(CMakePackage, CudaPackage): class Lammps(CMakePackage, CudaPackage, ROCmPackage):
"""LAMMPS stands for Large-scale Atomic/Molecular Massively """LAMMPS stands for Large-scale Atomic/Molecular Massively
Parallel Simulator. Parallel Simulator.
""" """
@ -513,6 +513,14 @@ def url_for_version(self, version):
values=("single", "double"), values=("single", "double"),
multi=False, multi=False,
) )
variant(
"gpu_precision",
default="mixed",
when="~kokkos",
description="Select GPU precision (used by GPU package)",
values=("double", "mixed", "single"),
multi=False,
)
depends_on("mpi", when="+mpi") depends_on("mpi", when="+mpi")
depends_on("mpi", when="+mpiio") depends_on("mpi", when="+mpiio")
@ -561,6 +569,17 @@ def url_for_version(self, version):
depends_on("n2p2+shared", when="+lib ^n2p2") depends_on("n2p2+shared", when="+lib ^n2p2")
depends_on("vtk", when="+user-vtk") depends_on("vtk", when="+user-vtk")
depends_on("vtk", when="+vtk") depends_on("vtk", when="+vtk")
depends_on("hipcub", when="~kokkos +rocm")
depends_on("llvm-amdgpu +openmp", when="+rocm +openmp", type="build")
# propagate CUDA and ROCm architecture when +kokkos
for arch in CudaPackage.cuda_arch_values:
depends_on("kokkos+cuda cuda_arch=%s" % arch, when="+kokkos+cuda cuda_arch=%s" % arch)
for arch in ROCmPackage.amdgpu_targets:
depends_on(
"kokkos+rocm amdgpu_target=%s" % arch, when="+kokkos+rocm amdgpu_target=%s" % arch
)
depends_on("googletest", type="test") depends_on("googletest", type="test")
depends_on("libyaml", type="test") depends_on("libyaml", type="test")
@ -568,6 +587,7 @@ def url_for_version(self, version):
extends("python", when="+python") extends("python", when="+python")
conflicts("+cuda", when="+opencl") conflicts("+cuda", when="+opencl")
conflicts("+rocm", when="+opencl")
conflicts("+body", when="+poems@:20180628") conflicts("+body", when="+poems@:20180628")
conflicts("+latte", when="@:20170921") conflicts("+latte", when="@:20170921")
conflicts("+python", when="~lib") conflicts("+python", when="~lib")
@ -605,6 +625,11 @@ def url_for_version(self, version):
when="^adios2+mpi", when="^adios2+mpi",
msg="With +adios, mpi setting for adios2 and lammps must be the same", msg="With +adios, mpi setting for adios2 and lammps must be the same",
) )
conflicts(
"~kokkos+rocm",
when="@:20220602",
msg="ROCm builds of the GPU package not maintained prior to version 20220623",
)
patch("lib.patch", when="@20170901") patch("lib.patch", when="@20170901")
patch("660.patch", when="@20170922") patch("660.patch", when="@20170922")
@ -614,6 +639,7 @@ def url_for_version(self, version):
sha256="e6f1b62bbfdc79d632f4cea98019202d0dd25aa4ae61a70df1164cb4f290df79", sha256="e6f1b62bbfdc79d632f4cea98019202d0dd25aa4ae61a70df1164cb4f290df79",
when="@20200721 +cuda", when="@20200721 +cuda",
) )
patch("hip_cmake.patch", when="@20220623:20221222 ~kokkos+rocm")
root_cmakelists_dir = "cmake" root_cmakelists_dir = "cmake"
@ -641,6 +667,7 @@ def cmake_args(self):
if "+cuda" in spec: if "+cuda" in spec:
args.append(self.define("PKG_GPU", True)) args.append(self.define("PKG_GPU", True))
args.append(self.define("GPU_API", "cuda")) args.append(self.define("GPU_API", "cuda"))
args.append(self.define_from_variant("GPU_PREC", "gpu_precision"))
cuda_arch = spec.variants["cuda_arch"].value cuda_arch = spec.variants["cuda_arch"].value
if cuda_arch != "none": if cuda_arch != "none":
args.append(self.define("GPU_ARCH", "sm_{0}".format(cuda_arch[0]))) args.append(self.define("GPU_ARCH", "sm_{0}".format(cuda_arch[0])))
@ -650,6 +677,12 @@ def cmake_args(self):
args.append(self.define("USE_STATIC_OPENCL_LOADER", False)) args.append(self.define("USE_STATIC_OPENCL_LOADER", False))
args.append(self.define("PKG_GPU", True)) args.append(self.define("PKG_GPU", True))
args.append(self.define("GPU_API", "opencl")) args.append(self.define("GPU_API", "opencl"))
args.append(self.define_from_variant("GPU_PREC", "gpu_precision"))
elif "+rocm" in spec:
args.append(self.define("PKG_GPU", True))
args.append(self.define("GPU_API", "hip"))
args.append(self.define_from_variant("GPU_PREC", "gpu_precision"))
args.append(self.define_from_variant("HIP_ARCH", "amdgpu_target"))
else: else:
args.append(self.define("PKG_GPU", False)) args.append(self.define("PKG_GPU", False))
@ -712,6 +745,9 @@ def cmake_args(self):
args.append(self.define("DOWNLOAD_N2P2", False)) args.append(self.define("DOWNLOAD_N2P2", False))
args.append(self.define("N2P2_DIR", self.spec["n2p2"].prefix)) args.append(self.define("N2P2_DIR", self.spec["n2p2"].prefix))
if "+rocm" in spec:
args.append(self.define("CMAKE_CXX_COMPILER", spec["hip"].hipcc))
return args return args
def setup_run_environment(self, env): def setup_run_environment(self, env):