forked from rarias/jungle
Compare commits
2 Commits
pkgs/tacud
...
87be9325db
| Author | SHA1 | Date | |
|---|---|---|---|
|
87be9325db
|
|||
|
c952e69f73
|
@@ -64,16 +64,7 @@ let
|
|||||||
tagaspi = callPackage ./pkgs/tagaspi/default.nix { };
|
tagaspi = callPackage ./pkgs/tagaspi/default.nix { };
|
||||||
tampi = callPackage ./pkgs/tampi/default.nix { };
|
tampi = callPackage ./pkgs/tampi/default.nix { };
|
||||||
upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { };
|
upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { };
|
||||||
taopencl = callPackage ./pkgs/taopencl/default.nix { };
|
|
||||||
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
||||||
|
|
||||||
gromacs = callPackage ./pkgs/gromacs/default.nix { enableSYCL = true; };
|
|
||||||
|
|
||||||
_cuda = prev._cuda.extend (_: _prev: final.lib.recursiveUpdate _prev {
|
|
||||||
extensions = _prev.extensions ++ [(finalAttrs: _: {
|
|
||||||
tacuda = finalAttrs.callPackage ./pkgs/tacuda/default.nix { };
|
|
||||||
})];
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tests = rec {
|
tests = rec {
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
fetchurl,
|
|
||||||
cmake,
|
|
||||||
hwloc,
|
|
||||||
fftw,
|
|
||||||
perl,
|
|
||||||
blas,
|
|
||||||
lapack,
|
|
||||||
llvmPackages,
|
|
||||||
intelPackages ? null,
|
|
||||||
mpi,
|
|
||||||
cudaPackages,
|
|
||||||
plumed,
|
|
||||||
singlePrec ? true,
|
|
||||||
config,
|
|
||||||
enableSYCL ? false,
|
|
||||||
enableCuda ? config.cudaSupport,
|
|
||||||
enableMpi ? false,
|
|
||||||
enablePlumed ? false,
|
|
||||||
cpuAcceleration ? null,
|
|
||||||
}:
|
|
||||||
|
|
||||||
# CUDA is only implemented for single precission
|
|
||||||
assert enableCuda -> singlePrec;
|
|
||||||
|
|
||||||
assert !(enableSYCL && enableCuda);
|
|
||||||
|
|
||||||
assert enableSYCL -> intelPackages != null;
|
|
||||||
|
|
||||||
let
|
|
||||||
inherit (cudaPackages.flags) cmakeCudaArchitecturesString;
|
|
||||||
|
|
||||||
# Select reasonable defaults for all major platforms
|
|
||||||
# The possible values are defined in CMakeLists.txt:
|
|
||||||
# AUTO None SSE2 SSE4.1 AVX_128_FMA AVX_256 AVX2_256
|
|
||||||
# AVX2_128 AVX_512 AVX_512_KNL MIC ARM_NEON ARM_NEON_ASIMD
|
|
||||||
SIMD =
|
|
||||||
x:
|
|
||||||
if (cpuAcceleration != null) then
|
|
||||||
x
|
|
||||||
else if stdenv.hostPlatform.system == "i686-linux" then
|
|
||||||
"SSE2"
|
|
||||||
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
|
||||||
"SSE4.1"
|
|
||||||
else if stdenv.hostPlatform.system == "x86_64-darwin" then
|
|
||||||
"SSE4.1"
|
|
||||||
else if stdenv.hostPlatform.system == "aarch64-linux" then
|
|
||||||
"ARM_NEON_ASIMD"
|
|
||||||
else
|
|
||||||
"None";
|
|
||||||
|
|
||||||
source =
|
|
||||||
if enablePlumed then
|
|
||||||
{
|
|
||||||
version = "2024.2";
|
|
||||||
hash = "sha256-gCp+M18uiVdw9XsVnk7DaOuw/yzm2sz3BsboAlw2hSs=";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
version = "2025.3";
|
|
||||||
hash = "sha256-i9/KAmjz8Qp8o8BuWbYvc+oCQgxnIRwP85EvMteDPGU=";
|
|
||||||
};
|
|
||||||
|
|
||||||
stdenv' = if enableSYCL then intelPackages.stdenv else stdenv;
|
|
||||||
|
|
||||||
in
|
|
||||||
stdenv'.mkDerivation rec {
|
|
||||||
pname = "gromacs";
|
|
||||||
version = source.version;
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "ftp://ftp.gromacs.org/pub/gromacs/gromacs-${version}.tar.gz";
|
|
||||||
inherit (source) hash;
|
|
||||||
};
|
|
||||||
|
|
||||||
patches = [ (if enablePlumed then ./pkgconfig-2024.patch else ./pkgconfig-2025.patch) ];
|
|
||||||
|
|
||||||
postPatch = lib.optionalString enablePlumed ''
|
|
||||||
plumed patch -p -e gromacs-${source.version}
|
|
||||||
'';
|
|
||||||
|
|
||||||
outputs = [
|
|
||||||
"out"
|
|
||||||
"dev"
|
|
||||||
"man"
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
cmake
|
|
||||||
]
|
|
||||||
++ lib.optional enablePlumed plumed
|
|
||||||
++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
|
|
||||||
|
|
||||||
env.MKLROOT = intelPackages.mkl;
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
fftw
|
|
||||||
perl
|
|
||||||
hwloc
|
|
||||||
blas
|
|
||||||
lapack
|
|
||||||
]
|
|
||||||
++ lib.optional enableMpi mpi
|
|
||||||
++ lib.optionals enableCuda [
|
|
||||||
cudaPackages.cuda_cccl
|
|
||||||
cudaPackages.cuda_cudart
|
|
||||||
cudaPackages.libcufft
|
|
||||||
cudaPackages.cuda_profiler_api
|
|
||||||
]
|
|
||||||
++ lib.optional stdenv.hostPlatform.isDarwin llvmPackages.openmp;
|
|
||||||
|
|
||||||
propagatedBuildInputs = lib.optional enableMpi mpi;
|
|
||||||
propagatedUserEnvPkgs = lib.optional enableMpi mpi;
|
|
||||||
|
|
||||||
cmakeFlags = [
|
|
||||||
(lib.cmakeBool "GMX_HWLOC" true)
|
|
||||||
"-DGMX_SIMD:STRING=${SIMD cpuAcceleration}"
|
|
||||||
"-DGMX_OPENMP:BOOL=TRUE"
|
|
||||||
"-DBUILD_SHARED_LIBS=ON"
|
|
||||||
]
|
|
||||||
++ (
|
|
||||||
if singlePrec then
|
|
||||||
[
|
|
||||||
"-DGMX_DOUBLE=OFF"
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
"-DGMX_DOUBLE=ON"
|
|
||||||
"-DGMX_DEFAULT_SUFFIX=OFF"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
++ (
|
|
||||||
if enableMpi then
|
|
||||||
[
|
|
||||||
"-DGMX_MPI:BOOL=TRUE"
|
|
||||||
"-DGMX_THREAD_MPI:BOOL=FALSE"
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
"-DGMX_MPI:BOOL=FALSE"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
++ (lib.optionals enableSYCL [
|
|
||||||
"-DGMX_GPU=SYCL"
|
|
||||||
"-DGMX_OPENMP=OFF" # TODO: enable OpenMP with SYCL?
|
|
||||||
])
|
|
||||||
++ lib.optionals enableCuda [
|
|
||||||
"-DGMX_GPU=CUDA"
|
|
||||||
(lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" cmakeCudaArchitecturesString)
|
|
||||||
|
|
||||||
# Gromacs seems to ignore and override the normal variables, so we add this ad hoc:
|
|
||||||
(lib.cmakeFeature "GMX_CUDA_TARGET_COMPUTE" cmakeCudaArchitecturesString)
|
|
||||||
];
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
moveToOutput share/cmake $dev
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://www.gromacs.org";
|
|
||||||
license = licenses.lgpl21Plus;
|
|
||||||
description = "Molecular dynamics software package";
|
|
||||||
longDescription = ''
|
|
||||||
GROMACS is a versatile package to perform molecular dynamics,
|
|
||||||
i.e. simulate the Newtonian equations of motion for systems
|
|
||||||
with hundreds to millions of particles.
|
|
||||||
|
|
||||||
It is primarily designed for biochemical molecules like
|
|
||||||
proteins, lipids and nucleic acids that have a lot of
|
|
||||||
complicated bonded interactions, but since GROMACS is
|
|
||||||
extremely fast at calculating the nonbonded interactions (that
|
|
||||||
usually dominate simulations) many groups are also using it
|
|
||||||
for research on non-biological systems, e.g. polymers.
|
|
||||||
|
|
||||||
GROMACS supports all the usual algorithms you expect from a
|
|
||||||
modern molecular dynamics implementation, (check the online
|
|
||||||
reference or manual for details), but there are also quite a
|
|
||||||
few features that make it stand out from the competition.
|
|
||||||
|
|
||||||
See: https://www.gromacs.org/about.html for details.
|
|
||||||
'';
|
|
||||||
platforms = platforms.unix;
|
|
||||||
maintainers = with maintainers; [
|
|
||||||
sheepforce
|
|
||||||
markuskowa
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
|
||||||
index 646787cb53..9b97ad57f7 100644
|
|
||||||
--- a/src/external/muparser/muparser.pc.in
|
|
||||||
+++ b/src/external/muparser/muparser.pc.in
|
|
||||||
@@ -1,7 +1,5 @@
|
|
||||||
-prefix=@CMAKE_INSTALL_PREFIX@
|
|
||||||
-exec_prefix=${prefix}
|
|
||||||
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
||||||
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|
||||||
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
|
||||||
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
|
||||||
|
|
||||||
Name: @PACKAGE_NAME@
|
|
||||||
Description: Mathematical expressions parser library
|
|
||||||
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
index ec1ed6684e..ca1105474a 100644
|
|
||||||
--- a/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
+++ b/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
|
|
||||||
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
|
||||||
|
|
||||||
Name: libgromacs@GMX_LIBS_SUFFIX@
|
|
||||||
Description: Gromacs library
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
|
||||||
index 646787cb53..d26e84de8f 100644
|
|
||||||
--- a/src/external/muparser/muparser.pc.in
|
|
||||||
+++ b/src/external/muparser/muparser.pc.in
|
|
||||||
@@ -1,11 +1,9 @@
|
|
||||||
-prefix=@CMAKE_INSTALL_PREFIX@
|
|
||||||
-exec_prefix=${prefix}
|
|
||||||
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
||||||
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|
||||||
-
|
|
||||||
-Name: @PACKAGE_NAME@
|
|
||||||
-Description: Mathematical expressions parser library
|
|
||||||
-Version: @MUPARSER_VERSION@
|
|
||||||
-Requires:
|
|
||||||
-Libs: -L${libdir} -lmuparser
|
|
||||||
-Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
|
||||||
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
|
||||||
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
|
||||||
+
|
|
||||||
+Name: @PACKAGE_NAME@
|
|
||||||
+Description: Mathematical expressions parser library
|
|
||||||
+Version: @MUPARSER_VERSION@
|
|
||||||
+Requires:
|
|
||||||
+Libs: -L${libdir} -lmuparser
|
|
||||||
+Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
|
||||||
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
index af9b5a6dc0..5f58d549bf 100644
|
|
||||||
--- a/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
+++ b/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
@@ -1,5 +1,4 @@
|
|
||||||
-prefix=@CMAKE_INSTALL_PREFIX@
|
|
||||||
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
||||||
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
|
||||||
|
|
||||||
Name: libgromacs@GMX_LIBS_SUFFIX@
|
|
||||||
Description: Gromacs library
|
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
python3,
|
python3,
|
||||||
writableTmpDirAsHomeHook,
|
writableTmpDirAsHomeHook,
|
||||||
writeText,
|
writeText,
|
||||||
runCommand,
|
|
||||||
opencl-cts,
|
|
||||||
|
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
|
|
||||||
@@ -203,38 +201,12 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
''
|
''
|
||||||
);
|
);
|
||||||
|
|
||||||
passthru =
|
passthru = {
|
||||||
let
|
updateScript = nix-update-script { };
|
||||||
self = finalAttrs.finalPackage;
|
git = finalAttrs.finalPackage.override { useGit = true; };
|
||||||
in
|
test = finalAttrs.finalPackage.overrideAttrs { doCheck = true; };
|
||||||
{
|
withICD = enableICD;
|
||||||
updateScript = nix-update-script { };
|
};
|
||||||
git = self.override { useGit = true; };
|
|
||||||
|
|
||||||
withICD = enableICD;
|
|
||||||
|
|
||||||
test = {
|
|
||||||
# Run builtin tests (causes a rebuild)
|
|
||||||
self = self.overrideAttrs { doCheck = true; };
|
|
||||||
|
|
||||||
# Run basic test from Khronos OpenCL Conformance Test Suite
|
|
||||||
# WARN: despite its name, test_basic is very exhaustive, and can take more
|
|
||||||
# than 1 hour in a marenostrum5 node.
|
|
||||||
cts =
|
|
||||||
assert enableICD;
|
|
||||||
lib.genAttrs [ "api" "basic" "c11_atomics" "printf" "svm" ] (
|
|
||||||
name:
|
|
||||||
runCommand "pocl-cts-test_${name}" {
|
|
||||||
nativeBuildInputs = [ self ];
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
env = {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
};
|
|
||||||
} "${opencl-cts}/bin/Release/test_${name} | tee $out"
|
|
||||||
);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
env.HWLOC_SYNTHETIC = lib.optionalDrvAttr enableHWLOC "node:1 core:1 pu:1";
|
env.HWLOC_SYNTHETIC = lib.optionalDrvAttr enableHWLOC "node:1 core:1 pu:1";
|
||||||
|
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
backendStdenv,
|
|
||||||
fetchFromGitHub,
|
|
||||||
automake,
|
|
||||||
autoconf,
|
|
||||||
libtool,
|
|
||||||
gnumake,
|
|
||||||
autoreconfHook,
|
|
||||||
boost,
|
|
||||||
cudatoolkit,
|
|
||||||
libcublas,
|
|
||||||
cuda_cudart,
|
|
||||||
|
|
||||||
useGit ? false,
|
|
||||||
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/tacuda/tacuda.git",
|
|
||||||
gitBranch ? "main",
|
|
||||||
gitCommit ? "35234f9445e6149a2bd38d119841e2485d6ee05e",
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
release_ver = "2.1.0";
|
|
||||||
release = {
|
|
||||||
version = release_ver;
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "bsc-pm";
|
|
||||||
repo = "tacuda";
|
|
||||||
rev = release_ver;
|
|
||||||
hash = "sha256-Cj3EiLVJSLvRv0ydeg7Vp4SpkniEqHkcWF+YOJQ8EcM=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
git = rec {
|
|
||||||
version = src.shortRev;
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = gitUrl;
|
|
||||||
ref = gitBranch;
|
|
||||||
rev = gitCommit;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
source = if (useGit) then git else release;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
backendStdenv.mkDerivation {
|
|
||||||
pname = "tacuda";
|
|
||||||
inherit (source) src version;
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
separateDebugInfo = true;
|
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
autoreconfHook
|
|
||||||
automake
|
|
||||||
autoconf
|
|
||||||
libtool
|
|
||||||
gnumake
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [ ./fix_config.patch ];
|
|
||||||
|
|
||||||
configureFlags = [ "--with-cuda-include=${cudatoolkit}/include" ];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
boost
|
|
||||||
libcublas
|
|
||||||
cuda_cudart
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/m4/cuda.m4 b/m4/cuda.m4
|
|
||||||
index 23f5c94..8f9b534 100644
|
|
||||||
--- a/m4/cuda.m4
|
|
||||||
+++ b/m4/cuda.m4
|
|
||||||
@@ -40,7 +40,7 @@ search_libs="cuda cublas cudart"
|
|
||||||
required_libs=""
|
|
||||||
|
|
||||||
m4_foreach([function],
|
|
||||||
- [cuInit,
|
|
||||||
+ [
|
|
||||||
cublasSgemm,
|
|
||||||
cudaStreamCreate,
|
|
||||||
cudaLaunchKernel,
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
automake,
|
|
||||||
autoconf,
|
|
||||||
libtool,
|
|
||||||
gnumake,
|
|
||||||
boost,
|
|
||||||
mpi,
|
|
||||||
gcc,
|
|
||||||
autoreconfHook,
|
|
||||||
ocl-icd,
|
|
||||||
opencl-headers,
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "taopencl";
|
|
||||||
version = finalAttrs.src.shortRev;
|
|
||||||
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = "git@gitlab-internal.bsc.es:task-awareness/taopencl/taopencl.git";
|
|
||||||
ref = "master";
|
|
||||||
rev = "c3b7b32ae8fa4af7ceff598532a881f8f1490aaf";
|
|
||||||
};
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
separateDebugInfo = true;
|
|
||||||
|
|
||||||
configureFlags = [
|
|
||||||
"--with-opencl-lib=${ocl-icd}/lib"
|
|
||||||
"--with-opencl-include=${opencl-headers}/include"
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
autoreconfHook
|
|
||||||
automake
|
|
||||||
autoconf
|
|
||||||
libtool
|
|
||||||
gnumake
|
|
||||||
boost
|
|
||||||
mpi
|
|
||||||
gcc
|
|
||||||
];
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
|
||||||
hardeningDisable = [ "all" ];
|
|
||||||
})
|
|
||||||
31
test/compilers/opencl-run.nix
Normal file
31
test/compilers/opencl-run.nix
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
clang-ompss2,
|
||||||
|
nanos6,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "test-clang-ompss2";
|
||||||
|
src = ./.;
|
||||||
|
buildInputs = [
|
||||||
|
clang-ompss2
|
||||||
|
nanos6
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
# NIX_DEBUG = 1;
|
||||||
|
OCL_ICD_VENDORS = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
clang -fompss-2 hello.c -o hello
|
||||||
|
./hello
|
||||||
|
clang++ -fompss-2 hello.cc -o hello
|
||||||
|
./hello
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
'';
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user