Repository: cupy/cupy

Issue:
Drop support for CUDA 8.0 and 9.1 in v8
As users of CUDA 8.0 and 9.1 are decreasing, we are planning to drop support for these CUDA versions.


Discussion:
Note: This is in line with conda-forge's CUDA support. Currently we only build for CUDA 9.2+.
Hi @gmarkall I read somewhere that Numba still supports CUDA 8.0. Am I right? Would this plan cause negative impacts?
We are going to drop support for CUDA 8.0 / 9.1 starting in CuPy v8.0.0rc1.
> Hi @gmarkall I read somewhere that Numba still supports CUDA 8.0. Am I right? Would this plan cause negative impacts?

It only supports it because it has not been inconvenient to - I believe we could drop support for 8.0 without causing issues.
Thanks, @gmarkall!

Resolving patch:
diff --git a/cupy/cuda/compiler.py b/cupy/cuda/compiler.py
--- a/cupy/cuda/compiler.py
+++ b/cupy/cuda/compiler.py
@@ -66,10 +66,7 @@ def _get_arch():
     # See Supported Compile Options section of NVRTC User Guide for
     # the maximum value allowed for `--gpu-architecture`.
     major, minor = _get_nvrtc_version()
-    if major < 9:
-        # CUDA 8.0
-        _nvrtc_max_compute_capability = '52'
-    elif major < 10 or (major == 10 and minor == 0):
+    if major < 10 or (major == 10 and minor == 0):
         # CUDA 9.x / 10.0
         _nvrtc_max_compute_capability = '70'
     elif major < 11:
diff --git a/cupy_setup_build.py b/cupy_setup_build.py
--- a/cupy_setup_build.py
+++ b/cupy_setup_build.py
@@ -828,12 +828,9 @@ def _nvcc_gencode_options(cuda_version):
                      ('compute_61', 'sm_61'),
                      ('compute_70', 'sm_70'),
                      'compute_70']
-    elif cuda_version >= 8000:
-        arch_list = ['compute_30',
-                     'compute_50',
-                     ('compute_60', 'sm_60'),
-                     ('compute_61', 'sm_61'),
-                     'compute_60']
+    else:
+        # This should not happen.
+        assert False
 
     options = []
     for arch in arch_list:
diff --git a/install/build.py b/install/build.py
--- a/install/build.py
+++ b/install/build.py
@@ -14,8 +14,8 @@
 PLATFORM_LINUX = sys.platform.startswith('linux')
 PLATFORM_WIN32 = sys.platform.startswith('win32')
 
-minimum_cuda_version = 8000
-minimum_cudnn_version = 5000
+minimum_cuda_version = 9000
+minimum_cudnn_version = 7000
 maximum_cudnn_version = 8099
 
 _cuda_path = 'NOT_INITIALIZED'
@@ -302,7 +302,7 @@ def check_cuda_version(compiler, settings):
     if _cuda_version < minimum_cuda_version:
         utils.print_warning(
             'CUDA version is too old: %d' % _cuda_version,
-            'CUDA v7.0 or newer is required')
+            'CUDA 9.0 or newer is required')
         return False
 
     return True


Test patch:
diff --git a/tests/cupy_tests/cuda_tests/test_compiler.py b/tests/cupy_tests/cuda_tests/test_compiler.py
--- a/tests/cupy_tests/cuda_tests/test_compiler.py
+++ b/tests/cupy_tests/cuda_tests/test_compiler.py
@@ -22,13 +22,6 @@ def _check_get_arch(self, device_cc, expected_arch):
             assert compiler._get_arch() == expected_arch
         cupy.util.clear_memo()  # _get_arch result is cached
 
-    @unittest.skipUnless(cuda_version() < 9000, 'Requires CUDA 8.x or earlier')
-    def test_get_arch_cuda8(self):
-        self._check_get_arch('37', '37')
-        self._check_get_arch('50', '50')
-        self._check_get_arch('52', '52')
-        self._check_get_arch('53', '53')  # Tegra
-
     @unittest.skipUnless(9000 <= cuda_version(), 'Requires CUDA 9.x or later')
     def test_get_arch_cuda9(self):
         self._check_get_arch('62', '62')  # Tegra
@@ -48,22 +41,6 @@ def test_get_arch_cuda11(self):
     def _compile(self, arch):
         compiler.compile_using_nvrtc('', arch=arch)
 
-    @unittest.skipUnless(cuda_version() < 9000, 'Requires CUDA 8.x or earlier')
-    def test_compile_cuda8(self):
-        # This test is intended to detect specification change in NVRTC API.
-
-        # It should not fail.
-        # (Do not test `compute_53` as it is for Tegra.)
-        self._compile('52')
-
-        # It should fail.
-        # (`compute_60` and `compute_61` are not supported by NVRTC in CUDA 8
-        #  but it does not raise error when used.)
-        self.assertRaises(
-            compiler.CompileException, self._compile, '54')
-        self.assertRaises(
-            compiler.CompileException, self._compile, '70')
-
     @unittest.skipUnless(9000 <= cuda_version(), 'Requires CUDA 9.0 or later')
     def test_compile_cuda9(self):
         # This test is intended to detect specification change in NVRTC API.