Skip to content

Commit 62c63a4

Browse files
author
Mathieu Taillefumier
committed
Added basic documentation
1 parent 83f6c40 commit 62c63a4

File tree

5 files changed

+256
-116
lines changed

5 files changed

+256
-116
lines changed

.ci/include/cscs/01-test-templates.yml

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,29 @@ include:
88
image: ${UENV_NAME}/${UENV_VERSION}:${UENV_TAG}
99
variables:
1010
WITH_UENV_VIEW: "default"
11-
CFLAGS: "-O3 -fopenmp -mtune=neoverse-v2 -mcpu=neoverse-v2"
12-
CXXFLAGS: "-O3 -fopenmp -mtune=neoverse-v2 -mcpu=neoverse-v2"
13-
LDFLAGS: "-fopenmp"
11+
# CFLAGS: "-O3 -fopenmp -mtune=neoverse-v2 -mcpu=neoverse-v2"
12+
# CXXFLAGS: "-O3 -fopenmp -mtune=neoverse-v2 -mcpu=neoverse-v2"
13+
# LDFLAGS: "-fopenmp"
1414
before_script:
1515
- |
1616
if test "${SLURM_PROCID}" -eq "0"; then
1717
export CC="$(which mpicc)"
1818
export CXX="$(which mpicxx)"
19-
mkdir -p install_dir
20-
autoconf
21-
./configure \
22-
--enable-quda_experimental \
23-
--enable-mpi \
24-
--enable-omp \
25-
--with-mpidimension=4 \
26-
--disable-sse2 \
27-
--disable-sse3 \
28-
--enable-alignment=32 \
29-
--with-qudadir="/user-environment/env/default" \
30-
--with-limedir="/user-environment/env/default" \
31-
--with-lemondir="/user-environment/env/default" \
32-
--with-lapack="-lopenblas -L/user-environment/env/default/lib" \
33-
--with-cudadir="/user-environment/env/default/lib64" \
34-
--prefix="$(pwd)/install_dir"
19+
mkdir -p build_dir
20+
cd build_dir
21+
cmake -DCMAKE_PREFIX_PATH="/user-environment/env/default" \
22+
-DTM_USE_MPI=ON \
23+
-DTM_USE_CUDA=ON \
24+
-DCMAKE_C_CFLAGS="-O3 -mtune=neoverse-v2 -mcpu=neoverse-v2" \
25+
-DCMAKE_CXX_FLAGS="-O3 -mtune=neoverse-v2 -mcpu=neoverse-v2" \
26+
-DCMAKE_CUDA_ARCHITECTURES=90a \
27+
-DTM_USE_OMP=ON \
28+
-DTM_USE_QUDA=ON \
29+
-DTM_USE_LEMON=ON \
30+
-DTM_ENABLE_ALIGNMENT=32 \
31+
-DTM_USE_GAUGE_COPY-ON \
32+
-DTM_USE_HALFSPINOR=ON \
33+
-DCMAKE_INSTALL_PREFIX=../install_dir ..
3534
make
3635
make install
3736
touch preparation-done-${CI_JOB_ID}

