class_docstr: Partial Scheduling implementation for CUDA C++ Kernels.
  This class is intended to be used in combination with TritonScheduling,
  and delegated to by CUDACombinedScheduling.
  
  It handles fusion decisions and CUDA C++ specific template code generation.
code: def define_kernel(self, src_code: str, node_schedule) -> str:
      wrapper = V.graph.wrapper_code
      if src_code in wrapper.src_to_kernel:
          kernel_name = wrapper.src_to_kernel[src_code]
      else:
          fused_name = (
              get_fused_kernel_name(
                  node_schedule, config.triton.descriptive_names
              )
              if config.triton.descriptive_names
              else ""
          )
          kernel_name = "_".join(
              ["cuda", fused_name, wrapper.next_kernel_suffix()]
          )
          # use the original src_code as the key
          wrapper.src_to_kernel[src_code] = kernel_name
          src_code = src_code.replace("KERNEL_NAME", kernel_name)
  
          _, _, kernel_path = get_path(code_hash(src_code), "py")
  
          compile_wrapper = IndentedBuffer()
          compile_wrapper.writeline("async_compile.cuda(r'''")
          compile_wrapper.splice(src_code, strip=True)
          compile_wrapper.writeline("''', 'so')")
  
          metadata_comment = f"# kernel path: {kernel_path}"
          origins, detailed_origins = get_kernel_metadata(
              node_schedule, wrapper
          )
          metadata_comment += "\n" + origins + "\n" + detailed_origins
          wrapper.define_kernel(
              kernel_name, compile_wrapper.getvalue(), metadata_comment
          )
      return kernel_name
  
imports: import logging
  from typing import cast, List
  from ...._dynamo.utils import counters
  from ...None import config, ir
  from ...codecache import code_hash, get_path
  from ...ir import ComputedBuffer, CUDATemplateBuffer, Pointwise
  from ...scheduler import BaseSchedulerNode, BaseScheduling, FusedSchedulerNode, Scheduler, SchedulerNode
  from ...utils import get_fused_kernel_name, get_kernel_metadata, sympy_product
  from ...virtualized import V
  from ..common import IndentedBuffer
  from .cutlass_epilogue_gen import CUTLASSEVTOpNotImplementedError
label_desc: Use image node_id 8 for calling the CUDACPPScheduling obj's underlying member method code with example usage: obj.define_kernel(src_code, node_schedule) and returns: kernel_name