diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1d6e0ce7..be2fe930 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: matrix: include: - os: ubuntu-24.04 - cuda: "12.8" + cuda: "13.0" arch: 120 - os: ubuntu-24.04 cuda: "12.8" @@ -77,15 +77,15 @@ jobs: include: - os: windows-2025 visual_studio: "Visual Studio 17 2022" - cuda: "12.9.1" + cuda: "13.0.0" arch: 120 - os: windows-2025 visual_studio: "Visual Studio 17 2022" - cuda: "12.6.3" + cuda: "12.9.1" arch: 89 - os: windows-2022 visual_studio: "Visual Studio 17 2022" - cuda: "12.6.3" + cuda: "12.9.1" arch: 86 - os: windows-2022 visual_studio: "Visual Studio 17 2022" diff --git a/CMakeLists.txt b/CMakeLists.txt index 955b88cc..a63993e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without modification, are permitted # provided that the following conditions are met: # * Redistributions of source code must retain the above copyright notice, this list of @@ -10,7 +10,7 @@ # * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used # to endorse or promote products derived from this software without specific prior written # permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE @@ -165,7 +165,9 @@ else() set(LATEST_SUPPORTED_CUDA_ARCHITECTURE 120) endif() -if (CUDA_VERSION VERSION_GREATER_EQUAL 12.0) +if (CUDA_VERSION VERSION_GREATER_EQUAL 13.0) + set(EARLIEST_SUPPORTED_CUDA_ARCHITECTURE 75) +elseif (CUDA_VERSION VERSION_GREATER_EQUAL 12.0) set(EARLIEST_SUPPORTED_CUDA_ARCHITECTURE 50) else() set(EARLIEST_SUPPORTED_CUDA_ARCHITECTURE 20) diff --git a/bindings/torch/setup.py b/bindings/torch/setup.py index 44c74762..594b2f1f 100644 --- a/bindings/torch/setup.py +++ b/bindings/torch/setup.py @@ -14,7 +14,9 @@ ROOT_DIR = os.path.dirname(os.path.dirname(SCRIPT_DIR)) def min_supported_compute_capability(cuda_version): - if cuda_version >= parse_version("12.0"): + if cuda_version >= parse_version("13.0"): + return 75 + elif cuda_version >= parse_version("12.0"): return 50 else: return 20 diff --git a/dependencies/cuda-cmake-github-actions/scripts/actions/install_cuda_windows.ps1 b/dependencies/cuda-cmake-github-actions/scripts/actions/install_cuda_windows.ps1 index 5cea633d..eb76c009 100755 --- a/dependencies/cuda-cmake-github-actions/scripts/actions/install_cuda_windows.ps1 +++ b/dependencies/cuda-cmake-github-actions/scripts/actions/install_cuda_windows.ps1 @@ -4,54 +4,55 @@ # Dictionary of known cuda versions and thier download URLS, which do not follow a consistent pattern :( $CUDA_KNOWN_URLS = @{ - "8.0.44" = "http://developer.nvidia.com/compute/cuda/8.0/Prod/network_installers/cuda_8.0.44_win10_network-exe"; - "8.0.61" = "http://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe"; - "9.0.176" = "http://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe"; - "9.1.85" = "http://developer.nvidia.com/compute/cuda/9.1/Prod/network_installers/cuda_9.1.85_win10_network"; - "9.2.148" = "http://developer.nvidia.com/compute/cuda/9.2/Prod2/network_installers2/cuda_9.2.148_win10_network"; - "10.0.130" = "http://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network"; - "10.1.105" = "http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.105_win10_network.exe"; - "10.1.168" = "http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.168_win10_network.exe"; - "10.1.243" = "http://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe"; - "10.2.89" = "http://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe"; - "11.0.1" = "http://developer.download.nvidia.com/compute/cuda/11.0.1/network_installers/cuda_11.0.1_win10_network.exe"; - "11.0.2" = "http://developer.download.nvidia.com/compute/cuda/11.0.2/network_installers/cuda_11.0.2_win10_network.exe"; - "11.0.3" = "http://developer.download.nvidia.com/compute/cuda/11.0.3/network_installers/cuda_11.0.3_win10_network.exe"; - "11.1.0" = "https://developer.download.nvidia.com/compute/cuda/11.1.0/network_installers/cuda_11.1.0_win10_network.exe"; - "11.1.1" = "https://developer.download.nvidia.com/compute/cuda/11.1.1/network_installers/cuda_11.1.1_win10_network.exe"; - "11.2.0" = "https://developer.download.nvidia.com/compute/cuda/11.2.0/network_installers/cuda_11.2.0_win10_network.exe"; - "11.2.1" = "https://developer.download.nvidia.com/compute/cuda/11.2.1/network_installers/cuda_11.2.1_win10_network.exe"; - "11.2.2" = "https://developer.download.nvidia.com/compute/cuda/11.2.2/network_installers/cuda_11.2.2_win10_network.exe"; - "11.3.0" = "https://developer.download.nvidia.com/compute/cuda/11.3.0/network_installers/cuda_11.3.0_win10_network.exe"; - "11.3.1" = "https://developer.download.nvidia.com/compute/cuda/11.3.1/network_installers/cuda_11.3.1_win10_network.exe"; - "11.5.0" = "https://developer.download.nvidia.com/compute/cuda/11.5.0/network_installers/cuda_11.5.0_win10_network.exe"; - "11.5.1" = "https://developer.download.nvidia.com/compute/cuda/11.5.1/network_installers/cuda_11.5.1_windows_network.exe"; - "11.8.0" = "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"; - "12.5.0" = "https://developer.download.nvidia.com/compute/cuda/12.5.0/network_installers/cuda_12.5.0_windows_network.exe"; - "12.6.3" = "https://developer.download.nvidia.com/compute/cuda/12.6.3/network_installers/cuda_12.6.3_windows_network.exe"; - "12.8.0" = "https://developer.download.nvidia.com/compute/cuda/12.8.0/network_installers/cuda_12.8.0_windows_network.exe"; + "8.0.44" = "http://developer.nvidia.com/compute/cuda/8.0/Prod/network_installers/cuda_8.0.44_win10_network-exe"; + "8.0.61" = "http://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe"; + "9.0.176" = "http://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe"; + "9.1.85" = "http://developer.nvidia.com/compute/cuda/9.1/Prod/network_installers/cuda_9.1.85_win10_network"; + "9.2.148" = "http://developer.nvidia.com/compute/cuda/9.2/Prod2/network_installers2/cuda_9.2.148_win10_network"; + "10.0.130" = "http://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network"; + "10.1.105" = "http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.105_win10_network.exe"; + "10.1.168" = "http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.168_win10_network.exe"; + "10.1.243" = "http://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe"; + "10.2.89" = "http://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe"; + "11.0.1" = "http://developer.download.nvidia.com/compute/cuda/11.0.1/network_installers/cuda_11.0.1_win10_network.exe"; + "11.0.2" = "http://developer.download.nvidia.com/compute/cuda/11.0.2/network_installers/cuda_11.0.2_win10_network.exe"; + "11.0.3" = "http://developer.download.nvidia.com/compute/cuda/11.0.3/network_installers/cuda_11.0.3_win10_network.exe"; + "11.1.0" = "https://developer.download.nvidia.com/compute/cuda/11.1.0/network_installers/cuda_11.1.0_win10_network.exe"; + "11.1.1" = "https://developer.download.nvidia.com/compute/cuda/11.1.1/network_installers/cuda_11.1.1_win10_network.exe"; + "11.2.0" = "https://developer.download.nvidia.com/compute/cuda/11.2.0/network_installers/cuda_11.2.0_win10_network.exe"; + "11.2.1" = "https://developer.download.nvidia.com/compute/cuda/11.2.1/network_installers/cuda_11.2.1_win10_network.exe"; + "11.2.2" = "https://developer.download.nvidia.com/compute/cuda/11.2.2/network_installers/cuda_11.2.2_win10_network.exe"; + "11.3.0" = "https://developer.download.nvidia.com/compute/cuda/11.3.0/network_installers/cuda_11.3.0_win10_network.exe"; + "11.3.1" = "https://developer.download.nvidia.com/compute/cuda/11.3.1/network_installers/cuda_11.3.1_win10_network.exe"; + "11.5.0" = "https://developer.download.nvidia.com/compute/cuda/11.5.0/network_installers/cuda_11.5.0_win10_network.exe"; + "11.5.1" = "https://developer.download.nvidia.com/compute/cuda/11.5.1/network_installers/cuda_11.5.1_windows_network.exe"; + "11.8.0" = "https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe"; + "12.5.0" = "https://developer.download.nvidia.com/compute/cuda/12.5.0/network_installers/cuda_12.5.0_windows_network.exe"; + "12.6.3" = "https://developer.download.nvidia.com/compute/cuda/12.6.3/network_installers/cuda_12.6.3_windows_network.exe"; + "12.8.0" = "https://developer.download.nvidia.com/compute/cuda/12.8.0/network_installers/cuda_12.8.0_windows_network.exe"; "12.9.1" = "https://developer.download.nvidia.com/compute/cuda/12.9.1/network_installers/cuda_12.9.1_windows_network.exe"; + "13.0.0" = "https://developer.download.nvidia.com/compute/cuda/13.0.0/network_installers/cuda_13.0.0_windows_network.exe"; } # @todo - change this to be based on _MSC_VER intead, or invert it to be CUDA keyed instead? $VISUAL_STUDIO_MIN_CUDA = @{ - "2019" = "10.1"; - "2017" = "10.0"; # Depends on which version of 2017! 9.0 to 10.0 depending on version - "2015" = "8.0"; # might support older, unsure. + "2019" = "10.1"; + "2017" = "10.0"; # Depends on which version of 2017! 9.0 to 10.0 depending on version + "2015" = "8.0"; # might support older, unsure. } # cuda_runtime.h is in nvcc <= 10.2, but cudart >= 11.0 # @todo - make this easier to vary per CUDA version. $CUDA_PACKAGES_IN = @( - "nvcc"; - "visual_studio_integration"; + "nvcc"; + "visual_studio_integration"; "cublas"; - "cublas_dev"; + "cublas_dev"; "curand"; - "curand_dev"; + "curand_dev"; "nvrtc"; - "nvrtc_dev"; - "cudart"; + "nvrtc_dev"; + "cudart"; ) @@ -66,8 +67,8 @@ $CUDA_VERSION_FULL = $env:cuda # Validate CUDA version, extracting components via regex $cuda_ver_matched = $CUDA_VERSION_FULL -match "^(?[1-9][0-9]*)\.(?[0-9]+)\.(?[0-9]+)$" if(-not $cuda_ver_matched){ - Write-Output "Invalid CUDA version specified, .. required. '$CUDA_VERSION_FULL'." - exit 1 + Write-Output "Invalid CUDA version specified, .. required. '$CUDA_VERSION_FULL'." + exit 1 } $CUDA_MAJOR=$Matches.major $CUDA_MINOR=$Matches.minor @@ -79,16 +80,16 @@ $CUDA_PATCH=$Matches.patch # Exit if visual studio is too new for the cuda version. $VISUAL_STUDIO = $env:visual_studio.trim() if ($VISUAL_STUDIO.length -ge 4) { - $VISUAL_STUDIO_YEAR = $VISUAL_STUDIO.Substring($VISUAL_STUDIO.Length-4) - if ($VISUAL_STUDIO_YEAR.length -eq 4 -and $VISUAL_STUDIO_MIN_CUDA.containsKey($VISUAL_STUDIO_YEAR)){ - $MINIMUM_CUDA_VERSION = $VISUAL_STUDIO_MIN_CUDA[$VISUAL_STUDIO_YEAR] - if ([version]$CUDA_VERSION_FULL -lt [version]$MINIMUM_CUDA_VERSION) { - Write-Output "Error: Visual Studio $($VISUAL_STUDIO_YEAR) requires CUDA >= $($MINIMUM_CUDA_VERSION)" - exit 1 - } - } + $VISUAL_STUDIO_YEAR = $VISUAL_STUDIO.Substring($VISUAL_STUDIO.Length-4) + if ($VISUAL_STUDIO_YEAR.length -eq 4 -and $VISUAL_STUDIO_MIN_CUDA.containsKey($VISUAL_STUDIO_YEAR)){ + $MINIMUM_CUDA_VERSION = $VISUAL_STUDIO_MIN_CUDA[$VISUAL_STUDIO_YEAR] + if ([version]$CUDA_VERSION_FULL -lt [version]$MINIMUM_CUDA_VERSION) { + Write-Output "Error: Visual Studio $($VISUAL_STUDIO_YEAR) requires CUDA >= $($MINIMUM_CUDA_VERSION)" + exit 1 + } + } } else { - Write-Output "Warning: Unknown Visual Studio Version. CUDA version may be insufficient." + Write-Output "Warning: Unknown Visual Studio Version. CUDA version may be insufficient." } ## ------------------------------------------------ @@ -97,21 +98,20 @@ if ($VISUAL_STUDIO.length -ge 4) { $CUDA_PACKAGES = "" -# for CUDA >= 11 cudart is a required package. -# if([version]$CUDA_VERSION_FULL -ge [version]"11.0") { -# if(-not $CUDA_PACKAGES_IN -contains "cudart") { -# $CUDA_PACKAGES_IN += 'cudart' -# } -# } +if([version]$CUDA_VERSION_FULL -ge [version]"13.0.0") { + $CUDA_PACKAGES_IN += "crt" + $CUDA_PACKAGES_IN += "nvptxcompiler" + $CUDA_PACKAGES_IN += "nvvm" +} foreach ($package in $CUDA_PACKAGES_IN) { - # Make sure the correct package name is used for nvcc. - if($package -eq "nvcc" -and [version]$CUDA_VERSION_FULL -lt [version]"9.1"){ - $package="compiler" - } elseif($package -eq "compiler" -and [version]$CUDA_VERSION_FULL -ge [version]"9.1") { - $package="nvcc" - } - $CUDA_PACKAGES += " $($package)_$($CUDA_MAJOR).$($CUDA_MINOR)" + # Make sure the correct package name is used for nvcc. + if($package -eq "nvcc" -and [version]$CUDA_VERSION_FULL -lt [version]"9.1"){ + $package="compiler" + } elseif($package -eq "compiler" -and [version]$CUDA_VERSION_FULL -ge [version]"9.1") { + $package="nvcc" + } + $CUDA_PACKAGES += " $($package)_$($CUDA_MAJOR).$($CUDA_MINOR)" } echo "$($CUDA_PACKAGES)" ## ----------------- @@ -121,12 +121,13 @@ echo "$($CUDA_PACKAGES)" # Select the download link if known, otherwise have a guess. $CUDA_REPO_PKG_REMOTE="" if ($CUDA_KNOWN_URLS.containsKey($CUDA_VERSION_FULL)){ - $CUDA_REPO_PKG_REMOTE=$CUDA_KNOWN_URLS[$CUDA_VERSION_FULL] + $CUDA_REPO_PKG_REMOTE=$CUDA_KNOWN_URLS[$CUDA_VERSION_FULL] } else { - # Guess what the url is given the most recent pattern (at the time of writing, 10.1) - Write-Output "note: URL for CUDA ${$CUDA_VERSION_FULL} not known, estimating." - $CUDA_REPO_PKG_REMOTE="http://developer.download.nvidia.com/compute/cuda/$($CUDA_MAJOR).$($CUDA_MINOR)/Prod/network_installers/cuda_$($CUDA_VERSION_FULL)_win10_network.exe" +# Guess what the url is given the most recent pattern (at the time of writing, 10.1) + Write-Output "note: URL for CUDA ${$CUDA_VERSION_FULL} not known, estimating." + $CUDA_REPO_PKG_REMOTE="http://developer.download.nvidia.com/compute/cuda/$($CUDA_MAJOR).$($CUDA_MINOR)/Prod/network_installers/cuda_$($CUDA_VERSION_FULL)_win10_network.exe" } + $CUDA_REPO_PKG_LOCAL="cuda_$($CUDA_VERSION_FULL)_win10_network.exe" @@ -138,10 +139,10 @@ $CUDA_REPO_PKG_LOCAL="cuda_$($CUDA_VERSION_FULL)_win10_network.exe" Write-Output "Downloading CUDA Network Installer for $($CUDA_VERSION_FULL) from: $($CUDA_REPO_PKG_REMOTE)" Invoke-WebRequest $CUDA_REPO_PKG_REMOTE -OutFile $CUDA_REPO_PKG_LOCAL | Out-Null if (Test-Path -Path $CUDA_REPO_PKG_LOCAL){ - Write-Output "Downloading Complete" + Write-Output "Downloading Complete" } else { - Write-Output "Error: Failed to download $($CUDA_REPO_PKG_LOCAL) from $($CUDA_REPO_PKG_REMOTE)" - exit 1 + Write-Output "Error: Failed to download $($CUDA_REPO_PKG_LOCAL) from $($CUDA_REPO_PKG_REMOTE)" + exit 1 } # Invoke silent install of CUDA (via network installer) @@ -150,8 +151,8 @@ Start-Process -Wait -FilePath .\"$($CUDA_REPO_PKG_LOCAL)" -ArgumentList "-s $($C # Check the return status of the CUDA installer. if (!$?) { - Write-Output "Error: CUDA installer reported error. $($LASTEXITCODE)" - exit 1 + Write-Output "Error: CUDA installer reported error. $($LASTEXITCODE)" + exit 1 } # Store the CUDA_PATH in the environment for the current session, to be forwarded in the action. @@ -170,9 +171,9 @@ Write-Output "CUDA_PATH_VX_Y $($CUDA_PATH_VX_Y)" # If executing on github actions, emit the appropriate echo statements to update environment variables if (Test-Path "env:GITHUB_ACTIONS") { - # Set paths for subsequent steps, using $env:CUDA_PATH - echo "Adding CUDA to CUDA_PATH, CUDA_PATH_X_Y and PATH" - echo "CUDA_PATH=$env:CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - echo "$env:CUDA_PATH_VX_Y=$env:CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - echo "$env:CUDA_PATH/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + # Set paths for subsequent steps, using $env:CUDA_PATH + echo "Adding CUDA to CUDA_PATH, CUDA_PATH_X_Y and PATH" + echo "CUDA_PATH=$env:CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "$env:CUDA_PATH_VX_Y=$env:CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "$env:CUDA_PATH/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append } diff --git a/src/common_host.cu b/src/common_host.cu index 364ef371..c679bf83 100644 --- a/src/common_host.cu +++ b/src/common_host.cu @@ -41,10 +41,7 @@ namespace tcnn { -static_assert( - __CUDACC_VER_MAJOR__ > 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ >= 2), - "tiny-cuda-nn requires at least CUDA 10.2" -); +static_assert(__CUDACC_VER_MAJOR__ > 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ >= 2), "tiny-cuda-nn requires at least CUDA 10.2"); std::function g_log_callback = [](LogSeverity severity, const std::string& msg) { switch (severity) { @@ -214,9 +211,7 @@ int cuda_device() { return device; } -void set_cuda_device(int device) { - CUDA_CHECK_THROW(cudaSetDevice(device)); -} +void set_cuda_device(int device) { CUDA_CHECK_THROW(cudaSetDevice(device)); } int cuda_device_count() { int device_count; @@ -244,9 +239,7 @@ const cudaDeviceProp& cuda_get_device_properties(int device) { return cuda_device_properties().at(device); } -std::string cuda_device_name(int device) { - return cuda_get_device_properties(device).name; -} +std::string cuda_device_name(int device) { return cuda_get_device_properties(device).name; } uint32_t cuda_compute_capability(int device) { const auto& props = cuda_get_device_properties(device); @@ -261,8 +254,10 @@ uint32_t cuda_max_supported_compute_capability() { return 80; } else if (cuda_version < 11080) { return 86; - } else { + } else if (cuda_version < 12080) { return 90; + } else { + return 120; } } @@ -270,13 +265,9 @@ uint32_t cuda_supported_compute_capability(int device) { return std::min(cuda_compute_capability(device), cuda_max_supported_compute_capability()); } -size_t cuda_max_shmem(int device) { - return cuda_get_device_properties(device).sharedMemPerBlockOptin; -} +size_t cuda_max_shmem(int device) { return cuda_get_device_properties(device).sharedMemPerBlockOptin; } -uint32_t cuda_max_registers(int device) { - return (uint32_t)cuda_get_device_properties(device).regsPerBlock; -} +uint32_t cuda_max_registers(int device) { return (uint32_t)cuda_get_device_properties(device).regsPerBlock; } size_t cuda_memory_granularity(int device) { size_t granularity; @@ -358,4 +349,4 @@ template <> std::string type_to_string() { return "double"; } template <> std::string type_to_string() { return "float"; } template <> std::string type_to_string<__half>() { return "__half"; } -} +} // namespace tcnn