GTX 1660 Super (TU116) not exposing FP16 on driver 580.94.16

Good day, I recently did a clpeak test and it seems that Nvidia’s OpenCL driver on linux is not exposing cl_khr_fp16 even though Nvidia clearly advertises TU116 as having a separate FP16 pipe (and therefore double rate FP16), same goes with general shaders.
LSFG-VK has a separate FP16 mode and GPU uarches with FP16 support would get massive frame difference on benchmark mode but clearly it’s barely making a difference on my GTX 1660S. I’m hoping to at least get an explanation on why this is happening.

Output of clinfo:

Number of platforms                               1
Platform Name                                   NVIDIA CUDA
Platform Vendor                                 NVIDIA Corporation
Platform Version                                OpenCL 3.0 CUDA 13.0.97
Platform Profile                                FULL_PROFILE
Platform Extensions                             cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_nv_create_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_device_uuid cl_khr_pci_bus_info cl_khr_external_semaphore cl_khr_external_memory cl_khr_external_semaphore_opaque_fd cl_khr_external_memory_opaque_fd cl_khr_semaphore
Platform Extensions with Version                cl_khr_global_int32_base_atomics                                 0x400000 (1.0.0)
cl_khr_global_int32_extended_atomics                             0x400000 (1.0.0)
cl_khr_local_int32_base_atomics                                  0x400000 (1.0.0)
cl_khr_local_int32_extended_atomics                              0x400000 (1.0.0)
cl_khr_fp64                                                      0x400000 (1.0.0)
cl_khr_3d_image_writes                                           0x400000 (1.0.0)
cl_khr_byte_addressable_store                                    0x400000 (1.0.0)
cl_khr_icd                                                       0x400000 (1.0.0)
cl_khr_gl_sharing                                                0x400000 (1.0.0)
cl_nv_compiler_options                                           0x400000 (1.0.0)
cl_nv_device_attribute_query                                     0x400000 (1.0.0)
cl_nv_pragma_unroll                                              0x400000 (1.0.0)
cl_nv_copy_opts                                                  0x400000 (1.0.0)
cl_nv_create_buffer                                              0x400000 (1.0.0)
cl_khr_int64_base_atomics                                        0x400000 (1.0.0)
cl_khr_int64_extended_atomics                                    0x400000 (1.0.0)
cl_khr_device_uuid                                               0x400000 (1.0.0)
cl_khr_pci_bus_info                                              0x400000 (1.0.0)
cl_khr_external_semaphore                                        0x400000 (1.0.0)
cl_khr_external_memory                                           0x400000 (1.0.0)
cl_khr_external_semaphore_opaque_fd                              0x400000 (1.0.0)
cl_khr_external_memory_opaque_fd                                 0x400000 (1.0.0)
cl_khr_semaphore                                                 0x400000 (1.0.0)
Platform Numeric Version                        0xc00000 (3.0.0)
Platform Extensions function suffix             NV
Platform Host timer resolution                  0ns
Platform External memory handle types           Opaque FD
Platform Semaphore types                        <gatherPlatformInfo:11: get CL_PLATFORM_SEMAPHORE_TYPES_KHR size : error -30>
Platform External semaphore import types        Opaque FD
Platform External semaphore export types        <gatherPlatformInfo:13: get CL_PLATFORM_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR : error -30>

