@@ -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 : |
0 commit comments