.ci/uenv-recipes/tmlqcd/daint-gh200/repo/packages/lemonio/package.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class CMakeBuilder(cmake.CMakeBuilder):
2828
def cmake_args(self):
2929
spec = self.spec
3030
args = [
31-
self.define_from_variant("DBUILD_SHARED_LIBS" "shared"),
31+
self.define_from_variant("DBUILD_SHARED_LIBS", "shared"),
3232
]
3333
return args
3434

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Copyright Spack Project Developers. See COPYRIGHT file for details.
2+
#
3+
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
4+
5+
from spack_repo.builtin.build_systems.cmake import CmakePackage
6+
from spack_repo.builtin.build_systems.rocm import ROCmPackage
7+
from spack_repo.builtin.build_systems.cuda import CudaPackage
8+
9+
from spack.package import *
10+
11+
class Tmlqcd(CmakePackage, CudaPackage, ROCmPackage):
12+
"""Base class for building tmlQCD."""
13+
14+
homepage = "https://www.itkp.uni-bonn.de/~urbach/software.html"
15+
url = "https://github.com/etmc/tmLQCD/archive/refs/tags/rel-5-1-6.tar.gz"
16+
git = "https://github.com/etmc/tmLQCD.git"
17+
license("GPL-3.0-or-later")
18+
19+
maintainers("mtaillefumier")
20+
version("master", branch="master")
21+
22+
variant("lemon", default=False, description="Enable the lemon backend")
23+
variant("mpi", default=True, description="Enable mpi support")
24+
variant("DDalphaAMG", default=False, description="Enable DAlphaAMG support")
25+
variant("openmp", default=True, description="Enable OpenMP")
26+
variant("fftw", default=True, description="Enable FFTW interface")
27+
variant(
28+
"persistent_mpi",
29+
default=True,
30+
description="Enable persistent mpi calls for spinor and gauge fields",
31+
when="+mpi",
32+
)
33+
variant(
34+
"nonblocking_mpi",
35+
default=True,
36+
description="Enable non-blocking mpi calls for spinor and gauge fields",
37+
when="+mpi",
38+
)
39+
variant("fixedvolume", default=True, description="Enable fixed volume at compile time")
40+
variant(
41+
"alignment",
42+
default="auto",
43+
values=("none", "auto", "16", "32", "64"),
44+
description="Automatically or expliclty align arrays",
45+
)
46+
variant("gauge_copy", default=True, description="Enable gauge field copy")
47+
variant("half_spinor", default=True, description="Use a Dirac operator with half-spinor")
48+
variant("shared", default=False, description="Enable shared library")
49+
variant("shmem", default=False, description="Use shmem API")
50+
variant("quda", default=True, description="Enable the QUDA library", when="+cuda",)
51+
variant("quda", default=True, description="Enable the QUDA library", when="+rocm",)
52+
variant(
53+
"QPhiX", default=False, description="Enable the QPhiX library for Intel Xeon and Xeon Phis"
54+
)
55+
variant(
56+
"mpi_dimensions",
57+
default="4",
58+
values=("1", "2", "3", "4", "x", "xy", "xyz"),
59+
description="number of dimensions the mpi processes are distributed. the default is parallelization over all four dimensions txyz",
60+
when="+mpi",
61+
)
62+
63+
generator("ninja")
64+
65+
# language dependencies
66+
depends_on("c", type="build")
67+
depends_on("cxx", type="build")
68+
depends_on("fortran", type="build")
69+
70+
# conflicts
71+
conflicts("+cuda", when="cuda_arch=none")
72+
conflicts("+rocm", when="amdgpu_target=none")
73+
74+
# hard dependencies
75+
depends_on("c-lime")
76+
depends_on("blas")
77+
depends_on("lapack")
78+
depends_on("pkgconfig", type="build")
79+
80+
# dependencies
81+
depends_on("mpi", when="+mpi")
82+
depends_on("lemon-io", when="+lemon")
83+
84+
with when("+quda"):
85+
depends_on(
86+
"quda+twisted_mass+twisted_clover+clover+ndeg_twisted_clover+ndeg_twisted_mass+wilson+qdp+staggered+usqcd+multigrid"
87+
)
88+
89+
depends_on("quda+mpi", when="+mpi")
90+
depends_on("quda+cuda", when="+cuda")
91+
depends_on("quda+rocm", when="+rocm")
92+
depends_on("quda+nvshmem", when="+shmem")
93+
94+
depends_on("fftw-api@3", when="+fftw")
95+
96+
class CMakeBuilder(cmake.CMakeBuilder):
97+
def cmake_args(self):
98+
spec = self.spec
99+
args = [
100+
self.define_from_variant("DBUILD_SHARED_LIBS", "shared"),
101+
self.define_from_variant("TM_USE_LEMON", "lemon"),
102+
self.define_from_variant("TM_USE_MPI", "mpi"),
103+
self.define_from_variant("TM_USE_QUDA", "quda"),
104+
self.define_from_variant("TM_USE_CUDA","cuda"),
105+
self.define_from_variant("TM_USE_HIP", "cuda"),
106+
self.define_from_variant("TM_USE_FFTW", "fftw"),
107+
self.define_from_variant("TM_FIXEDVOLUME", "fixed_volume"),
108+
self.define_from_variant("TM_USE_OMP", "openmp"),
109+
self.define_from_variant("TM_USE_SHMEM", "shmem"),
110+
self.define_from_variant("TM_USE_GAUGE_COPY", "gauge_copy"),
111+
self.define_from_variant("TM_USE_HALFSPINOR", "half_spinor"),
112+
]
113+
return args

