From 2fad5418cc1bdb68ded8063d8a957120ade3f057 Mon Sep 17 00:00:00 2001 From: osbm Date: Sun, 4 May 2025 15:42:48 +0300 Subject: [PATCH 1/5] update flake.lock --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 157731b..f41abb3 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1734988233, - "narHash": "sha256-Ucfnxq1rF/GjNP3kTL+uTfgdoE9a3fxDftSfeLIS8mA=", + "lastModified": 1746300365, + "narHash": "sha256-thYTdWqCRipwPRxWiTiH1vusLuAy0okjOyzRx4hLWh4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "de1864217bfa9b5845f465e771e0ecb48b30e02d", + "rev": "f21e4546e3ede7ae34d12a84602a22246b31f7e0", "type": "github" }, "original": { From 4bab84268747259e5a1d55627798a4b304752cd3 Mon Sep 17 00:00:00 2001 From: osbm Date: Tue, 26 Aug 2025 23:38:25 +0300 Subject: [PATCH 2/5] update flake.lock --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index f41abb3..e9703d4 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1746300365, - "narHash": "sha256-thYTdWqCRipwPRxWiTiH1vusLuAy0okjOyzRx4hLWh4=", + "lastModified": 1756159630, + "narHash": "sha256-ohMvsjtSVdT/bruXf5ClBh8ZYXRmD4krmjKrXhEvwMg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "f21e4546e3ede7ae34d12a84602a22246b31f7e0", + "rev": "84c256e42600cb0fdf25763b48d28df2f25a0c8b", "type": "github" }, "original": { From 347d5c6554ba2b7066eca5ef411390d1d4e5b4d7 Mon Sep 17 00:00:00 2001 From: osbm Date: Wed, 27 Aug 2025 00:34:21 +0300 Subject: [PATCH 3/5] update --- flake.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index fabb8b0..249b75b 100644 --- a/flake.nix +++ b/flake.nix @@ -29,15 +29,17 @@ packages."${system}" = { # just one main.cu file for now # compile it and place it to $out/bin/cuda-kernel - cuda-kernel = pkgs.stdenv.mkDerivation { + cuda-kernel = pkgs.cudaPackages.backendStdenv.mkDerivation { name = "cuda-kernel"; src = ./.; buildInputs = with pkgs; [ cudatoolkit cudaPackages.cuda_cudart - linuxPackages.nvidia_x11 + linuxPackages.nvidia_x11_beta ]; - LD_LIBRARY_PATH = "${pkgs.linuxPackages.nvidia_x11}/lib"; + cudaSupport = true; + requiredSystemFeatures = [ "cuda" ]; + LD_LIBRARY_PATH = "${pkgs.linuxPackages.nvidia_x11_beta}/lib"; buildPhase = '' nvcc -o main main.cu mkdir -p $out/bin From eacee115660997eba33c1c1358ddd99b014e46f6 Mon Sep 17 00:00:00 2001 From: osbm Date: Wed, 27 Aug 2025 01:18:05 +0300 Subject: [PATCH 4/5] its working now --- flake.nix | 51 ++++++++++++++++++++++++++++++++++----------------- main.cu | 20 ++++++++++---------- 2 files changed, 44 insertions(+), 27 deletions(-) diff --git a/flake.nix b/flake.nix index 249b75b..230130d 100644 --- a/flake.nix +++ b/flake.nix @@ -29,23 +29,40 @@ packages."${system}" = { # just one main.cu file for now # compile it and place it to $out/bin/cuda-kernel - cuda-kernel = pkgs.cudaPackages.backendStdenv.mkDerivation { - name = "cuda-kernel"; - src = ./.; - buildInputs = with pkgs; [ - cudatoolkit - cudaPackages.cuda_cudart - linuxPackages.nvidia_x11_beta - ]; - cudaSupport = true; - requiredSystemFeatures = [ "cuda" ]; - LD_LIBRARY_PATH = "${pkgs.linuxPackages.nvidia_x11_beta}/lib"; - buildPhase = '' - nvcc -o main main.cu - mkdir -p $out/bin - mv main $out/bin/cuda-kernel - ''; - }; + cuda-kernel = let + # Use CUDA 12.0 which should be compatible with driver 580.76.05 + cudaPackages = pkgs.cudaPackages; + cudatoolkit = cudaPackages.cudatoolkit; + in + cudaPackages.backendStdenv.mkDerivation { + name = "cuda"; + src = ./main.cu; + unpackPhase = "true"; + buildInputs = [ + cudatoolkit + cudaPackages.cuda_cudart + ]; + nativeBuildInputs = [ + cudatoolkit + pkgs.autoAddDriverRunpath + ]; + LD_LIBRARY_PATH = "${cudatoolkit}/lib:${cudaPackages.cuda_cudart}/lib"; + buildPhase = '' + echo "GCC Version:" + gcc --version + echo "NVCC Version:" + nvcc --version + + echo "Building CUDA program..." + nvcc -arch=sm_89 -o main $src + mkdir -p $out/bin + cp main $out/bin/ + ''; + meta = { + mainProgram = "main"; + platforms = ["x86_64-linux"]; + }; + }; default = self.packages."${system}".cuda-kernel; }; }; diff --git a/main.cu b/main.cu index d99fd87..6ce6ea2 100644 --- a/main.cu +++ b/main.cu @@ -1,13 +1,13 @@ -#include #include +#include "cuda.h" - -int main(){ - - size_t mf, ma; - cudaMemGetInfo(&mf, &ma); - std::cout << "Free memory (mb): " << mf/1024/1024 << std::endl; - std::cout << "Total memory (mb): " << ma/1024/1024 << std::endl; - - return 0; +int main() { + size_t free_t, total_t; + cudaError_t err; + err = cudaMemGetInfo(&free_t, &total_t); + if (err != cudaSuccess) { printf("cudaMalloc d_steps_arr error: %s\n", cudaGetErrorString(err)); return 1; } + std::cout << "Free mem: " << free_t / (1024 * 1024) << " MB Total mem: " << total_t / (1024 * 1024) << " MB" << std::endl; + std::cout << "Free mem: " << free_t / (1024 * 1024 * 1024) << " GB Total mem: " << total_t / (1024 * 1024 * 1024) << " GB" << std::endl; + return 0; } + From d9c4552d8d0e6f99b3cee338aefe29fd6328ab6c Mon Sep 17 00:00:00 2001 From: osbm Date: Wed, 27 Aug 2025 01:19:50 +0300 Subject: [PATCH 5/5] running --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0000fb0 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ + +Example cuda code compilation in nix. + +```bash +$ nix run github:osbm/cuda-kernel-nix +Free mem: 22112 MB Total mem: 24078 MB +Free mem: 21 GB Total mem: 23 GB +```