CUDA 11.2 w/ GTX 770?

Followed all the instructions on install for CUDA 11.2 on Fedora 33 and things completed without error.

My test code compiles but I find the run time error after the kernel launch

CUDA Error "no kernel image is available for execution on the device".

nvidia-smi output

Thu Dec 24 11:20:10 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.27.04    Driver Version: 460.27.04    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 770     Off  | 00000000:03:00.0 N/A |                  N/A |
| 41%   26C    P8    N/A /  N/A |    291MiB /  4036MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

After some experimentation with -arch compiler option I find that gtx770 has 3.0 compute but this compiler cannot go below 3.5. I suspect that I’d need to install old version of CUDA? Not finding any documentation on this, and worry that Is this going to be a problem with latest Kernels and GCC compilers etc etc?

Is it possible?

From CUDA 11.0 release notes:

  • Support for Kepler sm_30 and sm_32 architecture based products is dropped.

Yes, for a qualified setup, you will need to drop back to Fedora 29 and Cuda 10.2 or find a more recent card with the current install.

I forgot to mention that you can doublecheck with: nvcc --help

Usage : nvcc [options]

Options for steering GPU code generation.

–gpu-architecture (-arch)
Specify the name of the class of NVIDIA ‘virtual’ GPU architecture for which
the CUDA input files must be compiled.
With the exception as described for the shorthand below, the architecture
specified with this option must be a ‘virtual’ architecture (such as compute_50).
Normally, this option alone does not trigger assembly of the generated PTX
for a ‘real’ architecture (that is the role of nvcc option ‘–gpu-code’,
see below); rather, its purpose is to control preprocessing and compilation
of the input to PTX.
For convenience, in case of simple nvcc compilations, the following shorthand
is supported. If no value for option ‘–gpu-code’ is specified, then the
value of this option defaults to the value of ‘–gpu-architecture’. In this
situation, as only exception to the description above, the value specified
for ‘–gpu-architecture’ may be a ‘real’ architecture (such as a sm_50),
in which case nvcc uses the specified ‘real’ architecture and its closest
‘virtual’ architecture as effective architecture values. For example, ‘nvcc
–gpu-architecture=sm_50’ is equivalent to ‘nvcc --gpu-architecture=compute_50
–gpu-code=sm_50,compute_50’.
Allowed values for this option: ‘compute_30’,‘compute_32’,‘compute_35’,
‘compute_37’,‘compute_50’,‘compute_52’,‘compute_53’,‘compute_60’,‘compute_61’,
‘compute_62’,‘compute_70’,‘compute_72’,‘compute_75’,‘sm_30’,‘sm_32’,‘sm_35’,
‘sm_37’,‘sm_50’,‘sm_52’,‘sm_53’,‘sm_60’,‘sm_61’,‘sm_62’,‘sm_70’,‘sm_72’,
‘sm_75’.

–gpu-code ,… (-code)
Specify the name of the NVIDIA GPU to assemble and optimize PTX for.
nvcc embeds a compiled code image in the resulting executable for each specified
architecture, which is a true binary load image for each ‘real’ architecture
(such as sm_50), and PTX code for the ‘virtual’ architecture (such as compute_50).
During runtime, such embedded PTX code is dynamically compiled by the CUDA
runtime system if no binary load image is found for the ‘current’ GPU.
Architectures specified for options ‘–gpu-architecture’ and ‘–gpu-code’
may be ‘virtual’ as well as ‘real’, but the architectures must be
compatible with the architecture. When the ‘–gpu-code’ option is
used, the value for the ‘–gpu-architecture’ option must be a ‘virtual’ PTX
architecture.
For instance, ‘–gpu-architecture=compute_35’ is not compatible with ‘–gpu-code=sm_30’,
because the earlier compilation stages will assume the availability of ‘compute_35’
features that are not present on ‘sm_30’.
Allowed values for this option: ‘compute_30’,‘compute_32’,‘compute_35’,
‘compute_37’,‘compute_50’,‘compute_52’,‘compute_53’,‘compute_60’,‘compute_61’,
‘compute_62’,‘compute_70’,‘compute_72’,‘compute_75’,‘sm_30’,‘sm_32’,‘sm_35’,
‘sm_37’,‘sm_50’,‘sm_52’,‘sm_53’,‘sm_60’,‘sm_61’,‘sm_62’,‘sm_70’,‘sm_72’,
‘sm_75’.