CMakeLists.txt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ option(TM_USE_MPI "Enable MPI support" OFF)
8080
option(TM_USE_CUDA "Enable QUDA support" OFF)
8181
option(TM_USE_HIP "Enable HIP support" OFF)
8282
option(TM_USE_DDalphaAMG "Enable DDalphaAMG support" OFF)
83-
option(TM_USE_OMP "Enable openMP" ON)
84-
option(TM_FIXEDVOLUME "fix volume at compile time" OFF)
83+
option(TM_USE_OMP "Enable OpenMP" ON)
84+
option(TM_FIXEDVOLUME "Fix volume at compile time" OFF)
8585
set(TM_ENABLE_ALIGNMENT
8686
"auto"
8787
CACHE
@@ -95,7 +95,7 @@ set_property(CACHE TM_ENABLE_ALIGNMENT PROPERTY STRINGS "auto" "none" "16" "32"
9595
option(TM_USE_OPTIMIZATION "enable optimisation" ON)
9696
option(TM_USE_GAUGE_COPY "Enable use of a copy of the gauge field" ON)
9797
option(TM_USE_HALFSPINOR "Use a Dirac Op. with halfspinor exchange" ON)
98-
option(TM_USE_QPHIX "enable QPhiX" OFF)
98+
option(TM_USE_QPHIX "Enable QPhiX" OFF)
9999
option(TM_USE_SHMEM "Use shmem API" OFF)
100100
option(TM_USE_QUDA "Enable QUDA support" OFF)
101101
option(TM_ENABLE_WARNINGS "Enable all warnings" ON)
@@ -106,7 +106,7 @@ cmake_dependent_option(
106106
TM_PERSISTENT_MPI "Use persistent MPI calls for halfspinor [default=no]" OFF
107107
"TM_USE_MPI" OFF)
108108
cmake_dependent_option(
109-
TM_NONBLOCKING_MPI "Use non-blocking MPI calls for spinor and gaug" ON
109+
TM_NONBLOCKING_MPI "Use non-blocking MPI calls for spinor and gauge" ON
110110
"TM_USE_MPI" OFF)
111111

112112
# need to do it properly. Just a place holder
@@ -132,8 +132,6 @@ find_package(BLAS REQUIRED)
132132
find_package(LAPACK REQUIRED)
133133
set(TM_LAPACK ON)
134134
find_package(FLEX REQUIRED)
135-
# do we need bison ?
136-
find_package(BISON REQUIRED)
137135

138136
set(PACKAGE_NAME ${PROJECT_DESCRIPTION})
139137
set(PACKAGE_VERSION ${PROJECT_VERSION})
@@ -201,12 +199,6 @@ set(TM_USE_LIME ON)
201199

202200
if(TM_USE_QUDA)
203201
find_package(QUDA REQUIRED config)
204-
if(TM_USE_QUDA_EXPERIMENTAL)
205-
set(TM_QUDA_EXPERIMENTAL ON)
206-
endif()
207-
if(TM_QUDA_FERMIONIC_FORCES)
208-
set(TM_QUDA_FERMIONIC_FORCES ON)
209-
endif()
210202
endif()
211203

212204
if(TM_USE_SHMEM)
@@ -293,6 +285,9 @@ if(TM_USE_MPI)
293285
endif()
294286
endif()
295287

288+
if (TM_USE_HALFSPINOR AND NOT TM_USE_GAUGE_COPY)
289+
message(FATAL_ERROR "The TM_USE_GAUGE_COPY option should also be set to ON when TM_USE_HALFSPINOR is ON")
290+
endif()
296291
# keep the autotool config.h header.
297292
configure_file("${PROJECT_SOURCE_DIR}/cmake/tmlqcd_config_internal.h.in"
298293
"${PROJECT_BINARY_DIR}/tmlqcd_config_internal.h" @ONLY)

0 commit comments

Comments
 (0)