def METHOD_NAME(func):
    targetoptions = kws.copy()
    targetoptions['debug'] = debug
    targetoptions['lineinfo'] = lineinfo
    targetoptions['link'] = link
    targetoptions['opt'] = opt
    targetoptions['fastmath'] = fastmath
    targetoptions['device'] = device
    targetoptions['extensions'] = extensions
    disp = CUDADispatcher(func, targetoptions=targetoptions)
    if cache:
        disp.enable_caching()
    for sig in signatures:
        argtypes, restype = sigutils.normalize_signature(sig)
        if restype and not device and restype != types.void:
            raise TypeError("CUDA kernel must have void return type.")
        if device:
            from numba.core import typeinfer
            with typeinfer.register_dispatcher(disp):
                disp.compile_device(argtypes, restype)
        else:
            disp.compile(argtypes)
    disp._specialized = specialized
    disp.disable_compile()
    return disp