what’s the difference between .cuh and .h ?
no difference, formally
a header file in C or C++ need not have a particular extension. The usage of .h extension as far as I know is merely a naming convention. Other tools like editors and whatnot may condition e.g. text highlighting based on file extensions, but that is an ancillary topic in my view.
people often use .cuh in my experience as a convention to indicate a header file that also contains cuda-specific syntax, meaning it must be processed by
nvcc, and included in a .cu file. But there is nothing that enforces that behavior.