Platform Name                                   NVIDIA CUDA
Number of devices                                 1
Device Name                                     NVIDIA GeForce GTX 1660 SUPER
Device Vendor                                   NVIDIA Corporation
Device Vendor ID                                0x10de
Device Version                                  OpenCL 3.0 CUDA
Device UUID                                     5fbb1bad-11da-a37a-a61a-ea4f17d0a5dd
Driver UUID                                     5fbb1bad-11da-a37a-a61a-ea4f17d0a5dd
Valid Device LUID                               No
Device LUID                                     6d69-637300000000
Device Node Mask                                0
Device Numeric Version                          0xc00000 (3.0.0)
Driver Version                                  580.94.16
Device OpenCL C Version                         OpenCL C 1.2
Device OpenCL C all versions                    OpenCL C                                                         0x400000 (1.0.0)
OpenCL C                                                         0x401000 (1.1.0)
OpenCL C                                                         0x402000 (1.2.0)
OpenCL C                                                         0xc00000 (3.0.0)
Device OpenCL C features                        __opencl_c_fp64                                                  0xc00000 (3.0.0)
__opencl_c_images                                                0xc00000 (3.0.0)
__opencl_c_int64                                                 0xc00000 (3.0.0)
__opencl_c_3d_image_writes                                       0xc00000 (3.0.0)
Latest conformance test passed                  v2025-04-04-00
Device Type                                     GPU
Device Topology (NV)                            PCI-E, 0000:01:00.0
Device PCI bus info (KHR)                       PCI-E, 0000:01:00.0
Device Profile                                  FULL_PROFILE
Device Available                                Yes
Compiler Available                              Yes
Linker Available                                Yes
Max compute units                               22
Max clock frequency                             1830MHz
Compute Capability (NV)                         7.5
Device Partition                                (core)
Max number of sub-devices                     1
Supported partition types                     None
Supported affinity domains                    (n/a)
Max work item dimensions                        3
Max work item sizes                             1024x1024x64
Max work group size                             1024
Preferred work group size multiple (device)     32
Preferred work group size multiple (kernel)     32
Warp size (NV)                                  32
Max sub-groups per work group                   0
Preferred / native vector sizes
char                                                 1 / 1
short                                                1 / 1
int                                                  1 / 1
long                                                 1 / 1
half                                                 0 / 0        (n/a)
float                                                1 / 1
double                                               1 / 1        (cl_khr_fp64)
Half-precision Floating-point support           (n/a)
Single-precision Floating-point support         (core)
Denormals                                     Yes
Infinity and NANs                             Yes
Round to nearest                              Yes
Round to zero                                 Yes
Round to infinity                             Yes
IEEE754-2008 fused multiply-add               Yes
Support is emulated in software               No
Correctly-rounded divide and sqrt operations  Yes
Double-precision Floating-point support         (cl_khr_fp64)
Denormals                                     Yes
Infinity and NANs                             Yes
Round to nearest                              Yes
Round to zero                                 Yes
Round to infinity                             Yes
IEEE754-2008 fused multiply-add               Yes
Support is emulated in software               No
Address bits                                    64, Little-Endian
External memory handle types                    Opaque FD
Semaphore types                                 <printDeviceInfo:105: get number of CL_DEVICE_SEMAPHORE_TYPES_KHR : error -30>
External semaphore import types                 Opaque FD
External semaphore export types                 (n/a)
Global memory size                              6217924608 (5.791GiB)
Error Correction support                        No
Max memory allocation                           1554481152 (1.448GiB)
Unified memory for Host and Device              No
Integrated memory (NV)                          No
Shared Virtual Memory (SVM) capabilities        (core)
Coarse-grained buffer sharing                 Yes
Fine-grained buffer sharing                   No
Fine-grained system sharing                   No
Atomics                                       No
Minimum alignment for any data type             128 bytes
Alignment of base address                       4096 bits (512 bytes)
Preferred alignment for atomics
SVM                                           0 bytes
Global                                        0 bytes
Local                                         0 bytes
Atomic memory capabilities                      relaxed, work-group scope
Atomic fence capabilities                       relaxed, acquire/release, work-group scope
Max size for global variable                    0
Preferred total size of global vars             0
Global Memory cache type                        Read/Write
Global Memory cache size                        720896 (704KiB)
Global Memory cache line size                   128 bytes
Image support                                   Yes
Max number of samplers per kernel             32
Max size for 1D images from buffer            268435456 pixels
Max 1D or 2D image array size                 2048 images
Base address alignment for 2D image buffers   0 bytes
Pitch alignment for 2D image buffers          0 pixels
Max 2D image size                             32768x32768 pixels
Max 3D image size                             16384x16384x16384 pixels
Max number of read image args                 256
Max number of write image args                32
Max number of read/write image args           0
Pipe support                                    No
Max number of pipe args                         0
Max active pipe reservations                    0
Max pipe packet size                            0
Local memory type                               Local
Local memory size                               49152 (48KiB)
Registers per block (NV)                        65536
Max number of constant args                     9
Max constant buffer size                        65536 (64KiB)
Generic address space support                   No
Max size of kernel argument                     32764 (32KiB)
Queue properties (on host)
Out-of-order execution                        Yes
Profiling                                     Yes
Device enqueue capabilities                     (n/a)
Queue properties (on device)
Out-of-order execution                        No
Profiling                                     No
Preferred size                                0
Max size                                      0
Max queues on device                            0
Max events on device                            0
Prefer user sync for interop                    No
Profiling timer resolution                      1000ns
Execution capabilities
Run OpenCL kernels                            Yes
Run native kernels                            No
Non-uniform work-groups                       No
Work-group collective functions               No
Sub-group independent forward progress        No
Kernel execution timeout (NV)                 Yes
Concurrent copy and kernel execution (NV)     Yes
Number of async copy engines                3
IL version                                    (n/a)
ILs with version                              (n/a)
printf() buffer size                            1048576 (1024KiB)
Built-in kernels                                (n/a)
Built-in kernels with version                   (n/a)
Device Extensions                               cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_nv_create_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_device_uuid cl_khr_pci_bus_info cl_khr_external_semaphore cl_khr_external_memory cl_khr_external_semaphore_opaque_fd cl_khr_external_memory_opaque_fd cl_khr_semaphore
Device Extensions with Version                  cl_khr_global_int32_base_atomics                                 0x400000 (1.0.0)
cl_khr_global_int32_extended_atomics                             0x400000 (1.0.0)
cl_khr_local_int32_base_atomics                                  0x400000 (1.0.0)
cl_khr_local_int32_extended_atomics                              0x400000 (1.0.0)
cl_khr_fp64                                                      0x400000 (1.0.0)
cl_khr_3d_image_writes                                           0x400000 (1.0.0)
cl_khr_byte_addressable_store                                    0x400000 (1.0.0)
cl_khr_icd                                                       0x400000 (1.0.0)
cl_khr_gl_sharing                                                0x400000 (1.0.0)
cl_nv_compiler_options                                           0x400000 (1.0.0)
cl_nv_device_attribute_query                                     0x400000 (1.0.0)
cl_nv_pragma_unroll                                              0x400000 (1.0.0)
cl_nv_copy_opts                                                  0x400000 (1.0.0)
cl_nv_create_buffer                                              0x400000 (1.0.0)
cl_khr_int64_base_atomics                                        0x400000 (1.0.0)
cl_khr_int64_extended_atomics                                    0x400000 (1.0.0)
cl_khr_device_uuid                                               0x400000 (1.0.0)
cl_khr_pci_bus_info                                              0x400000 (1.0.0)
cl_khr_external_semaphore                                        0x400000 (1.0.0)
cl_khr_external_memory                                           0x400000 (1.0.0)
cl_khr_external_semaphore_opaque_fd                              0x400000 (1.0.0)
cl_khr_external_memory_opaque_fd                                 0x400000 (1.0.0)
cl_khr_semaphore                                                 0x400000 (1.0.0)

