44
55# Dictionary of known cuda versions and thier download URLS, which do not follow a consistent pattern :(
66$CUDA_KNOWN_URLS = @ {
7- " 8.0.44" = " http://developer.nvidia.com/compute/cuda/8.0/Prod/network_installers/cuda_8.0.44_win10_network-exe" ;
8- " 8.0.61" = " http://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe" ;
9- " 9.0.176" = " http://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe" ;
10- " 9.1.85" = " http://developer.nvidia.com/compute/cuda/9.1/Prod/network_installers/cuda_9.1.85_win10_network" ;
11- " 9.2.148" = " http://developer.nvidia.com/compute/cuda/9.2/Prod2/network_installers2/cuda_9.2.148_win10_network" ;
12- " 10.0.130" = " http://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network" ;
13- " 10.1.105" = " http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.105_win10_network.exe" ;
14- " 10.1.168" = " http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.168_win10_network.exe" ;
15- " 10.1.243" = " http://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe" ;
16- " 10.2.89" = " http://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe" ;
17- " 11.0.1" = " http://developer.download.nvidia.com/compute/cuda/11.0.1/network_installers/cuda_11.0.1_win10_network.exe" ;
18- " 11.0.2" = " http://developer.download.nvidia.com/compute/cuda/11.0.2/network_installers/cuda_11.0.2_win10_network.exe" ;
19- " 11.0.3" = " http://developer.download.nvidia.com/compute/cuda/11.0.3/network_installers/cuda_11.0.3_win10_network.exe" ;
20- " 11.1.0" = " https://developer.download.nvidia.com/compute/cuda/11.1.0/network_installers/cuda_11.1.0_win10_network.exe" ;
21- " 11.1.1" = " https://developer.download.nvidia.com/compute/cuda/11.1.1/network_installers/cuda_11.1.1_win10_network.exe" ;
22- " 11.2.0" = " https://developer.download.nvidia.com/compute/cuda/11.2.0/network_installers/cuda_11.2.0_win10_network.exe" ;
23- " 11.2.1" = " https://developer.download.nvidia.com/compute/cuda/11.2.1/network_installers/cuda_11.2.1_win10_network.exe" ;
24- " 11.2.2" = " https://developer.download.nvidia.com/compute/cuda/11.2.2/network_installers/cuda_11.2.2_win10_network.exe" ;
25- " 11.3.0" = " https://developer.download.nvidia.com/compute/cuda/11.3.0/network_installers/cuda_11.3.0_win10_network.exe" ;
26- " 11.3.1" = " https://developer.download.nvidia.com/compute/cuda/11.3.1/network_installers/cuda_11.3.1_win10_network.exe" ;
27- " 11.5.0" = " https://developer.download.nvidia.com/compute/cuda/11.5.0/network_installers/cuda_11.5.0_win10_network.exe" ;
28- " 11.5.1" = " https://developer.download.nvidia.com/compute/cuda/11.5.1/network_installers/cuda_11.5.1_windows_network.exe" ;
29- " 11.8.0" = " https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe" ;
30- " 12.5.0" = " https://developer.download.nvidia.com/compute/cuda/12.5.0/network_installers/cuda_12.5.0_windows_network.exe" ;
31- " 12.6.3" = " https://developer.download.nvidia.com/compute/cuda/12.6.3/network_installers/cuda_12.6.3_windows_network.exe" ;
32- " 12.8.0" = " https://developer.download.nvidia.com/compute/cuda/12.8.0/network_installers/cuda_12.8.0_windows_network.exe" ;
7+ " 8.0.44" = " http://developer.nvidia.com/compute/cuda/8.0/Prod/network_installers/cuda_8.0.44_win10_network-exe" ;
8+ " 8.0.61" = " http://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe" ;
9+ " 9.0.176" = " http://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe" ;
10+ " 9.1.85" = " http://developer.nvidia.com/compute/cuda/9.1/Prod/network_installers/cuda_9.1.85_win10_network" ;
11+ " 9.2.148" = " http://developer.nvidia.com/compute/cuda/9.2/Prod2/network_installers2/cuda_9.2.148_win10_network" ;
12+ " 10.0.130" = " http://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network" ;
13+ " 10.1.105" = " http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.105_win10_network.exe" ;
14+ " 10.1.168" = " http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.168_win10_network.exe" ;
15+ " 10.1.243" = " http://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe" ;
16+ " 10.2.89" = " http://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe" ;
17+ " 11.0.1" = " http://developer.download.nvidia.com/compute/cuda/11.0.1/network_installers/cuda_11.0.1_win10_network.exe" ;
18+ " 11.0.2" = " http://developer.download.nvidia.com/compute/cuda/11.0.2/network_installers/cuda_11.0.2_win10_network.exe" ;
19+ " 11.0.3" = " http://developer.download.nvidia.com/compute/cuda/11.0.3/network_installers/cuda_11.0.3_win10_network.exe" ;
20+ " 11.1.0" = " https://developer.download.nvidia.com/compute/cuda/11.1.0/network_installers/cuda_11.1.0_win10_network.exe" ;
21+ " 11.1.1" = " https://developer.download.nvidia.com/compute/cuda/11.1.1/network_installers/cuda_11.1.1_win10_network.exe" ;
22+ " 11.2.0" = " https://developer.download.nvidia.com/compute/cuda/11.2.0/network_installers/cuda_11.2.0_win10_network.exe" ;
23+ " 11.2.1" = " https://developer.download.nvidia.com/compute/cuda/11.2.1/network_installers/cuda_11.2.1_win10_network.exe" ;
24+ " 11.2.2" = " https://developer.download.nvidia.com/compute/cuda/11.2.2/network_installers/cuda_11.2.2_win10_network.exe" ;
25+ " 11.3.0" = " https://developer.download.nvidia.com/compute/cuda/11.3.0/network_installers/cuda_11.3.0_win10_network.exe" ;
26+ " 11.3.1" = " https://developer.download.nvidia.com/compute/cuda/11.3.1/network_installers/cuda_11.3.1_win10_network.exe" ;
27+ " 11.5.0" = " https://developer.download.nvidia.com/compute/cuda/11.5.0/network_installers/cuda_11.5.0_win10_network.exe" ;
28+ " 11.5.1" = " https://developer.download.nvidia.com/compute/cuda/11.5.1/network_installers/cuda_11.5.1_windows_network.exe" ;
29+ " 11.8.0" = " https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe" ;
30+ " 12.5.0" = " https://developer.download.nvidia.com/compute/cuda/12.5.0/network_installers/cuda_12.5.0_windows_network.exe" ;
31+ " 12.6.3" = " https://developer.download.nvidia.com/compute/cuda/12.6.3/network_installers/cuda_12.6.3_windows_network.exe" ;
32+ " 12.8.0" = " https://developer.download.nvidia.com/compute/cuda/12.8.0/network_installers/cuda_12.8.0_windows_network.exe" ;
3333 " 12.9.1" = " https://developer.download.nvidia.com/compute/cuda/12.9.1/network_installers/cuda_12.9.1_windows_network.exe" ;
34+ " 13.0.0" = " https://developer.download.nvidia.com/compute/cuda/13.0.0/network_installers/cuda_13.0.0_windows_network.exe" ;
3435}
3536
3637# @todo - change this to be based on _MSC_VER intead, or invert it to be CUDA keyed instead?
3738$VISUAL_STUDIO_MIN_CUDA = @ {
38- " 2019" = " 10.1" ;
39- " 2017" = " 10.0" ; # Depends on which version of 2017! 9.0 to 10.0 depending on version
40- " 2015" = " 8.0" ; # might support older, unsure.
39+ " 2019" = " 10.1" ;
40+ " 2017" = " 10.0" ; # Depends on which version of 2017! 9.0 to 10.0 depending on version
41+ " 2015" = " 8.0" ; # might support older, unsure.
4142}
4243
4344# cuda_runtime.h is in nvcc <= 10.2, but cudart >= 11.0
4445# @todo - make this easier to vary per CUDA version.
4546$CUDA_PACKAGES_IN = @ (
46- " nvcc" ;
47- " visual_studio_integration" ;
47+ " nvcc" ;
48+ " visual_studio_integration" ;
4849 " cublas" ;
49- " cublas_dev" ;
50+ " cublas_dev" ;
5051 " curand" ;
51- " curand_dev" ;
52+ " curand_dev" ;
5253 " nvrtc" ;
53- " nvrtc_dev" ;
54- " cudart" ;
54+ " nvrtc_dev" ;
55+ " cudart" ;
5556)
5657
5758
@@ -66,8 +67,8 @@ $CUDA_VERSION_FULL = $env:cuda
6667# Validate CUDA version, extracting components via regex
6768$cuda_ver_matched = $CUDA_VERSION_FULL -match " ^(?<major>[1-9][0-9]*)\.(?<minor>[0-9]+)\.(?<patch>[0-9]+)$"
6869if (-not $cuda_ver_matched ){
69- Write-Output " Invalid CUDA version specified, <major>.<minor>.<patch> required. '$CUDA_VERSION_FULL '."
70- exit 1
70+ Write-Output " Invalid CUDA version specified, <major>.<minor>.<patch> required. '$CUDA_VERSION_FULL '."
71+ exit 1
7172}
7273$CUDA_MAJOR = $Matches.major
7374$CUDA_MINOR = $Matches.minor
@@ -79,16 +80,16 @@ $CUDA_PATCH=$Matches.patch
7980# Exit if visual studio is too new for the cuda version.
8081$VISUAL_STUDIO = $env: visual_studio.trim ()
8182if ($VISUAL_STUDIO.length -ge 4 ) {
82- $VISUAL_STUDIO_YEAR = $VISUAL_STUDIO.Substring ($VISUAL_STUDIO.Length - 4 )
83- if ($VISUAL_STUDIO_YEAR.length -eq 4 -and $VISUAL_STUDIO_MIN_CUDA.containsKey ($VISUAL_STUDIO_YEAR )){
84- $MINIMUM_CUDA_VERSION = $VISUAL_STUDIO_MIN_CUDA [$VISUAL_STUDIO_YEAR ]
85- if ([version ]$CUDA_VERSION_FULL -lt [version ]$MINIMUM_CUDA_VERSION ) {
86- Write-Output " Error: Visual Studio $ ( $VISUAL_STUDIO_YEAR ) requires CUDA >= $ ( $MINIMUM_CUDA_VERSION ) "
87- exit 1
88- }
89- }
83+ $VISUAL_STUDIO_YEAR = $VISUAL_STUDIO.Substring ($VISUAL_STUDIO.Length - 4 )
84+ if ($VISUAL_STUDIO_YEAR.length -eq 4 -and $VISUAL_STUDIO_MIN_CUDA.containsKey ($VISUAL_STUDIO_YEAR )){
85+ $MINIMUM_CUDA_VERSION = $VISUAL_STUDIO_MIN_CUDA [$VISUAL_STUDIO_YEAR ]
86+ if ([version ]$CUDA_VERSION_FULL -lt [version ]$MINIMUM_CUDA_VERSION ) {
87+ Write-Output " Error: Visual Studio $ ( $VISUAL_STUDIO_YEAR ) requires CUDA >= $ ( $MINIMUM_CUDA_VERSION ) "
88+ exit 1
89+ }
90+ }
9091} else {
91- Write-Output " Warning: Unknown Visual Studio Version. CUDA version may be insufficient."
92+ Write-Output " Warning: Unknown Visual Studio Version. CUDA version may be insufficient."
9293}
9394
9495# # ------------------------------------------------
@@ -97,21 +98,20 @@ if ($VISUAL_STUDIO.length -ge 4) {
9798
9899$CUDA_PACKAGES = " "
99100
100- # for CUDA >= 11 cudart is a required package.
101- # if([version]$CUDA_VERSION_FULL -ge [version]"11.0") {
102- # if(-not $CUDA_PACKAGES_IN -contains "cudart") {
103- # $CUDA_PACKAGES_IN += 'cudart'
104- # }
105- # }
101+ if ([version ]$CUDA_VERSION_FULL -ge [version ]" 13.0.0" ) {
102+ $CUDA_PACKAGES_IN += " crt"
103+ $CUDA_PACKAGES_IN += " nvptxcompiler"
104+ $CUDA_PACKAGES_IN += " nvvm"
105+ }
106106
107107foreach ($package in $CUDA_PACKAGES_IN ) {
108- # Make sure the correct package name is used for nvcc.
109- if ($package -eq " nvcc" -and [version ]$CUDA_VERSION_FULL -lt [version ]" 9.1" ){
110- $package = " compiler"
111- } elseif ($package -eq " compiler" -and [version ]$CUDA_VERSION_FULL -ge [version ]" 9.1" ) {
112- $package = " nvcc"
113- }
114- $CUDA_PACKAGES += " $ ( $package ) _$ ( $CUDA_MAJOR ) .$ ( $CUDA_MINOR ) "
108+ # Make sure the correct package name is used for nvcc.
109+ if ($package -eq " nvcc" -and [version ]$CUDA_VERSION_FULL -lt [version ]" 9.1" ){
110+ $package = " compiler"
111+ } elseif ($package -eq " compiler" -and [version ]$CUDA_VERSION_FULL -ge [version ]" 9.1" ) {
112+ $package = " nvcc"
113+ }
114+ $CUDA_PACKAGES += " $ ( $package ) _$ ( $CUDA_MAJOR ) .$ ( $CUDA_MINOR ) "
115115}
116116echo " $ ( $CUDA_PACKAGES ) "
117117# # -----------------
@@ -121,12 +121,13 @@ echo "$($CUDA_PACKAGES)"
121121# Select the download link if known, otherwise have a guess.
122122$CUDA_REPO_PKG_REMOTE = " "
123123if ($CUDA_KNOWN_URLS.containsKey ($CUDA_VERSION_FULL )){
124- $CUDA_REPO_PKG_REMOTE = $CUDA_KNOWN_URLS [$CUDA_VERSION_FULL ]
124+ $CUDA_REPO_PKG_REMOTE = $CUDA_KNOWN_URLS [$CUDA_VERSION_FULL ]
125125} else {
126- # Guess what the url is given the most recent pattern (at the time of writing, 10.1)
127- Write-Output " note: URL for CUDA ${$CUDA_VERSION_FULL} not known, estimating."
128- $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"
126+ # Guess what the url is given the most recent pattern (at the time of writing, 10.1)
127+ Write-Output " note: URL for CUDA ${$CUDA_VERSION_FULL} not known, estimating."
128+ $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"
129129}
130+
130131$CUDA_REPO_PKG_LOCAL = " cuda_$ ( $CUDA_VERSION_FULL ) _win10_network.exe"
131132
132133
@@ -138,10 +139,10 @@ $CUDA_REPO_PKG_LOCAL="cuda_$($CUDA_VERSION_FULL)_win10_network.exe"
138139Write-Output " Downloading CUDA Network Installer for $ ( $CUDA_VERSION_FULL ) from: $ ( $CUDA_REPO_PKG_REMOTE ) "
139140Invoke-WebRequest $CUDA_REPO_PKG_REMOTE - OutFile $CUDA_REPO_PKG_LOCAL | Out-Null
140141if (Test-Path - Path $CUDA_REPO_PKG_LOCAL ){
141- Write-Output " Downloading Complete"
142+ Write-Output " Downloading Complete"
142143} else {
143- Write-Output " Error: Failed to download $ ( $CUDA_REPO_PKG_LOCAL ) from $ ( $CUDA_REPO_PKG_REMOTE ) "
144- exit 1
144+ Write-Output " Error: Failed to download $ ( $CUDA_REPO_PKG_LOCAL ) from $ ( $CUDA_REPO_PKG_REMOTE ) "
145+ exit 1
145146}
146147
147148# Invoke silent install of CUDA (via network installer)
@@ -150,8 +151,8 @@ Start-Process -Wait -FilePath .\"$($CUDA_REPO_PKG_LOCAL)" -ArgumentList "-s $($C
150151
151152# Check the return status of the CUDA installer.
152153if (! $? ) {
153- Write-Output " Error: CUDA installer reported error. $ ( $LASTEXITCODE ) "
154- exit 1
154+ Write-Output " Error: CUDA installer reported error. $ ( $LASTEXITCODE ) "
155+ exit 1
155156}
156157
157158# 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)"
170171
171172# If executing on github actions, emit the appropriate echo statements to update environment variables
172173if (Test-Path " env:GITHUB_ACTIONS" ) {
173- # Set paths for subsequent steps, using $env:CUDA_PATH
174- echo " Adding CUDA to CUDA_PATH, CUDA_PATH_X_Y and PATH"
175- echo " CUDA_PATH=$env: CUDA_PATH " | Out-File - FilePath $env: GITHUB_ENV - Encoding utf8 - Append
176- echo " $env: CUDA_PATH_VX_Y =$env: CUDA_PATH " | Out-File - FilePath $env: GITHUB_ENV - Encoding utf8 - Append
177- echo " $env: CUDA_PATH /bin" | Out-File - FilePath $env: GITHUB_PATH - Encoding utf8 - Append
174+ # Set paths for subsequent steps, using $env:CUDA_PATH
175+ echo " Adding CUDA to CUDA_PATH, CUDA_PATH_X_Y and PATH"
176+ echo " CUDA_PATH=$env: CUDA_PATH " | Out-File - FilePath $env: GITHUB_ENV - Encoding utf8 - Append
177+ echo " $env: CUDA_PATH_VX_Y =$env: CUDA_PATH " | Out-File - FilePath $env: GITHUB_ENV - Encoding utf8 - Append
178+ echo " $env: CUDA_PATH /bin" | Out-File - FilePath $env: GITHUB_PATH - Encoding utf8 - Append
178179}
0 commit comments