code: def nvmlDeviceGetName(handle):
      r
      c_name = create_string_buffer(NVML_DEVICE_NAME_BUFFER_SIZE)
      fn = _nvmlGetFunctionPointer("nvmlDeviceGetName")
      ret = fn(handle, c_name, c_uint(NVML_DEVICE_NAME_BUFFER_SIZE))
      _nvmlCheckReturn(ret)
      return bytes_to_str(c_name.value)
docs: r"""
      /**
       * Retrieves the name of this device.
       *
       * For all products.
       *
       * The name is an alphanumeric string that denotes a particular product, e.g. Tesla &tm; C2070. It will not
       * exceed 64 characters in length (including the NULL terminator).  See \ref
       * nvmlConstants::NVML_DEVICE_NAME_BUFFER_SIZE.
       *
       * @param device                               The identifier of the target device
       * @param name                                 Reference in which to return the product name
       * @param length                               The maximum allowed length of the string returned in \a name
       *
       * @return
       *         - \ref NVML_SUCCESS                 if \a name has been set
       *         - \ref NVML_ERROR_UNINITIALIZED     if the library has not been successfully initialized
       *         - \ref NVML_ERROR_INVALID_ARGUMENT  if \a device is invalid, or \a name is NULL
       *         - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small
       *         - \ref NVML_ERROR_GPU_IS_LOST       if the target GPU has fallen off the bus or is otherwise inaccessible
       *         - \ref NVML_ERROR_UNKNOWN           on any unexpected error
       */
      nvmlReturn_t DECLDIR nvmlDeviceGetName