NULL platform behavior
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, …)  No platform
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, …)   No platform
clCreateContext(NULL, …) [default]            No platform
clCreateContext(NULL, …) [other]              Success [NV]
clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT)  No platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU)  No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU)  No platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR)  No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM)  Invalid device type for platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL)  No platform

Output of clpeak:

Platform: NVIDIA CUDA
Device: NVIDIA GeForce GTX 1660 SUPER
Driver version  : 580.94.16 (Linux x64)
Compute units   : 22
Clock frequency : 1830 MHz

Global memory bandwidth (GBPS)
  float   : 315.43
  float2  : 332.34
  float4  : 341.70
  float8  : 344.40
  float16 : 299.47

Single-precision compute (GFLOPS)
  float   : 5597.49
  float2  : 5594.86
  float4  : 5583.97
  float8  : 5562.14
  float16 : 5517.49

No half precision support! Skipped

Double-precision compute (GFLOPS)
  double   : 175.44
  double2  : 175.21
  double4  : 174.82
  double8  : 174.00
  double16 : 172.33

Integer compute (GIOPS)
  int   : 5569.51
  int2  : 5527.71
  int4  : 5556.84
  int8  : 5570.73
  int16 : 5574.46

Integer compute Fast 24bit (GIOPS)
  int   : 5588.66
  int2  : 5583.15
  int4  : 5582.27
  int8  : 5559.50
  int16 : 5510.91

Integer char (8bit) compute (GIOPS)
  char   : 4946.56
  char2  : 4950.57
  char4  : 4959.65
  char8  : 4515.14
  char16 : 4087.85

Integer short (16bit) compute (GIOPS)
  short   : 4932.93
  short2  : 4789.02
  short4  : 4904.42
  short8  : 4619.06
  short16 : 3903.14

As you can see, it skips half precision altogether since there’s no cl_khr_fp16.
Next I did the LSFG-VK test with FP16 mode off and on.


As expected, seems like the driver’s shader compiler is not even trying to leverage FP16.

Here’s a screenshot of my iGPU using the FP16 shaders, clear framerate difference between FP32 and FP16 (older version of lsfg-vk but still checks out).

Not sure if the last few posts in this thread helps?

Unfortunately I’m not the main author of LSFG-VK so I don’t know the HLSL → SPIRV intricacies much, and she mentioned that it should just use whatever is exposed by the driver, I actually tried re-benchmarking using the new-new benchmarking tool and the result with the FP16 shader is still disappointing (without the -a flag btw).

Then I re-ran the test with my Vega iGPU on the mesa RADV 25.3.4 driver,

and it’s almost a quadruple speedup.
This is a tad disappointing for a GPU that doesn’t do matrix math and relies solely on the FP16 SFU, with dual rate FP16, the 1660S should at least get close to 2x scaling with the FP16 shader.

It looks like the situation hasn’t improved from that outlined here.

That’s truly disappointing that they never even bothered to fix this, thanks for the info.