From eacee115660997eba33c1c1358ddd99b014e46f6 Mon Sep 17 00:00:00 2001 From: osbm Date: Wed, 27 Aug 2025 01:18:05 +0300 Subject: [PATCH] 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; } +