Yep, I did that. Clean build, CUDA 13.2, GPU is seen but "no kernel image is available for execution on the device".
I can see the issue in your screenshots. Your GPU is detected correctly (RTX 4090, cap 8.9, CUDA 13.1/13.2), but the kernel binary was compiled for the wrong architecture.
The error
cuSetGpuParams failed: no kernel image is available for execution on the device means the .cu file was compiled for sm_120 (Blackwell) but your GPU needs sm_89 (Ada Lovelace).
Please try this exact sequence — all on the command line, don't edit the Makefile:
make clean
make GPU_ARCH="-gencode=arch=compute_89,code=sm_89"
During compilation, look for this line in the output:
--gpu-architecture=compute_89
If you see
compute_120 instead, the override isn't working. In that case, edit the Makefile directly — change line 24:
GPU_ARCH ?= -gencode=arch=compute_89,code=sm_89
Then:
The key thing is that
all .o files must be deleted before recompiling. If even one old object file remains, the linker will use the wrong kernel image.
Make clean did the trick. I think there were .o files with 120. Now it is working with 7.56-7.71 Gkeys/s.