I haven't dug into what Kokkos and PETSc are doing but the direct use of this stuff in CUDA is well-documented, certainly as well as the CPU switches for x86 binaries in the Intel compiler are.
The compiler help tells me this, which can be cross-referenced with CUDA documentation above.
Options for steering GPU code generation.
=========================================
--gpu-architecture <arch> (-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>,... (-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
<code> 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 <code> architectures must be
compatible with the <arch> 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'.
--generate-code <specification>,... (-gencode)
This option provides a generalization of the '--gpu-architecture=<arch> --gpu-code=<code>,
...' option combination for specifying nvcc behavior with respect to code
generation. Where use of the previous options generates code for different
'real' architectures with the PTX for the same 'virtual' architecture, option
'--generate-code' allows multiple PTX generations for different 'virtual'
architectures. In fact, '--gpu-architecture=<arch> --gpu-code=<code>,
...' is equivalent to '--generate-code arch=<arch>,code=<code>,...'.
'--generate-code' options may be repeated for different virtual architectures.
Allowed keywords for this option: 'arch','code'.