forked from rarias/jungle
Compare commits
7 Commits
87be9325db
...
pkgs/tacud
| Author | SHA1 | Date | |
|---|---|---|---|
|
59b36347d9
|
|||
|
846f514688
|
|||
|
08418da067
|
|||
|
1437d2da2c
|
|||
|
5a8e363e6a
|
|||
|
aacfbbd4a1
|
|||
|
13f075e9e6
|
15
overlay.nix
15
overlay.nix
@@ -51,6 +51,7 @@ let
|
|||||||
ovniGit = final.ovni.override { useGit = true; };
|
ovniGit = final.ovni.override { useGit = true; };
|
||||||
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
||||||
pocl = callPackage ./pkgs/pocl/default.nix { };
|
pocl = callPackage ./pkgs/pocl/default.nix { };
|
||||||
|
pocl-noicd = callPackage ./pkgs/pocl/default.nix { enableICD = false; };
|
||||||
prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { };
|
prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { };
|
||||||
#pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned
|
#pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned
|
||||||
#psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned
|
#psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned
|
||||||
@@ -63,7 +64,16 @@ 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 {
|
||||||
@@ -98,7 +108,12 @@ let
|
|||||||
stdenv = final.stdenvClangOmpss2NodesOmpv;
|
stdenv = final.stdenvClangOmpss2NodesOmpv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ocl-build = callPackage ./test/compilers/opencl.nix { };
|
||||||
|
ocl-build-noicd = callPackage ./test/compilers/opencl.nix { ocl-icd = final.pocl-noicd; };
|
||||||
|
|
||||||
pocl = callPackage ./test/compilers/pocl.nix { };
|
pocl = callPackage ./test/compilers/pocl.nix { };
|
||||||
|
ocl-run-pocl = ocl-build.test-icd;
|
||||||
|
ocl-run-pocl-noicd = ocl-build-noicd.test-noicd;
|
||||||
};
|
};
|
||||||
|
|
||||||
# For now, only build toplevel packages in CI/Hydra
|
# For now, only build toplevel packages in CI/Hydra
|
||||||
|
|||||||
190
pkgs/gromacs/default.nix
Normal file
190
pkgs/gromacs/default.nix
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
24
pkgs/gromacs/pkgconfig-2024.patch
Normal file
24
pkgs/gromacs/pkgconfig-2024.patch
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
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
|
||||||
36
pkgs/gromacs/pkgconfig-2025.patch
Normal file
36
pkgs/gromacs/pkgconfig-2025.patch
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
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
|
||||||
@@ -13,6 +13,9 @@
|
|||||||
libxml2, # required for statically linked llvm
|
libxml2, # required for statically linked llvm
|
||||||
python3,
|
python3,
|
||||||
writableTmpDirAsHomeHook,
|
writableTmpDirAsHomeHook,
|
||||||
|
writeText,
|
||||||
|
runCommand,
|
||||||
|
opencl-cts,
|
||||||
|
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
|
|
||||||
@@ -194,22 +197,46 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
runHook postInstallCheck
|
runHook postInstallCheck
|
||||||
'';
|
'';
|
||||||
|
|
||||||
setupHook = ./setup-hook.sh;
|
setupHook = lib.optionalDrvAttr enableICD (
|
||||||
|
writeText "setup-hook" ''
|
||||||
|
addToSearchPath OCL_ICD_VENDORS @out@/etc/OpenCL/vendors
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
passthru = {
|
passthru =
|
||||||
updateScript = nix-update-script { };
|
let
|
||||||
git = finalAttrs.finalPackage.override { useGit = true; };
|
self = finalAttrs.finalPackage;
|
||||||
test = finalAttrs.finalPackage.overrideAttrs { doCheck = true; };
|
in
|
||||||
};
|
{
|
||||||
|
updateScript = nix-update-script { };
|
||||||
|
git = self.override { useGit = true; };
|
||||||
|
|
||||||
requiredSystemFeatures = lib.optionals (finalAttrs.finalPackage.doCheck && enableHWLOC) [
|
withICD = enableICD;
|
||||||
"sys-devices"
|
|
||||||
];
|
|
||||||
|
|
||||||
preCheck = ''
|
test = {
|
||||||
export POCL_DEBUG=error,warn
|
# Run builtin tests (causes a rebuild)
|
||||||
export NIX_DEBUG=1
|
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";
|
||||||
|
|
||||||
propagatedBuildInputs = [ stdenv.cc.cc ];
|
propagatedBuildInputs = [ stdenv.cc.cc ];
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
preCheckHooks+=('setupPoclCheck')
|
|
||||||
preInstallCheckHooks+=('setupPoclCheck')
|
|
||||||
|
|
||||||
setupPoclCheck () {
|
|
||||||
export OCL_ICD_VENDORS="@out@/etc/OpenCL/vendors"
|
|
||||||
}
|
|
||||||
72
pkgs/tacuda/default.nix
Normal file
72
pkgs/tacuda/default.nix
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
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
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
13
pkgs/tacuda/fix_config.patch
Normal file
13
pkgs/tacuda/fix_config.patch
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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,
|
||||||
46
pkgs/taopencl/default.nix
Normal file
46
pkgs/taopencl/default.nix
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
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" ];
|
||||||
|
})
|
||||||
127
test/compilers/opencl.c
Normal file
127
test/compilers/opencl.c
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
#include <CL/cl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define BUF_LEN 128
|
||||||
|
|
||||||
|
cl_int exit_err = CL_SUCCESS;
|
||||||
|
|
||||||
|
#define CHECK(cmd) \
|
||||||
|
do { \
|
||||||
|
cl_int err = cmd; \
|
||||||
|
if (err != CL_SUCCESS) { \
|
||||||
|
printf("[ERROR] " #cmd " (Error code: %d)\n" \
|
||||||
|
"@ "__FILE__ \
|
||||||
|
":%d", \
|
||||||
|
err, __LINE__); \
|
||||||
|
exit_err = err; \
|
||||||
|
goto cleanup; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
const char *kernel_source = "__kernel void vector_add(__global const float *a, "
|
||||||
|
"__global const float *b, __global float *c) {\n"
|
||||||
|
" int gid = get_global_id(0);\n"
|
||||||
|
" c[gid] = a[gid] + b[gid];\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
cl_int test_kernel_compilation(cl_platform_id platform) {
|
||||||
|
cl_device_id device = NULL;
|
||||||
|
cl_context context = NULL;
|
||||||
|
cl_program program = NULL;
|
||||||
|
cl_int err = CL_SUCCESS;
|
||||||
|
char device_name[BUF_LEN];
|
||||||
|
|
||||||
|
// Get first device for this platform
|
||||||
|
CHECK(clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, &device, NULL));
|
||||||
|
|
||||||
|
// Get device name
|
||||||
|
CHECK(clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_name),
|
||||||
|
device_name, NULL));
|
||||||
|
printf(" Device: %s\n", device_name);
|
||||||
|
|
||||||
|
context = clCreateContext(NULL, 1, &device, NULL, NULL, &err);
|
||||||
|
CHECK(err);
|
||||||
|
|
||||||
|
program = clCreateProgramWithSource(context, 1, &kernel_source, NULL, &err);
|
||||||
|
CHECK(err);
|
||||||
|
|
||||||
|
err = clBuildProgram(program, 1, &device, NULL, NULL, NULL);
|
||||||
|
if (err != CL_SUCCESS) {
|
||||||
|
printf(" [ERROR] Kernel compilation failed (Error code: %d)\n", err);
|
||||||
|
|
||||||
|
// Build log
|
||||||
|
size_t log_size;
|
||||||
|
CHECK(clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0, NULL,
|
||||||
|
&log_size));
|
||||||
|
char *log = (char *)malloc(log_size);
|
||||||
|
CHECK(clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, log_size,
|
||||||
|
log, NULL));
|
||||||
|
printf(" Build log:\n%s\n", log);
|
||||||
|
free(log);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" [OK] Kernel compiled successfully!\n");
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (program)
|
||||||
|
clReleaseProgram(program);
|
||||||
|
if (context)
|
||||||
|
clReleaseContext(context);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return exit_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
cl_uint num_platforms;
|
||||||
|
cl_platform_id *platforms = NULL;
|
||||||
|
|
||||||
|
// Get number of platforms
|
||||||
|
CHECK(clGetPlatformIDs(0, NULL, &num_platforms));
|
||||||
|
|
||||||
|
printf("Found %d OpenCL platform(s)\n\n", num_platforms);
|
||||||
|
|
||||||
|
if (num_platforms == 0) {
|
||||||
|
printf("No OpenCL platforms found!\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate memory for platforms
|
||||||
|
platforms = (cl_platform_id *)malloc(sizeof(cl_platform_id) * num_platforms);
|
||||||
|
|
||||||
|
// Get platform IDs
|
||||||
|
CHECK(clGetPlatformIDs(num_platforms, platforms, NULL));
|
||||||
|
|
||||||
|
// Query each platform and test kernel compilation
|
||||||
|
for (cl_uint i = 0; i < num_platforms; i++) {
|
||||||
|
char platform_name[BUF_LEN];
|
||||||
|
char platform_vendor[BUF_LEN];
|
||||||
|
char platform_version[BUF_LEN];
|
||||||
|
|
||||||
|
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME,
|
||||||
|
sizeof(platform_name), platform_name, NULL));
|
||||||
|
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR,
|
||||||
|
sizeof(platform_vendor), platform_vendor, NULL));
|
||||||
|
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION,
|
||||||
|
sizeof(platform_version), platform_version, NULL));
|
||||||
|
|
||||||
|
printf("Platform %d: %s\n", i, platform_name);
|
||||||
|
printf(" Vendor: %s\n", platform_vendor);
|
||||||
|
printf(" Version: %s\n", platform_version);
|
||||||
|
|
||||||
|
// Test kernel compilation
|
||||||
|
CHECK(test_kernel_compilation(platforms[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (platforms)
|
||||||
|
free(platforms);
|
||||||
|
|
||||||
|
if (exit_err == CL_SUCCESS)
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
104
test/compilers/opencl.nix
Normal file
104
test/compilers/opencl.nix
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
ocl-icd,
|
||||||
|
opencl-headers,
|
||||||
|
pocl,
|
||||||
|
clinfo,
|
||||||
|
runCommand,
|
||||||
|
lib,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "opencl-pocl-test";
|
||||||
|
version = "1.0.0";
|
||||||
|
|
||||||
|
src = ./opencl.c;
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
ocl-icd
|
||||||
|
opencl-headers
|
||||||
|
];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
$CC -Wall -Wextra -D CL_TARGET_OPENCL_VERSION=100 $src -o ocl-hello -lOpenCL
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp ocl-hello $out/bin
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
test-icd =
|
||||||
|
runCommand "custom-clinfo"
|
||||||
|
{
|
||||||
|
nativeBuildInputs =
|
||||||
|
assert !(lib.hasPrefix "pocl" ocl-icd.pname);
|
||||||
|
[
|
||||||
|
clinfo
|
||||||
|
finalAttrs.finalPackage
|
||||||
|
pocl
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
}
|
||||||
|
|
||||||
|
''
|
||||||
|
set -x
|
||||||
|
|
||||||
|
mkdir $out
|
||||||
|
|
||||||
|
clinfo -l >$out/clinfo
|
||||||
|
clinfo >$out/clinfo-full
|
||||||
|
|
||||||
|
ocl-hello >$out/hello
|
||||||
|
|
||||||
|
for i in $out/*; do
|
||||||
|
grep "Portable Computing Language" $i
|
||||||
|
done
|
||||||
|
|
||||||
|
echo $OCL_ICD_VENDORS >$out/env
|
||||||
|
|
||||||
|
grep "pocl.*/etc/OpenCL/vendors" $out/env
|
||||||
|
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
# this needs: ocl-icd = pocl-noicd
|
||||||
|
test-noicd =
|
||||||
|
runCommand "custom-clinfo"
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [
|
||||||
|
finalAttrs.finalPackage
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
}
|
||||||
|
|
||||||
|
''
|
||||||
|
ocl-hello >$out
|
||||||
|
|
||||||
|
grep "Portable Computing Language" $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
})
|
||||||
@@ -2,25 +2,26 @@
|
|||||||
runCommand,
|
runCommand,
|
||||||
pocl,
|
pocl,
|
||||||
clinfo,
|
clinfo,
|
||||||
writableTmpDirAsHomeHook,
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
runCommand "clinfo-pocl"
|
runCommand "clinfo-pocl"
|
||||||
{
|
{
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
clinfo
|
clinfo
|
||||||
writableTmpDirAsHomeHook
|
pocl
|
||||||
];
|
];
|
||||||
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
|
||||||
env = {
|
env = {
|
||||||
POCL_DEBUG = "error,warn";
|
POCL_DEBUG = "error,warn";
|
||||||
OCL_ICD_VENDORS = "${pocl}/etc/OpenCL/vendors";
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
set -x
|
echo $OCL_ICD_VENDORS
|
||||||
clinfo | tee $out
|
clinfo >$out
|
||||||
set +x
|
|
||||||
|
# check that we have PoCL:
|
||||||
|
grep "Portable Computing Language" $out
|
||||||
''
|
''
|
||||||
|
|||||||
Reference in New Issue
Block a user