Skip to content

Commit 5a8dd4b

Browse files
committed
[dist] Add build variants: full, minimal, legacy
* full: SASS for all architectures, PTX for 10.0 * minimal: SASS/PTX for 5.0 only * legacy: SASS/PTX for 3.5 only
1 parent 1235241 commit 5a8dd4b

File tree

2 files changed

+44
-25
lines changed

2 files changed

+44
-25
lines changed

.github/workflows/build_wheels_windows.yml

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,35 +40,55 @@ jobs:
4040
matrix:
4141
python-version: ['3.13']
4242
platform: [x64]
43-
cuda-version: ['12']
43+
# Build variants control binary size vs JIT compilation tradeoff:
44+
# - full: CUDA 12, native SASS for all GPUs (5.0-10.0), largest binary, no JIT needed
45+
# - minimal: CUDA 12, only PTX/SASS 5.0, smallest binary, JIT required for non-Maxwell GPUs
46+
# - legacy: CUDA 11, PTX/SASS 3.5, for older GPUs (Kepler+) and systems with older drivers
47+
build-variant: ['full', 'minimal', 'legacy']
4448
include:
45-
# CUDA 12: Supports Maxwell (5.0) through Blackwell (10.0)
46-
# TODO(@Breakthrough): Expand PTX legacy support back to 5.0, it doesn't make the final
47-
# distribution that much larger and may help users with older GPUs.
49+
# CUDA 12 - Full variant: All SASS targets for maximum performance
4850
- cuda-version: '12'
51+
build-variant: 'full'
4952
runs-on: 'windows-2025'
5053
cuda-installer: 'cuda_12.9.1_windows_network.exe'
5154
cuda-path-version: 'v12.9'
5255
cudnn-archive: 'cudnn-windows-x86_64-9.18.1.3_cuda12-archive.zip'
5356
cudnn-folder: 'cudnn-windows-x86_64-9.18.1.3_cuda12-archive'
57+
cudnn-dll-path: 'bin/x64'
5458
video-codec-sdk-archive: 'Video_Codec_SDK_13.0.37.zip'
5559
video-codec-sdk-folder: 'Video_Codec_SDK_13.0.37'
5660
cuda-arch-bin: '5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.6;8.9;9.0;10.0'
5761
cuda-arch-ptx: '10.0'
5862
cache-key: 'nvidia-deps-cuda-12.9.1-cudnn-9.18.1.3'
59-
# TODO: Re-enable CUDA 13 after updating to OpenCV 4.13+
60-
# CUDA 13: Supports Turing (7.5) through Blackwell (12.0)
61-
# - cuda-version: '13'
62-
# runs-on: 'windows-2025'
63-
# cuda-installer: 'cuda_13.1.1_windows_network.exe'
64-
# cuda-path-version: 'v13.1'
65-
# cudnn-archive: 'cudnn-windows-x86_64-9.18.1.3_cuda13-archive.zip'
66-
# cudnn-folder: 'cudnn-windows-x86_64-9.18.1.3_cuda13-archive'
67-
# video-codec-sdk-archive: 'Video_Codec_SDK_13.0.37.zip'
68-
# video-codec-sdk-folder: 'Video_Codec_SDK_13.0.37'
69-
# cuda-arch-bin: '7.5;8.0;8.6;8.9;9.0;10.0;12.0'
70-
# cuda-arch-ptx: '12.0'
71-
# cache-key: 'nvidia-deps-cuda-13.1.1-cudnn-9.18.1.3'
63+
# CUDA 12 - Minimal variant: PTX only for smallest binary size
64+
- cuda-version: '12'
65+
build-variant: 'minimal'
66+
runs-on: 'windows-2025'
67+
cuda-installer: 'cuda_12.9.1_windows_network.exe'
68+
cuda-path-version: 'v12.9'
69+
cudnn-archive: 'cudnn-windows-x86_64-9.18.1.3_cuda12-archive.zip'
70+
cudnn-folder: 'cudnn-windows-x86_64-9.18.1.3_cuda12-archive'
71+
cudnn-dll-path: 'bin/x64'
72+
video-codec-sdk-archive: 'Video_Codec_SDK_13.0.37.zip'
73+
video-codec-sdk-folder: 'Video_Codec_SDK_13.0.37'
74+
cuda-arch-bin: '5.0'
75+
cuda-arch-ptx: '5.0'
76+
cache-key: 'nvidia-deps-cuda-12.9.1-cudnn-9.18.1.3'
77+
# CUDA 11 - Legacy variant: For older GPUs (Kepler+) and systems with older drivers
78+
# NOTE: Must use windows-2022 because CUDA 11.8 only supports VS2017-VS2022
79+
- cuda-version: '11'
80+
build-variant: 'legacy'
81+
runs-on: 'windows-2022'
82+
cuda-installer: 'cuda_11.8.0_windows_network.exe'
83+
cuda-path-version: 'v11.8'
84+
cudnn-archive: 'cudnn-windows-x86_64-8.9.7.29_cuda11-archive.zip'
85+
cudnn-folder: 'cudnn-windows-x86_64-8.9.7.29_cuda11-archive'
86+
cudnn-dll-path: 'bin'
87+
video-codec-sdk-archive: 'Video_Codec_SDK_13.0.37.zip'
88+
video-codec-sdk-folder: 'Video_Codec_SDK_13.0.37'
89+
cuda-arch-bin: '3.5'
90+
cuda-arch-ptx: '3.5'
91+
cache-key: 'nvidia-deps-cuda-11.8.0-cudnn-8.9.7.29'
7292
env:
7393
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
7494
SDIST: 0
@@ -139,7 +159,7 @@ jobs:
139159
$CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/${{ matrix.cudnn-folder }}"
140160
echo "CUDNN_LIBRARY=$CUDNN_PATH/lib/x64/cudnn.lib" | Out-File -FilePath $env:GITHUB_ENV -Append
141161
echo "CUDNN_INCLUDE_DIR=$CUDNN_PATH/include" | Out-File -FilePath $env:GITHUB_ENV -Append
142-
Copy-Item -Path "$CUDNN_PATH/bin/x64/*" -Destination . -Include "*.dll"
162+
Copy-Item -Path "$CUDNN_PATH/${{ matrix.cudnn-dll-path }}/*" -Destination . -Include "*.dll"
143163
shell: pwsh
144164
- name: 🔧 Install NVIDIA Video Codec SDK
145165
run: |
@@ -160,9 +180,9 @@ jobs:
160180
if: ${{ inputs.restore_build_cache && !inputs.rolling_build }}
161181
with:
162182
path: _skbuild
163-
key: ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
183+
key: ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
164184
restore-keys: |
165-
${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-
185+
${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-
166186
167187
- name: Build a package
168188
# CMake 3.25 regression fix. See https://stackoverflow.com/questions/74162633/problem-compiling-from-source-opencv-with-mvsc2019-in-64-bit-version
@@ -184,11 +204,11 @@ jobs:
184204
if: ${{ inputs.save_build_cache && !inputs.rolling_build }}
185205
with:
186206
path: _skbuild
187-
key: ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
207+
key: ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
188208
- name: Saving all wheels
189209
uses: actions/upload-artifact@v4
190210
with:
191-
name: wheel-cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
211+
name: opencv-python-cuda-${{ matrix.build-variant }}-${{ matrix.platform }}
192212
path: wheelhouse/opencv*
193213

194214
Test:
@@ -202,7 +222,7 @@ jobs:
202222
matrix:
203223
python-version: ['3.12']
204224
platform: [x64]
205-
cuda-version: ['12'] # TODO: Re-enable '13' after updating to OpenCV 4.13+
225+
build-variant: ['full', 'minimal', 'legacy']
206226
env:
207227
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
208228
OPENCV_TEST_DATA_PATH: ${{ github.workspace }}\opencv_extra\testdata
@@ -227,7 +247,7 @@ jobs:
227247
- name: Download a wheel accordingly to matrix
228248
uses: actions/download-artifact@v4
229249
with:
230-
name: wheel-cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
250+
name: opencv-python-cuda-${{ matrix.build-variant }}-${{ matrix.platform }}
231251
path: wheelhouse/
232252
- name: Package installation
233253
run: |

docs/cuda-compatibility.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
PTX is forward-compatible only (e.g. PTX 10.0 works on GPUs ≥10.0, not older). SASS is required for older GPUs that are lower than the PTX version. A GPU needs either matching SASS or older PTX which it can JIT compile.
3434

3535

36-
3736
## References
3837

3938
- [CUDA Toolkit Archive](https://developer.nvidia.com/cuda-toolkit-archive)

0 commit comments

Comments
 (0)